路由工作流
路由工作流 模式,对于一个任务的输入,从一个候选智能体的列表中,选择最合适的目标,把任务输入转发给该智能体。每个候选智能体都使用 任务执行 模式实现。每个路由目标有一个名称作为其标识符。选择路由目标的逻辑,通常使用大模型来实现。
实现
该模式的实现中包含了一个路由任务和一系列目标任务。只有一个目标任务会被选择来处理任务输入。路由任务和目标任务都使用 任务执行 模式来实现。
下图给出了路由工作流模式的基本流程。
路由选择
在使用大模型选择目标路由时,需要包含目标路由的名称和其他描述信息。所有目标路由的信息,加上原始的任务输入,被发送给大模型,由大模型来进行选择。大模型返回所选择的路由的名称。任务输入被传递给目标路由对应的智能体来执行,该智能体的输出作为原始任务的输出。
目标路由的信息可以包括路由的描述和其他辅助信息。添加更多的辅助信息,可以帮助大模型更准确的选择目标路由。
示例
使用路由工作流的一个示例是,为客户服务的查询选择最合适的子系统。对一个大型的电子商务网站来说,通常会有不同的部门来处理不同的客户服务请求。每个部门有自己的客服智能体。这些智能体可能使用不同的微调过的模型,或是连接到不同的 RAG 系统。对于一个客服的请求,首先选择最适合处理的子系统,再把请求转发给该子系统进行处理。
作为演示,系统中一共有 3 个不同的智能体来处理客服请求。
- payment: 处理支付与退款相关的请求。
- shipping: 处理物流相关的请求。
- general: 处理其他的通用请求。
对于下面的客服请求:
我支付了订单,为什么在 app 上仍然显示为未支付。
该输入首先由路由智能体进行处理。发送给大模型的提示如下所示。
Goal: Select the best target to handle the input
Choices:
- payment: 处理支付与退款相关的请求
- shipping: 处理物流相关的请求
- general: 处理其他的通用请求
Input:
我支付了订单,为什么在 app 上仍然显示为未支付。
大模型的输出是包含了两个字段的 JSON 内容。
name
表示所选择的目标路由的名称。reason
表示选择该目标路由的理由。
大模型的输出如下所示。payment
路由被选择来处理客服请求。
{
"name": "payment",
"reason": "The query is about a payment issue where the user has paid but the app shows the order as unpaid."
}
客服请求被转发给 payment
智能体进行处理。该智能体的输出如下所示。这也是主任务的输出。
{
"answer": "I'm sorry to hear about the issue. Please ensure that the payment was processed successfully and check for any confirmation emails. If the problem persists, try refreshing the app or contact our support team for further assistance."
}
下图是该智能体执行时的 trace。最外层的 agent.execute
代表整个智能体的执行。内部的 agent.execute
代表对 payment 智能体的调用。从 agent.name
可以看出来,实际上调用的是 PaymentSupportAgent
。
下图是使用 Swagger UI 测试的结果。
参考实现
See this page for reference implementation and examples.