第 20 章 智能体系统:规划、记忆与行动循环¶
开场问题:一次工具调用和 Agent 的区别是什么?加一句“先制定计划”就算 Agent 吗?
20.1 Agent 是闭环¶
最小循环:
- Observe:读取用户目标、环境状态和工具结果。
- Decide:选择下一动作或结束。
- Act:调用工具、写文件、执行代码等。
- 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 完成? 尽量由环境验证器、测试或明确状态判断,不能只信模型自报。