Agent 入门:从语言模型到行动系统

版本说明:本文保留为已发布快照。持续更新、经过源码核验和实践验证的版本,见 《Agent 工程实践》第 1 课。后续完整正文只在书籍仓库维护。

1. 给“缸中大脑”接上外部世界

单独看大语言模型,它很像一个“缸中大脑”:可以读懂输入并生成文本,却不会真的打开文件、访问天气接口或发送邮件。外部动作来自模型之外的程序。

这个程序通常称为 Agent Harness。它保存会话,向模型描述可用工具,执行模型请求的动作,再把环境结果送回模型。模型根据新结果决定下一步,直到任务结束。

模型可以提出“删除数据库”,却不能批准自己的请求。Harness 必须独立检查参数、权限和审批规则;提出动作的人不能同时成为授权动作的人。

1
2
3
4
5
6
7
8
9
10
用户目标

Harness 调用模型

模型选择下一步或请求工具

Harness 执行工具

环境结果回到模型
└─────────────── 循环

从工程运行时看,可以先记住四个部分:

1
2
3
4
model       判断下一步
harness 组织循环、状态与控制边界
tools 读取或改变外部世界
environment 返回文件、网页、命令等真实反馈

这是一种运行时拆法,不是行业唯一标准。规划、记忆、感知和行动则是另一种“能力视角”,用来描述 Agent 表现出了什么。一个最小 Agent 未必有独立规划器、长期记忆或反思模块,但一定要有人组织模型与环境之间的循环。Anthropic 对 Agent 运行时的拆解

2. 有 LLM 和工具,不一定就是 Agent

假设需求是:查询明天上海的天气;如果下雨,就创建带伞提醒并给同事发邮件。

第一种实现把路径写死在代码里:

1
2
3
4
查询天气
→ 判断是否下雨
→ 创建日历提醒
→ 发送邮件

模型可以参与其中,例如把天气文本转成结构化结果,但下一步始终由代码决定。这是 Workflow。

第二种实现只给模型目标、天气工具、日历工具和邮件工具。模型先查天气,根据结果决定是否需要提醒、是否缺少收件人、何时停止。路径由模型在运行时选择,这才是本文所说的 Agent。

系统谁决定下一步
Workflow预先写好的代码路径
Agent模型根据目标和环境反馈动态决定

两者可以混用。企业流程可以用确定性代码控制付款和审批,只在“怎样排查故障”这类开放步骤中放入 Agent。边界不在于是否使用 LLM、工具或状态图,而在于谁控制执行路径。Anthropic 对 Workflow 与 Agent 的区分

3. Agent Loop 不等于 ReAct

最小 Agent 通常只有一条反馈循环:

1
2
3
4
模型判断
→ 工具执行
→ 返回结果
→ 模型继续判断

它已经可以处理错误。例如命令返回 403 Forbidden,模型看到结果后可能修改请求头再试。这叫基于工具反馈的 Agent Loop。

ReAct 是更具体的方法。原论文让模型交错生成 reasoning trace 与 task-specific action:推理更新计划,行动从环境获取新信息,再继续推理。现代 Tool Calling Agent 可以使用相同的“观察后再行动”思想,却不一定生成或公开论文形式的 Thought。因此,遇错重试不能一概叫 ReAct。ReAct v3

这个区分很实用。以后看到框架宣传“支持 ReAct”,应该继续看它究竟实现了交错推理轨迹,还是只提供普通的模型—工具循环。

最短记忆是:Agent Loop 是外层“模型—工具—结果”循环;ReAct 是在循环里显式交错 Reasoning、Action 与 Observation。只有思考链不等于 ReAct,遇错后换工具也不自动证明用了 ReAct。

4. 反思和多 Agent 都是可选增强

Agent 给出第一版结果后,可以再调用一次模型进行评审和改写。这类“生成—反馈—改写”更接近 Self-Refine。Reflexion 又多了一层:它从任务反馈中生成语言反思,把反思保存到 episodic memory,用于后续 trial。Self-Refine v2Reflexion v4

“Reflection”常被当成总称,但工程实现仍要回答三个问题:反馈来自模型自己、外部测试还是人工?什么条件触发重写?什么时候停止?没有这些控制,增加一轮自检只会增加成本,不保证结果变好。

Self-Refine 是“当场改稿”:生成第一版,给反馈,立刻重写当前结果。Reflexion 是“记住教训”:任务失败后生成语言反思,把它放进 episodic memory,下一次尝试先读取。二者都不是模型天然自带的质量保证。

多 Agent 也不是把角色写成“产品经理、开发、审查员”就自动获得收益。它适合可并行、彼此相对独立,或者单一上下文装不下全部信息的任务。依赖密集的改代码任务往往需要大量同步,多个 Agent 反而会重复读取、互相等待,并消耗更多 Token。AutoGen 官方也建议先把单 Agent 做好,只有单 Agent 不足时再使用 Team。Anthropic 多 Agent 系统AutoGen Teams

例如分别调查三个互不依赖的仓库适合并行;共同重构同一个函数、后一步依赖前一步时,多个 Agent 通常只会增加同步成本。

5. 能观察执行轨迹,不等于看见模型内心

Agent 一旦进入多轮循环,就需要 Tracing。Trace 可以记录模型调用、工具参数与结果、耗时、Token、错误和父子调用关系。它能回答“系统哪一步失败了”,但不能保证还原模型完整的隐藏思维。

Tracing 像行车记录仪,回放一次运行发生了什么;Evaluation 像考试和成绩单,比较一批任务做得怎么样。两者都不负责在运行中踩刹车。

主流模型 API 通常只提供显式输出、Thinking Block 或 Reasoning Summary,并不开放原始 reasoning token。文章和监控系统应把这些内容称为“可观察执行轨迹”,不要称为“完整心智过程”。LangSmith TracingOpenAI Reasoning SummariesClaude Summarized Thinking

Evaluation 解决的是另一个问题:用数据集和评分器比较版本、发现回归、监控生产质量。它可以发现幻觉率或循环率升高,却不会在一次运行中自动阻止问题。最大步数、超时、Token 预算、权限和人工接管才是运行时止损手段。LangSmith Evaluation

6. 什么时候不该使用 Agent

Agent 用延迟、Token 成本和可预测性换取动态决策能力。路径固定的天气通知适合 Workflow;只需一次生成的任务甚至不需要 Workflow。只有步骤难以预先写死,并且模型能从环境反馈中纠偏时,Agent 才开始回本。

例如“查数据库、生成日报、人工确认、发邮件”应由确定性 Workflow 控制。中间可以调用一次 LLM 写摘要,但无需 Agent Loop、三个角色 Agent、Reflexion 或长期记忆。固定路径不应为了使用 Agent 这个词而变复杂。

判断一个系统时,可以先问两句话:

1
2
下一步是谁决定的?
环境反馈会不会改变后续路径?

如果答案是“代码决定,而且路径不变”,它是 Workflow。若模型在循环中根据目标和反馈选择工具、调整步骤并决定停止,它才是 Agent。

下一步可以从两个角度继续:

参考资料

主动回忆自测

  1. Model、Harness、Tool 与 Environment 分别负责什么?
  2. Workflow 与 Agent 的分界为什么不是“有没有工具”?
  3. Agent Loop 与 ReAct 有什么区别?
  4. Self-Refine 与 Reflexion 有什么区别?
  5. 什么任务适合多个 Agent,什么任务不适合?
  6. Tracing、Evaluation 和运行时止损分别做什么?
  7. 为什么 Model 不能批准自己的危险动作?
  8. 固定付款流程和开放式故障排查应怎样组合?
  9. 为什么更好的工具接口会改变同一个模型的表现?
  10. 一个固定日报任务的最小架构是什么?
展开查看简答
  1. Model 决策,Harness 管循环和策略,Tool 执行动作,Environment 返回真实结果。
  2. Workflow 的路径由代码预设;Agent 的下一步由模型根据反馈决定。
  3. Agent Loop 是外层反馈循环;ReAct 还显式交错 Reasoning、Action 与 Observation。
  4. Self-Refine 当场改当前结果;Reflexion 把教训存入记忆,影响下一次尝试。
  5. 独立、可并行或上下文可隔离的任务适合;强依赖、共享同一文件的任务可能更差。
  6. Tracing 回放一次运行,Evaluation 比较一批结果,最大步数、超时、预算与人工负责止损。
  7. 模型可能误判或受提示注入影响,提出动作和授权动作必须分离。
  8. 确定性 Workflow 控制付款,Agent 只处理无法预设路径的调查部分。
  9. 工具决定可选动作和可见反馈;精确编辑和诊断错误能帮助模型纠偏。
  10. Workflow 查询数据,调用一次 LLM 生成摘要,人工确认,再用幂等方式发送。