同样要存"用户消息 + assistant 回复 + tool 调用 + tool 结果 + 中间变量",三家选了三种截然不同的数据结构。这一节并排看 data shape,并对比"判断要不要再 loop 一轮"的三种实现——会让你对"agent loop 的状态管理"建立物理直觉。
建议先读《入口 / 三家 agent loop 的骨架》;如果你是跳读,至少先看本章索引与本页 TL;DR。
进阶理解层,把抽象落实到真实代码与状态机。
同样要存" 用户消息 + assistant 回复 + tool 调用 + tool 结果 + 中间变量 ",三家选了三种 截然不同的数据结构 。这一节并排看 data shape,并对比" 判断要不要再 loop 一轮 "的三种实现——会让你对"agent loop 的状态管理"建立物理直觉。
先追 entry / state / extension points,再看 API 名字。
课程主线:源码 + 官方 docs + 版本上下文。
list[MemoryStep]),线性日志式。每步追加一个 ActionStep。"状态是一份运行历史"。class AgentState(TypedDict): messages: Annotated[ list[AnyMessage], add_messages # reducer ] remaining_steps: NotRequired[ RemainingSteps ] # middleware 可以扩 # class MyState(AgentState): # plan: NotRequired[str]
Reducer 是关键字段。add_messages 不是 list.append——它处理"消息按 id 去重"、"tool message 配对"、"message 合并 stream 增量"等约 200 行逻辑。
序列化由 LangGraph checkpointer 自动做(pickle / msgpack / Postgres JSONB)。新 middleware 注入字段时通过 _merge_state_schemas 合 TypedDict。
@dataclass class RunState(Generic[TContext]): current_agent: Agent[TContext] original_input: str | list generated_items: list[RunItem] model_responses: list[ModelResponse] input_guardrail_results: list tool_use_tracker: AgentToolUseTracker context_wrapper: RunContextWrapper[TContext] current_turn: int max_turns: int # ... 还有 trace 相关 fields
RunContextWrapper 持有用户传进来的 context(任意类型)+ usage 统计 + 当前 trace—— tool 函数 signature 第一个参数就是它,tool 通过它访问"应用上下文"。
RunState 在 turn 之间就地修改(append 新 item / increment turn),结束后整个 dump 进 RunResult。
class AgentMemory: system_prompt: SystemPromptStep steps: list[ TaskStep | ActionStep | PlanningStep ] @dataclass class ActionStep(MemoryStep): step_number: int model_input_messages: list model_output_message: ChatMessage tool_calls: list[ToolCall] observations: str is_final_answer: bool error: AgentError | None duration: float
没 reducer——就是 list.append(action_step)。每步独立自完备,包含输入 / 输出 / observations / error / 耗时。这种"日志式"结构最适合 trace 可视化。
序列化:每个 step 是 dataclass 直接 asdict。但没有内置 checkpointer——崩溃后默认从头跑。
下面这张图把"用户问'sf 天气如何',agent 调一次 get_weather tool,输出 'sunny'"这个最小例子在三家的实际数据形态画出来——三家形状差异之大会颠覆你"它们差不多"的直觉。