跳转至

第 20 章 智能体系统:规划、记忆与行动循环

开场问题:一次工具调用和 Agent 的区别是什么?加一句“先制定计划”就算 Agent 吗?

20.1 Agent 是闭环

最小循环:

  1. Observe:读取用户目标、环境状态和工具结果。
  2. Decide:选择下一动作或结束。
  3. Act:调用工具、写文件、执行代码等。
  4. Observe again:环境变化后继续。

关键不是“会调用工具”,而是动作改变环境,新的观察又改变后续决策。固定工作流是预先写好步骤;Agent 由模型根据状态动态选步骤。能用确定工作流解决时,不要使用开放 Agent。

20.2 状态里应存什么

完整聊天历史会无限增长且充满噪声。应区分:

  • 当前任务与不可变约束。
  • 已完成步骤和关键结果。
  • 待办/计划。
  • 外部资源引用。
  • 可丢弃的原始日志。

长任务中定期压缩状态,但摘要不能成为唯一真相;重要文件、测试结果和提交 ID 应保留结构化引用。记忆不是“把所有消息塞进向量库”。

20.3 计划的作用与局限

计划把长目标分解为可检查步骤,减少遗忘约束。但一次性生成十步计划通常会过时。更稳健的是滚动规划:先列高层里程碑,只详细决定下一两步,环境变化后更新。

计划必须连接验证:每一步完成条件是什么、由什么观察证明。没有验证的计划只是更长的自然语言。

20.4 终止条件

Agent 最危险的失败不是报错,而是永不结束:重复搜索、反复改同一文件、在两个方案间来回。

需要多层停止:

  • 任务成功验证器通过。
  • 明确不可恢复错误。
  • 最大步数、token、时间和金钱预算。
  • 检测到状态连续多轮无变化。
  • 高风险操作前等待人工确认。

模型自己说“完成了”不是成功条件;必须由环境或独立检查器确认。

20.5 反思与重试

失败后让模型分析原因再试,确实有效,但必须提供新信息:错误日志、测试差异、工具状态。没有新观察的重复“反思”容易产生更长但同样错误的文字。

重试策略应按错误类型:瞬时网络错误可指数退避;参数错误回到模型修参数;权限错误立即停止;测试失败读取失败详情并局部修复。

20.6 单 Agent 还是多 Agent

多 Agent 可以并行搜索、让不同角色独立提出方案或交叉审查;代价是 token 成本、协调、共享状态和错误传播。

只有任务能自然分解、子任务接口清晰、并行收益大于协调成本时才值得。把同一个模糊任务扔给五个模型再让第六个总结,通常只是昂贵投票。

20.7 权限与 sandbox

Agent 运行代码和修改外部系统时应遵循最小权限:只挂载需要的目录、网络域名白名单、密钥按工具注入而不是写进 prompt、破坏性操作显式审批、完整审计日志。

把“请不要删除文件”写进 system prompt 不是安全边界。容器、文件权限和 API policy 才是。

20.8 成本是一等公民

Agent 成功率提高可能来自更多尝试。评测必须同时报告:

  • 成功率。
  • 平均/尾部步骤数。
  • 输入输出 token。
  • 工具调用次数和外部费用。
  • wall-clock 延迟。
  • 需要人工介入的比例。

一个 80% 成功、平均 50 步的 Agent 不一定优于 75% 成功、5 步的工作流。

核心问答

Q:Workflow 和 Agent 的区别? Workflow 的控制流由人预先确定;Agent 根据每步环境观察动态选择下一动作。前者更可靠,能用就优先用。

Q:为什么“反思”有时没用? 若没有新的外部信息,模型只是在同一上下文里重新组织猜测,无法突破事实缺口。

Q:多 Agent 一定更强吗? 不。任务不可分或共享状态复杂时,协调成本和错误传播会超过并行收益。

Q:谁判断 Agent 完成? 尽量由环境验证器、测试或明确状态判断,不能只信模型自报。