LLM Agent 架构:感知—规划—行动的闭环
LLM Agent 让模型不止”回答问题”,而是能感知环境、做计划、调用工具、观察结果并继续,直到任务完成。它把一次性的”生成”扩展成可持续、可纠偏的”过程”,适用于需要外部信息、多步决策或动作反馈的任务。理解它的组成与边界,能帮你在”加 Agent”之前先想清楚到底值不值。
是什么
一个最小 Agent 通常由四部分构成:模型(大脑,负责推理与生成)、记忆(上下文与历史)、规划(把目标拆成可执行步骤)、工具(对外能力,如搜索、代码执行、API 调用)。执行器把工具结果回写为”观察”,再喂回模型进入下一轮。记忆又分为短期(本轮对话上下文)与长期(外部向量库或数据库),前者决定当下能”看见”什么,后者让跨会话的经验可复用——例如把用户偏好存入向量库,下次直接检索而非重新询问。
工具调用通常以”模型输出结构化意图、运行时解析并执行”的方式实现。OpenAI 的 function calling 与 Anthropic 的 tool use 都采用”模型返回 JSON 形参、由宿主代码调用函数”的协议;更近的 Model Context Protocol(MCP,由 Anthropic 提出)则试图把”工具如何被描述和发现”标准化,让不同模型与客户端共享同一套工具接口,避免每个 Agent 重复适配。工具的”描述”本身也是提示的一部分——写得清楚,模型才调用得准。
为什么有用
当任务需要外部信息(实时天气、库存)、多步决策(先查再算再写)或动作反馈(调用 API 改状态)时,单条提示难以胜任:上下文有限、无法主动获取新信息、也不能执行副作用。Agent 通过”规划 + 工具 + 记忆”把这类任务拆成可管理的循环,并在每一步根据观察调整策略,比一次性生成更鲁棒。例如”查竞品今天价格,若低于阈值就发提醒”这种带条件动作的任务,没有工具循环几乎无法完成。
但它不是银弹。对每个简单、确定、无需外部状态的请求都套 Agent,会带来额外延迟、token 成本与出错面。判断标准很直接:任务能否用一条提示 + 一次调用解决?能,就不上 Agent。再补充一条:若任务失败可接受、且无需回滚,才适合自动化;否则宁可把”执行动作”这步留给人工确认。
怎么用
以 ReAct(Reasoning + Acting,Yao 等人 2022,arXiv:2210.03629)风格为例,循环是:思考下一步 → 选择动作 → 执行 → 读取观察 → 再思考,直到给出最终答案。LangChain、LlamaIndex 等框架都把这套循环封装为 Agent 执行器,你只需声明可用工具,运行时负责调度。下面用 LangChain 声明一个工具的简化形态:
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
@tool
def search(query: str) -> str:
"""检索公开网页,返回与 query 相关的摘要。"""
# 这里接你们自己的检索后端
return "晴,32 摄氏度"
llm = ChatOpenAI(model="gpt-4o-mini")
# 把 tool 列表交给 Agent,由执行器在循环中调用
工程上常配合”规划模块”做更长的任务分解,例如先把”整理本周销售并邮件发出”拆成”取数→画图→起草→发送”四步,再逐步执行;每一步的产物写入短期或长期记忆,供后续步骤引用。除了 ReAct,还有 Plan-and-Execute(先定全局计划、再逐步执行)、Reflexion(基于失败反思重试)等变体,复杂度与可靠性各不相同,可按任务选。对外部依赖,务必给工具加超时与重试,并对返回做 schema 校验,防止脏数据污染下一轮上下文。
ReAct 循环示意:
Thought: 我需要先查深圳的天气
Action: search("深圳 天气")
Observation: 晴,32 摄氏度
Thought: 信息已足够回答
Answer: 深圳今天晴,约 32 度,适合户外活动
注意点
- 工具要可回滚、可审计:任何写操作(发邮件、改记录)应有人工确认或幂等设计,保留日志以便复盘;对外 API 调用带上幂等键,避免重试造成重复副作用。
- 循环需设最大步数:防止模型陷入”思考—动作”死循环空转,通常设 5–15 步上限并超时退出;超过上限应返回”未完成”而非编造结果。
- 成本随步数线性上升:每轮都把上下文(含历史观察)重发给模型,长任务 token 消耗可观,需按预算估算;可对旧观察做摘要压缩以控窗口。
- 错误处理:工具调用失败要能被模型感知并改策略,而非直接崩溃;对外部 API 加重试与降级,并在提示里告知模型”工具可能失败,请换路”。
- 可观测性:记录每轮的 Thought/Action/Observation,是调试、评估与合规的基础;没有轨迹日志,线上出问题将无从定位。
- 安全防护:模型能调用的工具范围要最小,禁止它访问未授权的内部系统;对”删除""支付”等高危动作强制人工 gate。
落地检查:
- 工具列表是否最小且必要
- 是否有步数上限与超时
- 写操作是否人工确认或幂等
- 是否保留完整轨迹日志
- 高危动作是否有审批闸门
小结
Agent 的核心是”规划 + 工具 + 记忆”的闭环,而非又一层提示词。先判断任务是否真需要外部信息、多步决策或动作反馈,再决定是否上 Agent;能一条提示解决的,就不加复杂度。上了之后,务必用步数上限、可回滚工具、完整日志与高危审批把它关进可控的笼子里,让自动化在边界内跑,而不是替你做未授权的决定。
参考与延伸阅读
- ReAct:Synergizing Reasoning and Acting in Language Models(arXiv:2210.03629)。已核验。https://arxiv.org/abs/2210.03629
- LangChain Agents 文档。已核验。https://python.langchain.com/docs/concepts/agents/
- Model Context Protocol 官方站点。已核验。https://modelcontextprotocol.io/
- Anthropic 工具使用(tool use)文档。已核验。https://docs.anthropic.com/en/docs/build-with-claude/tool-use