第28章 智能体:从回答问题到完成任务

“告诉我下周去成都有哪些航班”是一个问答。“在预算内安排出差,避开冲突日程,等我确认后再订票”则是一个任务。

后者要求系统读取日历和政策,比较选项,保存中间状态,遇到满票时修改计划,还要在付款前停下来询问。任务可能持续几分钟、几小时,甚至跨越多次会话。

语言模型只负责一次次根据上下文生成输出。把它变成能完成任务的系统,还需要环境接口、状态存储、循环控制、权限、监控和停止条件。这样的系统通常被称为智能体(agent)。

这个词容易制造误解。智能体不是参数里突然出现的一个小人,也不等于给聊天模型写一句“你是自主助手”。它是一种系统组织方式:模型在反馈循环中观察、决定、行动,再根据结果继续决定。

回答与行动的差别在于环境会变化

一次回答生成后,外部世界通常没有变化。一次行动却会改变后续状态:创建文件后目录不同了,发送邮件后收件人已经收到,移动机器人后摄像机看到的画面也变了。

因此,智能体至少需要六个组件:

  1. 目标:要达到什么状态,哪些约束不能违反;
  2. 状态:已经知道什么、做过什么、还缺什么;
  3. 策略或模型:根据当前信息选择下一步;
  4. 动作接口:搜索、读写文件、调用 API 或控制设备;
  5. 观察:动作成功、失败或造成了什么结果;
  6. 停止条件:何时完成、何时求助、何时因风险或预算退出。

缺少停止条件的循环可能反复重试;缺少状态的系统会忘记已经做过什么;缺少权限边界的系统则可能把一个预测错误变成真实副作用。

智能体循环不断修正计划

一个简化循环如下:

图 1: 智能体从目标、状态和最新观察中选择下一步,动作必须经过权限与参数检查后才能改变环境;环境返回的新观察更新状态,高风险动作还需要在执行前获得具体确认。

长计划可以提供方向,但不应被当作固定剧本。网页结构会变化,工具会超时,文件内容与预期不同。每次观察都可能要求系统修改下一步。

ReAct 将推理痕迹、动作和观察交替组织,使模型能在知识问答和交互任务中利用环境反馈。(Yao 等 2023年) 关键不是必须公开长篇思维文字,而是系统要保存足够的决策依据和结构化状态,让下一步真正依赖刚得到的观察。

核心机制:目标驱动的观察 - 行动闭环

智能体把模型放进循环:从目标、状态和最新观察中选择动作,经过权限层执行,再把结果写回状态。计划不是一次性答案,而是可被新观察修正的假设。系统可靠性取决于模型之外的状态、接口、确认、恢复和停止机制。

计划应该分层而不是无限展开

“完成一次出差预订”可以先分为查政策、查日历、比较交通、请求确认、预订和归档凭证。每个高层步骤再在执行时细化。

如果一开始就生成几十步详细计划,后面的步骤会建立在尚未验证的假设上。更稳健的方式是滚动规划:只细化近期动作,执行后根据观察更新远期计划。

计划还应显式记录:

  • 已满足的前置条件;
  • 尚未确认的假设;
  • 当前候选与放弃原因;
  • 不可逆动作前的检查点;
  • 剩余时间、调用次数和费用预算;
  • 成功、失败与需要人类介入的判据。

这些信息若只埋在自然语言聊天记录中,很难被程序稳定读取。生产系统常使用结构化任务表、状态机或事件日志,语言摘要只作为其中一部分。

技术深潜:部分可观测状态与记忆更新

真实环境状态记为 \(s_t\),智能体通常只能看到带噪声的观察 \(o_t\)

\[ o_t\sim O(\cdot\mid s_t) \]

网页只显示当前页面,代码测试只暴露失败信息,用户也不会一次给出所有偏好。因此系统维护内部记忆或信念状态 \(m_t\)

\[ m_{t+1}=f(m_t,a_t,o_{t+1}) \]

策略根据目标 \(g\)、记忆和最新观察选择动作:

\[ a_t\sim\pi_\theta(\cdot\mid g,m_t,o_t) \]

执行后,环境转移到新状态并产生新观察。这里的 \(f\) 可以包含数据库更新、摘要、检索和规则,不必全由语言模型完成。

若记忆遗漏一次失败,模型可能重复同一动作;若摘要把“不确定”改写成“已完成”,后续计划会建立在错误状态上。状态更新因此要尽量保存可验证事件,例如工具返回码、文件哈希和任务 ID,而不是只保存模型的叙述。

部分可观测还意味着失败未必立即可见。邮件 API 返回成功不代表收件人理解正确,代码测试通过也不代表没有未覆盖缺陷。观察接口决定智能体能发现哪些错误。

工作记忆、长期记忆和技能库承担不同角色

工作记忆保存当前任务的待办、变量和最近观察。长期记忆保存跨任务可复用的信息。技能库则保存一段经过验证的操作程序,例如“运行测试并收集失败用例”。

Generative Agents 使用记忆流、反思和计划构造模拟角色行为;Voyager 在游戏环境中让语言模型产生可执行技能并积累技能库。(Park 等 2023年; Wang 等 2023年) 这些案例展示了外部记忆与技能复用的可能,也显示系统表现高度依赖环境、提示、验证器和存储设计。

不是所有历史都值得长期保留。错误操作若被总结成“成功经验”,会在未来重复;技能依赖旧版接口时需要失效;用户数据还涉及最小化保存、访问权限和删除。

因此记忆条目应带有来源、时间、适用条件、验证状态和版本。检索出来后仍需判断它是否适用于当前任务。

反思可以提供新提示,但不是错误证明器

任务失败后,可以让模型阅读轨迹并写出“哪里可能错了”,再用这段文字指导下一次尝试。Reflexion 研究了把语言反馈保存为后续试验的上下文。(Shinn 等 2023年)

这种方法在有清晰反馈的任务中可能有效,因为失败结果为模型提供了新信息。但模型也可能给出听起来合理的错误诊断。若没有单元测试、环境状态或人类反馈,自我反思只是又一次生成。

可靠恢复应优先利用外部信号:错误码、约束检查、差异比较、测试结果和可逆快照。自然语言反思适合提出修复候选,不应单独担任最终裁判。

权限层决定模型能造成什么后果

搜索网页和读取公开文件通常是低风险动作;发邮件、改权限、付款和删除数据则不是。把所有工具交给同一个高权限身份,会让一次参数误填或提示注入产生过大影响。

可以按风险建立动作层级:

动作级别 示例 合理控制
只读 搜索、读取日历 最小范围授权、日志
可逆写入 建草稿、写临时文件 沙箱、版本和撤销
对外影响 发消息、提交表单 展示目标与内容,执行前确认
高风险或不可逆 付款、删除、改权限 强认证、双重检查、人工批准

确认必须放在动作发生前,并说明对象、内容和影响。任务开始时笼统问一句“是否允许我完成所有操作”,不能替代具体高风险动作的即时确认。

人类在环也不只是弹窗。系统应让人看到足够的信息作出判断,并支持修改参数、拒绝、暂停和恢复。若每一步都要求确认,人会形成点击疲劳;若确认太少,关键边界又会消失。

长任务把小误差放大

短任务中一次误判可能只产生错误回答。长任务中,早期错误会改变环境,后续步骤又把这个错误当作事实。

例如,系统误读了项目目录,随后修改错误文件、运行无关测试,再根据失败日志继续修复。每一步在局部看似合理,整条轨迹却离目标越来越远。

技术深潜:为什么 98% 的单步成功仍不够

若任务有 \(T\) 个必要步骤,第 \(t\) 步在此前都正确的条件下成功概率为 \(p_t\),整条路径成功率为:

\[ P(\mathrm{all})=\prod_{t=1}^{T}p_t \]

若每一步成功率都为 \(0.98\),三十步全部成功的概率约为:

\[ 0.98^{30}\approx0.55 \]

这个计算假设每一步的条件成功率稳定。现实中错误会相关:一个错误状态摘要可能同时降低后面许多步骤的成功率;同一模型重试也可能重复同一误解。

恢复机制可以在检查点检测错误、回滚并选择替代路径,但恢复本身也有成功率和成本。评估时应报告首次成功率、重试后成功率、平均工具调用、回滚次数、人类介入和未恢复副作用。

提高长程可靠性通常比单纯提高单步模型分数更依赖系统设计:缩短不可检查的连续步骤,在阶段边界验证状态,对写操作保留快照,并在不确定性持续升高时停止。

自治程度是一条连续谱

系统不必在“聊天机器人”和“完全自主”之间二选一。可以按控制权划分:

  • 建议模式:模型只给方案,人执行全部动作;
  • 协作模式:模型执行低风险步骤,高风险步骤由人确认;
  • 监督自治:系统在限定环境中连续执行,人处理异常与关键检查点;
  • 高自治:系统在长时间内自行规划、执行和恢复,只在少数条件下求助。

任务风险、可逆性、环境稳定性和评估成熟度决定适合的等级。能在沙箱中自主玩游戏,不意味着适合在真实财务或医疗系统中获得相同权限。

基准必须测任务,而不只测对话

智能体评估需要真实的动作与状态变化。AgentBench 覆盖多种交互环境;WebArena 构造了带网站和任务的现实化网页环境;SWE-bench 要求系统根据真实软件仓库问题修改代码;OSWorld 则评估在真实计算机环境中的多模态操作。(Liu 等 2024年; Zhou 等 2024年; Jimenez 等 2024年; Xie 等 2024年)

这些基准比单轮问答更接近任务,但仍有边界:

  • 环境版本、账号状态和网络延迟会影响复现;
  • 成功判定脚本可能漏掉质量和安全问题;
  • 公开任务可能进入训练数据或被针对优化;
  • 一次成功不能表示重复运行稳定;
  • 基准权限通常比真实部署更受限。

完整指标应包括任务成功、部分完成、总延迟、Token 与工具成本、重试、人类干预、无关改动和不可逆副作用。对于代码任务,还要检查补丁是否只通过现有测试,还是确实满足需求且没有引入回归。

智能体会在哪些地方失败

常见失败可以按循环位置分类:

  • 目标失败:误解用户意图或遗漏约束;
  • 计划失败:分解缺少必要步骤,顺序或前置条件错误;
  • 观察失败:页面、日志或工具结果解析错误;
  • 状态失败:忘记已完成动作,或把假设写成事实;
  • 动作失败:选择错误工具、对象或参数;
  • 恢复失败:机械重试,或错误反思引向更差方案;
  • 停止失败:过早宣布完成,或在无进展时无限循环;
  • 权限失败:低可信内容诱导高权限动作。

这些问题无法只靠更长提示解决。状态机、类型校验、权限隔离、确定性检查、预算和人工升级路径都属于智能体的一部分。

学习路径:在可控环境中实现任务循环

实践开发继续后置。推荐先使用本地、可重置、无真实副作用的环境:

  1. 构造一个模拟工单系统,提供查询、建草稿、更新状态三个受限工具;
  2. 明确定义目标、必要步骤、禁止动作、预算和终止条件;
  3. 保存结构化事件日志,不只保存聊天文本;
  4. 加入工具失败、矛盾信息、超时和过期记忆;
  5. 在写操作前建立确认和快照,测试拒绝与恢复;
  6. 比较固定计划、滚动规划和带检查点循环;
  7. 报告成功率、平均步骤、成本、人工介入和副作用。

当系统失败时,读者应能从轨迹判断是目标、状态、观察、动作还是停止机制出了问题。

本章小结

  • 智能体是模型、环境接口、状态、循环、权限和停止机制组成的系统,不是一种独立模型标签。
  • 观察 - 行动闭环让计划根据环境反馈持续修正,长计划不应被当作固定剧本。
  • 真实任务部分可观测,结构化状态和可验证事件比纯自然语言摘要更可靠。
  • 外部记忆与技能库可以支持跨步骤和跨任务复用,也需要版本、验证、权限与删除机制。
  • 自我反思能提出恢复候选,但没有外部反馈时不能证明诊断正确。
  • 多步任务会累积相关错误,检查点、回滚和停止策略决定长程可靠性。
  • 自治程度应按风险和可逆性选择;评估必须同时报告成本、干预和副作用。

思考问题

  1. 为什么一个强语言模型仍需要模型之外的结构化状态?
  2. 反复调用同一模型重试,为什么不一定得到独立错误?
  3. 哪些动作适合自动执行,哪些必须在执行前由人确认?
  4. 一个智能体完成了任务,但修改了无关文件,应该算成功吗?

延伸阅读

参考文献

Jimenez, Carlos E., John Yang, Alexander Wettig, 等. 2024年. SWE-bench: Can Language Models Resolve Real-World GitHub Issues?》 12th International Conference on Learning Representations. https://arxiv.org/abs/2310.06770.
Liu, Xiao, Hao Yu, Hanchen Zhang, 等. 2024年. AgentBench: Evaluating LLMs as Agents》. 12th International Conference on Learning Representations. https://arxiv.org/abs/2308.03688.
Park, Joon Sung, Joseph C. O’Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, 和 Michael S. Bernstein. 2023年. 《Generative Agents: Interactive Simulacra of Human Behavior》. Proceedings of the 36th Annual ACM Symposium on User Interface Software and Technology. https://arxiv.org/abs/2304.03442.
Shinn, Noah, Federico Cassano, Edward Berman, Ashwin Gopinath, Karthik Narasimhan, 和 Shunyu Yao. 2023年. 《Reflexion: Language Agents with Verbal Reinforcement Learning》. Advances in Neural Information Processing Systems 36. https://arxiv.org/abs/2303.11366.
Wang, Guanzhi, Yuqi Xie, Yunfan Jiang, 等. 2023年. 《Voyager: An Open-Ended Embodied Agent with Large Language Models》. arXiv preprint arXiv:2305.16291.
Xie, Tianbao, Danyang Zhang, Jixuan Chen, 等. 2024年. OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments》. Advances in Neural Information Processing Systems 37. https://arxiv.org/abs/2404.07972.
Yao, Shunyu, Jeffrey Zhao, Dian Yu, 等. 2023年. ReAct: Synergizing Reasoning and Acting in Language Models》. 11th International Conference on Learning Representations. https://arxiv.org/abs/2210.03629.
Zhou, Shuyan, Frank F. Xu, Hao Zhu, 等. 2024年. WebArena: A Realistic Web Environment for Building Autonomous Agents》. 12th International Conference on Learning Representations. https://arxiv.org/abs/2307.13854.