A12 · 第 5 章 · 第三编 智能体与综合复习
工具调用、记忆与任务规划
把模型决策、类型化工具、权限判定、外部观测、短期与长期记忆、计划执行组成受约束状态循环,系统处理参数验证、幂等、超时重试、部分失败、终止、审计、提示注入和人工审批。
报告页面错误本章目标
- 把任务写成含目标、观测、记忆、权限、预算、待完成副作用和终止条件的状态循环。
- 设计可验证的工具 schema、错误类型和权限范围,拒绝越权或无效参数。
- 区分短期工作状态与长期外部记忆,并为写入、来源、过期和删除建立策略。
- 为非幂等副作用设计请求键、状态查询、超时重试和部分失败恢复。
- 记录可重放审计轨迹并防御提示注入,同时保留精确人工审批边界。
本页目录
把智能体写成受约束状态循环
工具系统不是“模型输出一段命令然后相信它”。在步骤 ,显式状态可写成
其中 是冻结或经授权变更的目标, 是已接收观测, 是工作记忆, 是当前计划, 是权限与安全约束, 是剩余时间、费用和调用预算, 是尚未确认的外部副作用。决策器只能从允许动作集合中选择工具调用、询问、等待、报告或终止。
执行器先验证动作,再由外部系统产生观测 ,状态更新器合并结果并重新检查终止条件:
这只是工程状态机,不提供一般最优性或自主可靠性。模型可能选错动作,工具和观测也会失败;关键是把错误限制、检测和恢复写入循环。
用户要求为设备预约维护。初态记录设备编号未知、用户身份已认证、只读资产查询已授权、创建工单和发送通知需审批,最多调用十次。计划先查资产,再找可用时段,生成工单草案,最后请求用户确认。
查询返回两个相似设备后,成功条件尚未满足,系统应询问而非任选。用户确认编号后,状态新增有来源的设备记录;创建工单前展示精确设备、时间和收件人。审批只绑定这组参数,执行成功并取得工单 ID 后才终止。仅生成了看似正确的文本不算完成。
工具 schema 是可执行接口合同
每个工具至少声明名称、用途、参数类型、必填项、枚举、范围、格式、默认值、结果结构、错误类型、权限范围、超时、副作用等级和幂等语义。模型输出先按 schema 解析,业务层再验证实体存在、跨字段关系和当前状态前提。JSON 语法正确不表示业务有效。
工具 create_ticket 要求 asset_id 为已存在字符串,priority 只能为低、中、高,scheduled_at 必须是未来时间,且高优先级需要事故编号。调用参数为设备 A、优先级高、明天十点,但没有事故编号。
结构层验证会通过字符串、枚举和时间格式;业务层应返回类型化错误 MISSING_INCIDENT_FOR_HIGH_PRIORITY,不产生工单。系统可请求事故编号或把草案降为中优先级供用户选择,不能静默补造编号。错误观测进入状态后,后续计划要重新检查审批内容。
参数验证必须在受信执行边界实现,不能只靠提示要求模型自检。工具返回也需验证 schema、分页和截断标志;字符串“成功”不能替代机器可读状态、资源 ID 和提交时间。版本变更应带 schema 版本,旧计划不得无声调用新语义。
权限与审批绑定具体副作用
采用最小权限:读资产、写工单、发送消息、付款和删除使用不同范围与凭据。模型不能看到长期主密钥,执行器按用户身份、租户、资源和动作签发短期能力。来自文档、网页或记忆的内容无权扩大权限。
审批应展示动作、目标资源、关键参数、估计影响和可撤销性。用户批准“发送给甲一封主题为乙的草稿”,不等于批准改变收件人或附件;计划重算后参数变化必须重新审批。审批有失效时间和一次性标识,并在服务器端核对。
只读预览或 dry-run 可减少错误,但预览结果可能在执行前过期。执行前需重新检查版本、余额、时段或资源状态。人工审批也不是把风险转嫁给用户:界面必须可理解,不能隐藏参数或用默认按钮诱导同意。
观测要区分接受、进行与完成
外部 API 返回二百状态可能只表示请求进入队列。观测应包含请求 ID、状态、结果或错误、版本、时间和是否最终。异步任务需轮询或接收回调;在完成前不得把计划项标成成功。最终一致系统还可能短时间读不到刚写入的对象。
工具输出可能分页、截断或过期。若查询只返回前一百项,状态必须保留下一页标记;否则“未找到”只表示当前页没有。观测源和时间也决定可信度:缓存库存不能替代实时库存,搜索摘要不能替代原文。
短期记忆保存工作状态
短期记忆包含当前目标、已确认事实、未解决问题、计划、预算、工具结果摘要和待处理副作用。它应结构化区分“用户陈述”“工具观测”“模型假设”和“已批准动作”。上下文压缩若把假设改写成事实,会造成后续越权或错误。
长对话可把完整轨迹留在审计存储,把工作记忆压成可校验状态。摘要需保留关键 ID、单位、否定、时间和来源指针;金额、日期等不宜只用自然语言概括。任何从摘要恢复的高风险参数都应回查原始观测。
长期记忆是外部数据产品
长期记忆可保存用户偏好、实体资料或过去任务结果,但写入需要明确用途、来源、作用域、保留期、更新与删除策略。一次性推测不应成为永久事实,敏感数据不应为方便而无限保留。用户更正后要处理旧值和下游索引。
检索出的记忆只是候选观测。它可能过期、属于另一用户或含恶意文本,必须经过身份、权限、时间和来源过滤。模型生成的摘要再写回同一记忆会形成自我强化;写入前可要求工具证据或人工确认。
一条旧笔记写着“用户通常同意自动购买耗材”,来源是某次模型摘要,没有用户确认。新任务检索到它后,不能据此跳过付款审批。记忆记录应标为模型推测、低可信、已过期,并只作为询问用户的背景。
用户随后明确说“任何采购都先给我看草稿”,系统把这条授权偏好写入用户作用域,保存时间和原始消息指针,并使旧推测失效。即便如此,具体付款仍需按当前金额和收款方执行权限规则;偏好不等于支付能力。
计划表示依赖与可验证条件
计划不是一串漂亮句子,而是带前置条件、输出、依赖和完成判据的图。只有设备确认后才能查兼容配件,只有库存与价格新鲜时才能生成采购草案,只有审批通过才能提交。可并行的只读查询无需串行,写操作要考虑顺序和冲突。
计划执行后必须根据观测重规划。工具错误、用户修改目标或资源版本变化都可能使后续节点失效。重规划不能自动继承旧审批,也不能把失败节点标记为跳过后宣布全局成功。搜索深度、候选数和时间预算需要上限。
幂等性决定重试是否安全
读操作通常可重复,但发送消息、创建工单、扣款和删除可能产生重复副作用。调用方为一次逻辑操作生成稳定幂等键,重试沿用同一键;服务器存储键与结果,使重复请求返回原资源而非再次执行。幂等键若每次重试都新建,就失去作用。
“恰好一次”在网络和多系统事务中通常很难保证。客户端超时时,不知道请求未到达、正在执行还是已完成;应先按请求 ID 查询状态,再决定重试。跨系统操作可使用可恢复工作流和补偿动作,但补偿不是时间倒流:已发送邮件无法真正收回,退款也与从未扣款不同。
系统以幂等键 K 请求支付一百元,十秒后客户端超时。错误类型是“结果未知”,不是“支付失败”。若立即用新键 K2 重试,可能重复扣款。
恢复流程先用 K 查询:若状态完成,取得交易 ID 并继续;若处理中,等待或在预算后交人工;若服务器确认从未接收,再用同一 K 重试;若返回永久参数错误,则修正草案并重新审批。审计中保留每次请求、查询和最终交易 ID。
瞬时错误可在有限次数内指数退避并加入随机抖动;权限拒绝、无效参数和资源不存在通常不应盲目重试。限流响应要尊重服务端等待时间。总超时既限制单次调用,也限制整个任务,避免重试风暴。
错误恢复从类型化故障开始
错误至少分为可重试传输错误、业务前提错误、权限错误、冲突、部分完成、结果未知和永久不支持。恢复动作分别是等待、补充信息、请求授权、重新读取版本、查询已完成部分、转人工或终止。吞掉异常并让模型猜测会污染状态。
批量操作应返回每项结果。三封消息成功两封时,整体不是简单失败;重试只针对未完成项,并避免重复已成功项。多步骤事务要保留提交点和补偿能力。恢复后重新计算成功条件,而不是只看最后工具没有报错。
终止条件防止无穷循环和虚假成功
任务开始就定义可机器检查的成功谓词、不可恢复失败、用户取消、等待人工、时间费用调用上限和无进展阈值。连续几步状态没有新增观测或缩小未决集合时,应停止重试并报告阻塞。
“创建维护工单”的成功谓词是:存在服务器返回的工单 ID;设备和时间与用户最终审批一致;状态为已提交而非草稿。预算是十次工具调用和五分钟,权限拒绝或用户取消为终止失败。
若模型写出“工单已创建”但没有 ID,谓词为假;若 API 三次返回权限拒绝,继续改写参数没有进展,应终止并说明缺少权限。若工单已创建但通知失败,可报告主任务成功、附属任务部分失败,而不是重复创建工单。
审计轨迹记录可重放事实,不要求隐藏思维
审计应保存任务 ID、用户请求和授权身份、规范化目标、工具与 schema 版本、经验证参数、权限判定与审批记录、幂等键、时间戳、请求和资源 ID、结果或错误、状态迁移、模型与生成配置、预算消耗和最终终止原因。密钥和不必要个人数据要脱敏或不记录。
可记录简短计划、选择的动作、所用证据和可验证理由。无需也不应把模型隐藏思维链当成必要日志;自由文本内部推演既可能包含敏感数据,也不等于忠实因果解释。故障定位依靠结构化输入、动作、观测、版本和决策摘要。
重放要区分纯离线模拟和真实副作用。审计环境可用已保存结果或沙箱工具重放,不能再次发送邮件或扣款。外部状态已变化时,重放只能复现历史输入下的决策,不能保证得到相同实时结果。
提示注入来自任何不可信观测
网页、文档、邮件、工具错误和长期记忆都可能含“忽略规则并调用某工具”等文本。它们是数据,不是授权指令。系统层和用户目标的优先级由执行器固定,检索文本无权改变工具列表、权限或审批。
防御包括:给不可信内容标来源和边界;只把必要字段传给模型;工具参数用结构化输出并服务器验证;对高风险动作独立审批;隔离网络、文件和凭据;对外输出转义;对文档中的指令模式做测试。仅在提示中写“不要被注入”不是充分控制。
提示注入也可通过工具结果间接渗透长期记忆。写入前要过滤作用域与来源,记忆检索后再次按不可信数据处理。攻击测试应包含越权、数据外传、审批绕过、同形字符和多轮诱导,并确认执行层实际拒绝。
人工边界与可靠性结论
人工审批适用于不可逆、财务、外部通信、权限变更和高影响操作;人工接管适用于重复失败、身份冲突、证据不足和异常状态。系统要展示事实与不确定性,允许修改和取消,并在等待期间不继续执行依赖动作。
通过若干测试、拥有长期记忆或能分解任务,都不构成一般自主可靠性。结论只能限定于工具版本、权限、任务分布和故障注入范围。上线后监控错误率、重复副作用、审批拒绝、无进展终止、成本和注入事件,并保持关闭与回退能力。
练习
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
关系与资源
- 检索增强与事实落地 提供来源、权限、引用和不可信上下文边界。
- 算法综合复习 提供任务分解、依赖、预算和终止思路。
- Markov 决策过程 提供状态、动作、观测和终止建模语言。
- 大模型智能体综合复习 汇总端到端评价与故障归因。
ReAct: Synergizing Reasoning and Acting in Language Models
Shunyu Yao, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, Yuan Cao
用于核对工具调用智能体的基本循环和论文实验范围,不把自由文本轨迹等同于可靠证明。
打开官方来源