路由工作流模式,对于一个任务的输入,从一个候选智能体的列表中选择最合适的目标,把任务的输入转发给该智能体。所选择的智能体的输出作为运行结果。每个候选智能体都使用任务执行模式实现。每个路由目标有一个名称作为其标识符。选择路由目标的逻辑,通常使用大模型来实现,也可以基于某些规则来实现路由的选择。
该模式的实现中包含了一个路由任务和一系列的目标任务。只有一个目标任务会被选择来处理任务的输入。路由任务和目标任务都使用任务执行模式来实现。
下图给出了路由工作流模式的基本流程。

在使用大模型选择目标路由时,需要包含目标路由的名称和其他描述信息。所有目标路由的信息,加上原始的任务输入,被发送给大模型,由大模型来进行选择。大模型返回所选择的路由的名称。任务输入被传递给目标路由所对应的智能体来执行,该智能体的输出作为原始任务的输出。
目标路由的信息可以包括路由的描述和其他辅助信息。添加更多的辅助信息,可以帮助大模型更准确地选择目标路由。在最简单的情况下,目标路由的名称和描述是必须的。
使用路由工作流模式的一个示例是,为客户服务的查询选择最合适的子系统。对一个大型的电子商务网站来说,通常会有不同的部门来处理不同的客户服务请求。每个部门有自己的客服智能体。这些智能体可能使用各自的微调过的模型,或是连接到不同的检索增强生成系统。对于一个客户的请求,首先选择最适合处理的子系统,再把请求转发给该子系统进行处理。
为了演示的需要,系统中一共设置了 3 个不同的智能体来处理客服请求。
payment: 处理支付与退款相关的请求。
shipping: 处理物流相关的请求。
general: 处理其他的通用请求。
对于下面的客服请求:
我支付了订单,为什么在 app 上仍然显示为未支付。
该输入首先由路由智能体进行处理。发送给大模型的提示如下所示。
目标: 选择最合适的目标来处理输入
候选项:- payment: 处理支付与退款相关的请求- shipping: 处理物流相关的请求- general: 处理其他的通用请求
输入:我支付了订单,为什么在 app 上仍然显示为未支付。
大模型的输出是 JSON 内容,其中包含了两个字段。
name 表示所选择的目标路由的名称。
reason 表示选择该目标路由的理由。该理由不是必须的。
大模型的输出如下所示。payment 路由被选择来处理客服请求。
{ "name": "payment", "reason": "该问题与支付有关,用户已付款,但应用程序显示订单未付款。"}
客服请求被转发给 payment 智能体进行处理。该智能体的输出如下所示。这也是主任务的输出。
{ "answer": "很抱歉听到您遇到的问题。请确认付款是否已成功处理,并查看是否有确认邮件。如果问题仍然存在,请尝试刷新应用或联系我们的客服团队寻求帮助。"}
下图是该智能体执行时的 trace。最外层的 agent.execute 代表整个智能体的执行。整个执行过程分成两个阶段。第一个阶段是使用大模型进行路由的选择。第二个阶段是调用所选择的智能体。内部的 agent.execute 代表对 payment 智能体的调用。从 agent.name 可以看出来,实际上调用的是 PaymentSupportAgent。

下图是使用 Swagger UI 测试的结果。可以看到 payment 智能体的输出作为整个任务的执行结果。

434

被折叠的 条评论
为什么被折叠?



