Agent 推理与执行分离:构建可维护的 AI 智能体架构
面向资深后端工程师,深入 Agent 架构中的推理与执行分离模式。
从单体 Agent 的困境说起
假设你构建了一个简单的 ReAct Agent:LLM 在同一个循环中同时完成「思考做什么」和「具体怎么做」。代码往往长这样:
while True:
thought = llm.generate(f"当前状态:{state},下一步做什么?")
action = parse_action(thought) # 执行工具调用
result = execute_tool(action)
state += f"\n执行结果:{result}"
看起来简洁,但部署到生产后会遇到一系列问题:
- 调试困难:一个失败的步骤到底是推理错了还是执行错了?日志里 Thought/Action/Observation 混在一起,难以定位根因。
- 测试困难:你想 mock 工具调用来测试推理逻辑,但推理和执行在一个函数里,只能端到端测试。
- 上下文污染:上一次执行的冗余输出挤占了下一次推理的窗口。
- 无法重放:生产环境出了 bug,你想重放当时的推理链路——但执行结果不可重复(API 超时、数据库状态变了)。
这些问题的根源在于:推理(Reasoning)和执行(Execution)是两种不同的关注点,却被耦合在了同一个循环中。