Agent 原理

是什么

Agent(AI 智能体)是建立在 LLM 之上的自主行动系统。如果说 LLM 是”大脑”,那 Agent 就是拥有了身体、工具和自主决策能力的完整个体。

LLM 只能”说”,Agent 能”做”。LLM 回答问题,Agent 完成任务。

核心区别:

维度LLMAgent
输入一段文本(Prompt)一个目标/任务
输出一段文本回答一个完成的任务结果
行为模式一问一答,被动响应自主规划,多步执行
能力边界只能生成文本能调用工具、读写文件、执行代码

为什么需要 Agent

LLM 的能力天花板

LLM 单独使用时有明确的能力边界:

  • 不能执行动作:不能发邮件、不能改文件、不能查数据库
  • 不能获取实时信息:不知道今天的天气、股价、最新新闻
  • 不能持续运行:一次对话结束就”失忆”
  • 复杂任务易出错:一步到位完成多步任务时容易遗漏或犯错

Agent 的解法

Agent 通过四个核心能力突破这些限制:

            ┌─────────┐
            │  LLM    │ ← 大脑(推理与决策)
            │ (大脑)   │
            └────┬────┘
                 │
    ┌────────────┼────────────┐
    ↓            ↓            ↓
┌────────┐ ┌────────┐ ┌────────┐
│ 规划    │ │ 工具    │ │ 记忆    │
│Planning │ │Tools   │ │Memory  │
└────────┘ └────────┘ └────────┘

四大核心能力

1. 规划(Planning)

Agent 接收到一个复杂目标后,能自主将其分解为可执行的子步骤。

任务分解示例

目标:部署一个博客网站到腾讯云

Agent 分解:
1. 检查本地代码是否构建成功
2. 连接腾讯云服务器(SSH)
3. 安装 Node.js 和 Nginx
4. 上传代码到服务器
5. 配置 Nginx 反向代理
6. 申请 SSL 证书并配置 HTTPS
7. 验证网站是否正常访问

规划策略

  • 顺序规划:按步骤依次执行,每步依赖上一步的结果
  • 并行规划:识别可以并行的步骤,提高效率
  • 动态规划:根据执行结果调整后续计划

2. 工具调用(Tool Use)

这是 Agent 区别于普通 LLM 的关键能力。Agent 可以调用外部工具来获取信息或执行操作。

Function Calling 机制

// LLM 决定调用工具
{
  "function": "search_web",
  "arguments": {
    "query": "Node.js 20 LTS 最新版本号"
  }
}
 
// 工具返回结果
{
  "result": "Node.js v20.18.1 (2024-11-20)"
}
 
// LLM 基于结果继续推理
"当前 Node.js 20 LTS 最新版本是 v20.18.1,发布于 2024 年 11 月 20 日。"

常见工具类型

类型示例
信息检索搜索引擎、RAG 检索、数据库查询
代码执行Python/JavaScript 解释器、Shell
文件操作读/写/删除文件、目录管理
API 调用天气、邮件、日历、第三方服务
浏览器打开网页、截图、表单填写

工具调用的标准化协议参见 MCP 协议

3. 记忆(Memory)

Agent 需要记住过去的交互和积累的知识:

短期记忆(对话上下文)

  • 当前会话中的对话历史
  • 存储方式:直接放在 Prompt 的上下文窗口中
  • 限制:受上下文窗口大小约束

长期记忆(持久化存储)

  • 跨会话的偏好、习惯、历史决策
  • 存储方式:向量数据库、文件系统、数据库
  • 检索方式:语义搜索最相关的记忆
会话 1:用户说"我用 React + TypeScript 开发"
          → Agent 存入长期记忆

会话 2:用户说"帮我写个组件"
          → Agent 检索长期记忆 → 自动使用 React + TypeScript

4. 反思(Reflection)

Agent 在执行过程中能评估自己的行为,发现错误并纠正:

目标:修复登录页面的 Bug

步骤 1:读取错误日志 → 发现 "TypeError: Cannot read property 'token'"
步骤 2:定位到 auth.js 第 42 行
步骤 3:修复代码 → 添加空值检查
步骤 4:运行测试 → ❌ 测试失败
反思:修复不完整,还有另一个调用点没处理
步骤 5:搜索所有调用点 → 发现 3 处需要修改
步骤 6:修复所有调用点
步骤 7:运行测试 → ✅ 全部通过

反思让 Agent 具备了自我纠错能力,而不是一条路走到黑。


核心推理模式

ReAct(Reasoning + Acting)

最经典的 Agent 推理框架,交替进行”思考”和”行动”:

思考 (Thought): 用户想知道项目的测试覆盖率,我需要运行测试命令
行动 (Action):  执行 `npm test -- --coverage`
观察 (Observation): 覆盖率报告显示 78.5%,3 个文件低于 60%
思考 (Thought): 覆盖率整体还行,但有 3 个文件需要关注
行动 (Action):  读取这 3 个文件的代码
观察 (Observation): 发现是工具函数文件,缺少边界条件测试
回答 (Answer): 项目测试覆盖率 78.5%。以下 3 个文件需要补充测试:...

Plan-and-Execute

先生成完整计划,再逐步执行:

计划阶段:
  1. 分析用户需求
  2. 设计数据库 Schema
  3. 创建 API 路由
  4. 编写前端页面
  5. 编写测试
  6. 部署

执行阶段:
  → 执行步骤 1... 完成
  → 执行步骤 2... 完成
  → 执行步骤 3... 遇到问题,修改计划
  → ...

优势:有全局规划能力。劣势:初始计划可能因信息不足而偏差。

自主 Agent(Autonomous Agent)

完全自主运行,有明确的停止条件:

while 任务未完成:
    观察当前状态
    推理下一步行动
    执行行动
    评估结果
    if 满足停止条件:
        break

代表:AutoGPT、Devin。风险:可能陷入死循环或偏离目标。


多 Agent 协作

复杂任务可以由多个专业化的 Agent 协作完成:

角色分工(Role Playing)

┌──────────┐    ┌──────────┐    ┌──────────┐
│ 产品经理  │ →  │ 开发工程师 │ →  │ 测试工程师 │
│ Agent    │    │ Agent     │    │ Agent     │
└──────────┘    └──────────┘    └──────────┘
  分析需求         编写代码         测试验证

任务交接(Handoffs)

Agent 之间的任务流转机制:

  • Agent A 完成自己的部分后,将结果和上下文交给 Agent B
  • 每个 Agent 有自己的 System Prompt 和工具集
  • 协调者(Orchestrator)负责路由和调度

主流多 Agent 框架

框架开发方特点
LangGraphLangChain基于图的状态管理,灵活
CrewAICrewAI角色驱动,简单易用
AutoGenMicrosoft多 Agent 对话,可编程
SwarmOpenAI轻量级 Handoff 协议

Agent 开发的核心挑战

挑战说明
可靠性Agent 的每一步决策都可能出错,错误会累积放大
成本每步都需要 LLM 推理,多步任务成本高
安全性Agent 能执行真实操作(删文件、发邮件),误操作后果严重
可观测性复杂 Agent 的决策过程难以调试和追踪
幻觉传播中间步骤的幻觉可能影响后续所有步骤

最佳实践

  • 人在环中(Human-in-the-Loop):关键操作前请求用户确认
  • 最小权限:Agent 只授予完成任务所需的最少工具和权限
  • 幂等设计:工具调用应尽量可重试、可回滚
  • 详细日志:记录每一步的思考、行动和结果,便于调试
  • 超时和熔断:设置最大步数/时间,防止 Agent 陷入死循环

与 MCP 的关系

MCP(Model Context Protocol)是 Agent 工具调用的标准化协议:

  • MCP 定义了 Agent 如何发现、描述和调用工具
  • MCP Server 提供工具实现(文件操作、数据库查询、API 调用等)
  • MCP Client(Agent)通过标准协议与 Server 通信
Agent(MCP Client)
    ↕ MCP 协议
MCP Server(文件系统)
MCP Server(数据库)
MCP Server(搜索引擎)

延伸阅读