在交接架构中,行为基于状态动态变化。核心机制:工具更新一个跨轮次持久化的状态变量(例如Documentation Index
Fetch the complete documentation index at: https://nvd-54.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
current_step 或 active_agent),系统读取这个变量来调整行为——要么应用不同的配置(系统提示词、工具),要么路由到不同的智能体。此模式同时支持不同智能体之间的交接和单个智能体内部的动态配置变更。
关键特征
- 状态驱动行为:行为基于状态变量变化(例如
current_step或active_agent) - 基于工具的转换:工具更新状态变量以在状态之间移动
- 直接用户交互:每个状态的配置直接处理用户消息
- 持久状态:状态在对话轮次之间保持
何时使用
当你需要强制执行顺序约束(只有在满足前置条件后才解锁功能)、智能体需要在不同状态下与用户直接对话、或者你正在构建多阶段对话流时,使用交接模式。此模式对于需要按特定顺序收集信息的客户支持场景特别有价值——例如在处理退款之前先收集保修 ID。基本实现
核心机制是一个工具,返回一个Command 来更新状态,触发到新步骤或智能体的转换:
为什么要包含
ToolMessage? 当 LLM 调用一个工具时,它期望一个响应。带有匹配 tool_call_id 的 ToolMessage 完成了这个请求-响应循环——没有它,对话历史会变得格式不正确。当你的交接工具更新消息时,这是必需的。教程:使用交接构建客户支持
学习如何使用交接模式构建客户支持智能体,其中单个智能体在不同配置之间转换。
实现方式
交接有两种实现方式:带中间件的单一智能体(一个带有动态配置的智能体)或**多智能体子图**(作为图节点的不同智能体)。带中间件的单一智能体
单个智能体基于状态改变其行为。中间件拦截每次模型调用,动态调整系统提示词和可用工具。工具更新状态变量以触发转换:完整示例:使用中间件的客户支持
完整示例:使用中间件的客户支持
多智能体子图
多个不同的智能体作为图中的独立节点存在。交接工具使用Command.PARENT 在智能体节点之间导航,指定下一个要执行的节点。
完整示例:使用交接的销售和支持
完整示例:使用交接的销售和支持
此示例展示了一个包含独立销售和支持智能体的多智能体系统。每个智能体是一个单独的图节点,交接工具允许智能体之间互相转移对话。
上下文工程
使用子图交接时,你可以精确控制智能体之间流动的消息。这种精确性对于维护有效的对话历史和避免可能混淆下游智能体的上下文膨胀至关重要。有关此主题的更多信息,请参阅上下文工程。 交接期间处理上下文 在智能体之间进行交接时,你需要确保对话历史保持有效。LLM 期望工具调用与其响应配对,因此当使用Command.PARENT 交接到另一个智能体时,你必须同时包含:
- 包含工具调用的
AIMessage(触发交接的消息) - 确认交接的
ToolMessage(对该工具调用的人工响应)
为什么不传递所有子智能体消息? 虽然你可以在交接中包含完整的子智能体对话,但这通常会造成问题。接收智能体可能会被不相关的内部推理所困惑,而且 Token 成本会不必要地增加。通过只传递交接配对,你可以保持父图的上下文聚焦于高层协调。如果接收智能体需要额外的上下文,考虑在 ToolMessage 内容中总结子智能体的工作,而不是传递原始消息历史。
AIMessage。这维护了有效的对话历史,并向用户界面发出信号表明智能体已完成其工作。
实现注意事项
在设计多智能体系统时,请考虑:- 上下文过滤策略:每个智能体是接收完整对话历史、过滤后的部分还是摘要?不同的智能体可能根据其角色需要不同的上下文。
- 工具语义:明确交接工具是否只更新路由状态还是也执行副作用。例如,
transfer_to_sales()是否也应该创建支持工单,还是应该是单独的操作? - Token 效率:在上下文完整性和 Token 成本之间取得平衡。随着对话变长,摘要和选择性上下文传递变得更加重要。
连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。

