AI Agent 工作原理
AI Agent 工作原理:智能体循环、工具、规划与记忆
进阶 25 分钟 适合: 初学者 / 开发者 / 研究者
本课要点
- ▸Agent 就是在循环里运行的大模型:读取当前情况,决定一个动作(通常是调用工具),观察结果,重复直到目标完成。
- ▸四个基本组件:模型、工具、记忆与上下文,以及带人工监督的停止条件。
- ▸大多数生产系统是工作流(固定步骤里调用大模型),而不是完全自主的 Agent;只有灵活性值得付出额外成本和风险时,才用自主模式。
- ▸Agent 失败主要发生在软件层:工具缺失或选错、工具说明不清、环境报错、上下文丢失,而不只是模型不够聪明。
从“回答”到“行动”
普通大模型把文字变成文字。**AI Agent(智能体)*则用大模型去完成一个目标*,比如“修好这个失败的测试”“找三家供应商比价”“约周五都有空的人开会”,在一个环境里分很多步采取行动。Claude Code、Codex、Gemini CLI、Goose、OpenCode 这些编程 Agent 是目前用得最广的例子。
智能体循环
所有 Agent 的核心都是同一个循环:
flowchart TB G["目标 + 指令 + 可用工具"] --> T["大模型:思考下一步"] T -->|"调用工具"| A["执行工具(代码、搜索、文件、API、浏览器)"] A --> O["观察:工具结果或报错"] O --> C["更新上下文 / 记忆"] C --> T T -->|"完成,或需要人介入"| F["最终答案 / 交给人"]
这就是 ReAct 模式(Yao 等,2022):推理(“测试失败是因为日期按 UTC 解析了,我去看看解析器”)、行动(一次工具调用)和观察结果交替进行。Toolformer(Schick 等,2023)等早期工作证明模型能学会何时调用工具;如今的模型经过训练,可以原生输出结构化的工具调用(见 工具调用与 MCP)。
写成代码,一个最小的 Agent 短得出人意料:
messages = [system_prompt, user_goal]
while True:
reply = llm(messages, tools=TOOLS) # 模型可能请求调用工具
messages.append(reply)
if not reply.tool_calls: # 不再行动 → 给出最终答案
break
for call in reply.tool_calls:
result = run_tool(call.name, call.args) # 在沙箱中执行,并做权限检查
messages.append(tool_result(call.id, result))
其余的一切,规划、记忆、安全、评估,都是为了让这个循环更可靠。
基本组件
| 组件 | 作用 | 例子 |
|---|---|---|
| 模型 | 决定下一步做什么 | 工具调用能力强的前沿模型或开源模型 |
| 工具 | 对外部世界采取行动 | 终端、代码沙箱、文件编辑、网页搜索、浏览器、数据库、SaaS API、MCP 服务器 |
| 上下文与记忆 | 模型此刻知道什么 | 系统提示、对话、检索到的文档、笔记文件、长期记忆库 |
| 规划 | 把目标拆成步骤,从错误中恢复 | 明确的计划或待办清单、反思、子 Agent |
| 护栏与监督 | 控制损害范围 | 沙箱、权限确认、预算、步数上限、人工审批 |
**规划。**Agent 写下并不断更新一份明确的计划,并对失败做反思,效果会更好。Reflexion(Shinn 等,2023)会把失败尝试中总结出的教训用文字存下来,再重新尝试。
记忆。上下文窗口就是短期记忆,很快会被工具输出塞满。Agent 会做摘要、把笔记写进文件,或从长期记忆库中检索。Generative Agents(Park 等,2023)把记忆流和按“新近度、重要性、相关性”检索结合起来。每一步该把什么放进上下文窗口,常被称为上下文工程。
**环境和模型一样重要。**SWE-agent(Yang 等,2024)发现,给模型一个专门设计的“Agent-计算机接口”(简洁的文件查看器、搜索和编辑命令,并且反馈清晰),比直接给它一个原始终端,在 SWE-bench 上的成绩明显更好。
工作流与 Agent
Anthropic 被广泛引用的指南(Building effective agents)区分了两类系统:
- 工作流:沿着预先写好的代码路径编排多次大模型调用,包括提示链、路由、并行化、编排者-执行者、评估者-优化者。
- Agent:由大模型动态决定自己的流程和工具使用。
它的建议是:从最简单可行的方案开始,只有任务真正需要灵活的多步决策时才增加自主性。Agent 消耗更多 token、更慢,而且错误会累积。
Agent 为什么会失败
真实任务基准(见 Agent 评估)和一线经验都指向一些反复出现的失败原因,其中很多在软件层,而不在模型本身:
- 选工具:需要的工具不存在,或者相似的工具太多让模型选错。
- 工具说明与报错:参数文档含糊、报错信息没用、输出太大塞不进上下文。
- 环境:缺少依赖、登录墙、验证码、界面变化。
- 长链条任务:每一步的小错误在几十步里不断累积;上下文丢失或被污染。
- 安全:Agent 读到的内容里可能藏着劫持它的指令(见 提示注入与工具投毒)。
正因为如此,Agent 调用的软件本身,包括说明写得好不好、权限怎么给、有没有经过测试,都非常重要;这也是本站从 Agent 的视角整理软件档案的原因。
下一步
在 工具调用与 MCP 里学习工具调用的具体机制,然后继续 Agent 的规划与记忆、A2A 与多 Agent 协作、代码沙箱、浏览器与电脑操作(编写中)。
常见问题
聊天机器人和 AI Agent 有什么区别?
聊天机器人一次回答一条消息。Agent 会为一个目标连续执行多个步骤,自己选择并调用工具(搜索、执行代码、读写文件、调用 API),利用工具结果继续推进,往往不需要人逐步确认。
ReAct 模式是什么?
ReAct(推理 + 行动)让推理文字和动作交替进行:模型先写一段思考,调用工具,读取观察结果,再写下一段思考,如此往复。现在大多数 Agent 循环都沿用这个思路,只是改用了原生的工具调用。
做 Agent 一定要用框架吗?
不一定。一个基础 Agent 就是围绕支持工具调用的模型 API 写几十行循环代码。框架在状态管理、追踪、重试和多 Agent 编排上有帮助,但也增加了抽象层;很多团队一开始并不用框架。
在自己电脑上运行 AI Agent 安全吗?
必须加限制:在沙箱或容器里运行,只给最小权限和最少的凭证,删除类或对外的操作要人工确认,还要警惕它读到的内容里藏着提示注入。