Langgraph Supervisor SDK状态异常:save_order无法获取draft_order
问题分析与解决方案
核心问题根源
- 子智能体未关联自定义状态Schema:订单智能体
order_agent创建时未指定state_schema=AgentStateSchema,导致其内部状态更新无法同步到Supervisor维护的全局状态中。 - 状态更新策略导入缺失:代码中未显式导入
update_dicts,可能导致draft_order字段的更新逻辑未生效。 - 状态同步机制未对齐:子智能体与Supervisor的状态Schema不一致,造成
create_order/update_order更新的订单数据无法被save_order读取。
具体修复步骤
1. 补全状态Schema的正确定义
确保导入update_dicts并正确定义状态字段的更新策略:
from langchain.agents import AgentState from langgraph.graph.state import update_dicts from typing import Annotated class AgentStateSchema(AgentState): draft_order: Annotated[dict, update_dicts] = {}
2. 为子智能体绑定全局状态Schema
创建order_agent时必须关联自定义状态Schema,确保子智能体的状态变更能同步到全局:
# Order Agent order_agent = create_agent( model=ChatOpenAI(model="gpt-4o",temperature=0,max_completion_tokens=None,max_retries=2), tools=[create_order,update_order,save_order], system_prompt=prompt.format(), name="order_agent", state_schema=AgentStateSchema # 关键:绑定全局状态Schema )
3. 修正工具参数与状态访问逻辑
检查create_order/update_order的参数完整性,确保tool_call_id正确传入;同时优化save_order的状态读取方式:
# 修正create_order参数 @tool def create_order(source: str, destination: str, items: list, tool_call_id: str): order = {"source": source, "destination": destination, "items": items} return Command( update={ "draft_order": order, "messages": [ ToolMessage(content="Created a Draft Order", tool_call_id=tool_call_id) ] } ) # 修正save_order状态读取 @tool def save_order(runtime: ToolRuntime): # 直接从全局状态读取draft_order draft_order = runtime.state.get("draft_order", {}) # 后续发送API的逻辑
验证逻辑
修复后执行流程:
create_order/update_order的更新会同步到全局状态save_order可读取到最新的订单数据- Supervisor与子智能体的状态完全对齐,无数据隔离问题
内容的提问来源于stack exchange,提问作者Triko
相关产品推荐
相关产品推荐

