Autogen多智能体交接

https://microsoft.github.io/autogen/stable//user-guide/core-user-guide/design-patterns/handoffs.html

AutoGen 在多智能体系统里是 如何实现“任务从一个代理(agent)转移/交接(handoff)给另一个代理” 的?


文档中“交接(handoff)”场景的总体结构

  • 一个用户发起对话,会话是由多个 agent + 人类 agent 组成的团队处理。例子里有 “分类代理”(Triage Agent)、“退款代理” / “问题和修复代理”(Issues & Repairs Agent)、“销售代理”、“人类代理”。
  • 起始 agent(classification / triage)负责判断用户意图,然后决定任务应交给哪一个子 agent,比如是销售还是退款问题等。
  • Agent 可以自己处理任务(调用某些功能/工具)也可以认定自己能力不够,就通过一个“委托工具”(delegate tool)将任务交给另一个 agent。

“交接”的关键机制:如何在多个智能体之间传递任务

下面是实现交接 (handoff) 的关键模块,以及它们如何协同工作:

组成部分 功能 /作用
主题和订阅(Topics & Subscriptions) 这是实现消息分发与代理间通信的基础机制。每个 Agent 订阅一个或多个主题(topic type),当某些消息发布到某个 topic 时,订阅该 topic 的 agent 会收到任务/消息。文中使用 Publish–Subscribe 模型。 (aidoczh.com)
消息协议(Message Protocol) 定义几种消息类型,用来做 agent 间与用户之间通信与任务委派。比如 UserTask(用户请求或代理转交任务),AgentResponse(agent 的回答),等等。任务转交是通过发布 UserTask 类型的消息到某个 agent 所订阅的 topic。 (aidoczh.com)
委托工具(Delegate Tools) 这些“工具”(tool)在逻辑上并不是执行某项功能(例如退款、查物品等),而是用来决定“将任务交给哪个代理”。例如 transfer_to_sales_agent() 返回 “SalesAgent” 这个 topic type。Agent 在其 LLM 响应中如果使用了这些 delegate tools,就触发交接。 (aidoczh.com)
代理(Agents) 每个 agent 是一个 RoutedAgent,它订阅某个 topic,监听对应的消息。当收到 UserTask 消息,它会用 LLM + 可用工具 & delegate 工具来处理。处理过程中可能调用 delegate tool,把任务发给其他 agent;或者自己完成任务。若自己完成,就把 AgentResponse 发给 user topic。 (aidoczh.com)
运行时环境(Agent Runtime) 有个 runtime(在例子里是 SingleThreadedAgentRuntime),管理所有 agent 的订阅、消息发布、topic/session ID 管理等。负责在 agent 之间传递消息,维持状态。 (aidoczh.com)

交接(handoff)流程(按步骤)

下面是按运行顺序大致发生什么事情:

  1. 用户代理(UserAgent)接收来自用户的输入,构造一个 UserTask 消息(context + 用户内容),发布到某个 agent 的 topic,比如 TriageAgent。 (aidoczh.com)
  2. TriageAgent 收到 UserTask,调用 LLM 生成响应。LLM 的可用工具中含有 “delegate tools”(例如 transfer_to_sales_agenttransfer_to_issues_and_repairs 等)。Triage 判断基于用户输入,它需要把任务交给哪个 agent,就在它的响应里用 delegate tool。比如 “call transfer_to_issues_and_repairs”。 (aidoczh.com)
  3. 代理执行 delegate tool:这个工具函数返回一个 topic type,对应另一个 agent。TriageAgent 接到这个 “要移交给 Issues & Repairs Agent” 的信号后,不再继续自己处理这个任务。它把任务封装成一个新的 UserTask 消息(保留上下文 + delegate 工具调用 +函数执行结果等),发布到目标 agent 的 topic。 (aidoczh.com)
  4. 目标 agent(IssuesAndRepairsAgent)订阅它的 topic,就收到这个新发布的 UserTask,继续执行任务:问问题/调用工具/可能还有自己的 delegate 工具;可能仍然自己处理任务直到可以给用户一个回答;或者再交接(如果发现需要更合适的 agent 或 escalate to human)。 (aidoczh.com)
  5. 当某个 agent 完成了任务(LLM 响应不是工具调用、或者不需要 further delegate)时,它会发布 AgentResponse 给用户主题(User topic),用户代理收到后将内容展示给用户。交接链条结束。 (aidoczh.com)

保证交接正确/安全/可控的设计要点

要使这种交接在实际系统里可用且可靠,需要注意以下几点,文档中也体现了这些:

  • 清晰定义每个 agent 的职责与系统 message / topic 结构:哪些 agent 负责什么,通过 delegate tools 明确这些边界。
  • 控制 delegate tools 的数量与用途:只有特定工具能触发交接;不会让任意 agent 随意交接到任意 agent。
  • 上下文保存:当任务被交接时,需要连带上下文(chat history, 问题状态)一起传递给新的 agent,这样新的 agent 知道之前发生了什么。文档里 UserTask(context=...) 就是在传递这个。 (aidoczh.com)
  • 避免循环交接:要有约束和策略,比如一个 agent 只能接收某类主题的任务、或者限定交接次数,以防止任务在 agents 间来回晃。文档中虽然没详说循环防范策略,但运行时 + topic/type + agent 职责的设计实际上限制了这种情况。
  • 终止条件:当 agent 的 LLM 响应不再包含 delegate 工具调用(即意思是 “我自己能给用户答复”),或用户结束会话,任务就终止交接并回答。

总结

所以,从这个文档来看,AutoGen 的 handoffs 是通过以下机制在多个智能体之间实现任务交接的:

  1. 有一个发布/订阅机制,用 topic 来标识 agent 类型,让 agent 能接收适合自己的任务消息。
  2. 有特殊的 delegate 工具作为“转交信号”(delegate tool 的调用意味着“不在我这处理,交给别人”)。
  3. agent 在收到一个任务时能决定是否要交接(调用 delegate tool),或者自己继续处理。
  4. 任务以及对话上下文随着交接被打包并传递给目标 agent,以支持连续性。
  5. 一个运行时 (runtime) 管理 agent、topic、消息,以及调度这些事件/交接。

image.png

这里是一张 AutoGen 多智能体交接 (handoff) 机制 的流程图:

  • 用户的任务先交给 TriageAgent
  • TriageAgent 根据任务调用不同的 delegate tool,将任务转交给合适的下游 Agent(Sales / Repairs / Human)。
  • 下游 Agent 处理完任务后,用 AgentResponse 把结果返回给用户。

5fac3521-5d14-4fa0-94c8-c5b7fccea428.png