编程与软件开发

向 Microsoft.Extensions.AI 添加路由和故障转移工具

.NET 团队宣布推出四种新的实验性类型,用于在模型和服务提供商之间路由 AI 请求、在其中一个提供商发生故障时执行故障转移,以及在 Microsoft.Extensions.AI 中构建自定义路由策略。

2026-08-13
1 分钟阅读
8 浏览量
فريق تحرير certi.news
向 Microsoft.Extensions.AI 添加路由和故障转移工具

Microsoft 在 Microsoft.Extensions.AI 库中添加了四种实验性类型,用于管理 AI 请求的路由,以及模型或服务提供商之间的故障转移。这些类型全部实现了 IChatClient 接口,因此可以在库现有的架构中使用,以处理成本、可用性和响应延迟方面的限制。

路由和故障转移工具

RoutingChatClient 是选择适合每个请求的客户端并将调用转发给它的基础类。可以通过简单的回调函数创建它,也可以通过重新定义 SelectClientAsync 进行扩展,以实施更复杂或依赖应用程序状态的路由策略。

SemanticRoutingChatClient 则根据请求的语义进行路由。开发人员向库提供与每个客户端相关的语句示例,然后将用户的最后一条消息转换为嵌入向量,并与这些示例进行比较,以选择相似度最高且超过指定阈值的客户端。如果没有任何匹配项超过阈值,则使用默认客户端。

路由示例的嵌入向量会在需要时创建并进行缓存。scoreThresholdtopKscoreAggregation 等设置可以控制最低相似度、用于汇总结果的示例数量,以及使用平均值还是总和。默认情况下,该类型在释放时还会释放客户端和嵌入生成器;可以通过 leaveOpen 禁用此行为。

故障转移和尝试监控

FailoverChatClient 通过添加重试循环扩展了路由功能。如果选定的客户端在任何流式输出到达调用方之前失败,该类型会重新调用 SelectClientAsync 以选择另一个客户端。而在输出开始发送后,失败将被视为最终失败,系统不会在流传输过程中执行恢复。

该类提供 OnRoutingUpdateAsync,用于监控每次尝试,无论尝试最终成功、失败还是被放弃。尝试记录包括被调用的客户端、执行持续时间、异常(如果存在),以及响应是否完成或流式输出是否到达调用方;在适用时,还包括到达第一次更新所需的时间。可以使用这些数据评估服务提供商的性能,或构建断路器以及根据响应延迟对客户端进行排序等策略。

OrderedFailoverChatClient 提供了这种机制的现成实现:它接收按顺序排列的客户端列表,并依次尝试它们。如果所有选项都失败,则重新抛出最后一个异常。MaximumAttemptsPerRequest 指定每个请求的最大调用次数;当请求取消令牌被取消时,也会停止选择新的客户端。

构建路由策略时的注意事项

文章提醒,不应在未考虑对话轮次性质的情况下对每个对话轮次都进行重新路由。推理模型可能依赖经过编码的内容或与特定提供商相关的延续令牌,而切换到其他模型或提供商还可能无法利用提示缓存,并需要重新承担其计算成本。

对于多轮对话,文章建议使用由服务自身拥有的会话标识符固定路由,而不是依赖提供商的 ConversationId。可以将选定的路由保存在会话状态或 IDistributedCache 中,并且只有在响应成功完成后才固定路由。

还可以构建其他策略,例如根据响应延迟、健康状况、成本、能力和地理区域进行路由;由于每个路由器都作为 IChatClient 工作,还可以组合多个路由器。不过,这些工具不会根据成功响应的质量执行顺序路由,也不会运行多个客户端并合并其结果,或让多个客户端竞速以选择第一个响应;这些场景需要一个能够执行多次调用的客户端。

可用性和实验状态

RoutingChatClientRoutingContextFailoverChatClientFailoverChatClientAttemptOrderedFailoverChatClientSemanticRoutingChatClient 类型已在 Microsoft.Extensions.AI 的 10.9.0 版本中提供。所有这些类型都使用诊断标识符 MEAI001 标记为实验性。可以通过以下命令添加该软件包:dotnet add package Microsoft.Extensions.AI

新闻来源
ف
作者

فريق تحرير certi.news

同一分类

你可能还喜欢

查看所有新闻