6.7

查看英文版

6.7 AI 智能体与自主智能体系统

Overview and motivation

AI 智能体(AI agent)是被包裹在一个循环中的大语言模型(LLM):给它一个目标,它可以调用工具,保留一些关于自己已做过什么的记忆,并自行决定下一步该做什么,直到目标达成或它放弃为止。这个循环正是智能体与第 6.3 章中普通”提示,响应”调用之间的全部区别所在。一次单独的调用只是回答一个问题。而一个智能体会去读邮件、检索数据库、提交工单、检查结果,再重试一次。模型不再只是生成文字,它是在你的系统中选择行动。

这一转变改变了整个工程问题的性质。当模型只是撰写文字时,一个糟糕的输出不过是一句糟糕的话。当模型驱动工具时,一个糟糕的输出可能会发出一条错误的消息、删除一条记录,或转移一笔款项。因此,最好把智能体理解为坐在一个可信系统内部的、不可信的规划者,你的大部分工作都在于限定这个规划者被允许做什么。本章直接建立在第 6.3 章 LLM 基础、第 6.5 章信任与问责关切,以及第 6.6 章平台实践之上。

对大型团队而言,风险不仅是技术层面的,同样也是组织层面的。企业希望把智能体接入真实的内部系统(工单系统、财务、客户记录),这意味着智能体也要继承真实的访问控制和真实的变更管理义务。政府场景还要额外加上公共问责:一项影响到公民的自主行动,必须能够被解释、被监督,并在事后可被审计。这种模式非常强大。但如果部署时缺乏纪律,它也是一种快速把错误自动化的方式。

Key principles

  • 智能体 = 模型 + 循环 + 工具 + 记忆 + 目标。风险存在于循环之中,而不在文字本身。
  • 把自主权限定在任务范围之内。只给予完成工作所需的最小自由度。
  • 当步骤已知时,优先选择固定工作流。只有在步骤未知时,才诉诸开放式自主权。
  • 把每一个工具都当作攻击面来对待,只授予它能够工作所需的最小权限。
  • 对于有重大后果或不可逆的行动,要让人置于循环之中,并让撤销变得廉价。
  • 依据任务是否成功来评估,而不是依据对话记录读起来是否聪明。
  • 追踪每一次运行。一个你无法复原的行动,就是一个你无法治理的行动。
  • 能用的最简单设计通常就是正确的设计。往往那根本算不上一个智能体。

Recommendations

Start with a workflow, add autonomy only where you must

最常见的错误,是在一条固定流水线本就足够的情况下,却去选用一个自主智能体。如果你已经知道各个步骤(提取字段、校验字段、查询记录、起草回复),就把它写成一个编排好的工作流,让模型去填补特定的槽位。只有当路径确实无法预先确定时()例如开放式研究,或需要在众多可能工具之间进行分诊()自主权才值得投入。把自主权限定在任务范围之内:限制步骤数量上限,把工具集限制在这个目标所需的范围内,并设定明确的停止条件。一条好的原则是:恰好给模型问题所要求的那么多自由,不多给一分。

Make tool use the core capability, and make it safe

工具使用(也叫函数调用)正是把模型变成智能体的关键所在。为每个工具定义精确的模式(schema),校验模型提供的每一个参数,并应用最小权限原则:一个只读的报表智能体应获得只读凭据,绝不给它可能被滥用的写权限。在沙箱中运行工具,使一次糟糕的调用无法波及其爆炸半径之外的范围。优先选择许多狭窄的、单一用途的工具,而不是少数几个功能宽泛的工具,因为一个狭窄的工具更容易被推理、被授权、被审计。这正是第 6.3 章对 LLM 工具使用所倡导的那种克制,在这里被推到了核心位置。

Use explicit reasoning and planning patterns

当智能体的思考过程被结构化时,它们的表现会更好。在”推理并行动”模式中(由 ReAct 研究推广开来),模型在对当前情况进行推理和采取行动之间交替进行,然后先观察结果,再进行下一轮推理。对于更难的目标,可以让模型先做规划(将其拆解为若干子任务),然后再执行,这样你就能在任何工具运行之前检查、甚至批准这个计划。让这些循环保持可观察、可中断。一个你能读懂的计划,才是一个你能叫停的计划。

Keep humans in the loop for consequential actions

针对每一个工具、每一种行动,要决定模型是可以独自行动,还是必须先征求许可。可逆的、低风险的行动(搜索、起草)可以无人值守地运行。而有重大后果或不可逆的行动(发送对外通信、转移资金、更改生产数据、决定公民的案件)则需要一道拥有真正否决权的人在回路关卡。尽可能为可逆性而设计:优先把一项变更暂存起来,而不是直接提交它,并把撤销做成一等功能,使一次错误的行动只需几分钟就能弥补,而不至于酿成一起事件。

Treat the security model as adversarial

智能体扩大了第 4.2 章所描述的攻击面。头号威胁是提示注入:隐藏在网页、文档或邮件中的恶意指令,被智能体读取并服从。与之密切相关的是困惑的代理人问题(confused deputy problem),即攻击者诱骗一个拥有特权的智能体滥用其自身合法的访问权限,例如通过该智能体被允许调用的某个工具把数据外泄出去。要假定智能体摄入的任何内容都可能是有敌意的。把可信的指令与不可信的数据区分开来,限制工具的能力,使一个被劫持的智能体无法触及敏感系统,并且绝不能让模型的原始输出在未经校验的情况下触发不可逆的行动。

Evaluate on task success and regression-test the non-determinism

评判智能体的标准应该是它是否完成了任务,而不是对话记录听起来是否聪明。构建一个由具有代表性的目标组成、带有可核验成功标准的评估集(工单是否被分配了正确的优先级、退款是否符合政策),并在每一次提示词、模型或工具发生变更时运行它。由于智能体是非确定性的,单次运行几乎说明不了什么:对每个用例运行多次,追踪成功率,而不是单纯的通过或失败。这把第 6.3 章和第 6.2 章(机器学习工程和 MLOps)中的离线与在线评估原则,扩展到了输出是一连串行动的系统上。

Instrument runs for observability, cost, and failure handling

你无法治理你看不见的东西。端到端地追踪每一次智能体运行(第 6.6 章):目标、每一步推理、每一次工具调用及其参数和结果、消耗的 token 数,以及最终结果。这种追踪同时是你的调试器、你的审计轨迹,也是你的成本计量器。为步骤数、时间和花费设定硬性预算,因为一个陷入循环的智能体会迅速消耗延迟和金钱。明确地处理失败:对暂时性的工具错误进行带退避的重试,但要检测模型反复重复某个失败行动的循环,并做到安全失败,而不是原地反复挣扎。

Trade-offs: pros and cons

ChoiceProsConsBest when
固定工作流(模型填槽)可预测、成本低、易于测试和审计僵化;遇到未预见的路径就会失效步骤事先已知
自主单智能体灵活;能处理开放式目标更难控制、评估和限定边界路径无法预先确定
多智能体编排可并行;角色专业化协调成本高、错误会叠加放大、花费更高任务确实能拆解为独立的部分
无人值守行动快速、摩擦小错误会在没有检查的情况下执行行动可逆且风险低
人在回路关卡安全性、问责制、可逆性更慢;需要评审人力行动有重大后果或不可逆

核心张力是自主权与控制之间的对立。更多的自主权能处理更多的场景,但也要求更多的防护栏、更多的评估、更多的资金,而且它失败的方式也更难预测。多智能体设计的精巧常常诱惑团队去采用,但每增加一个智能体,就增加一份协调开销,也多一个让微小错误累积成错误结果的地方。要化解这种张力,应从能解决问题的最小自主权开始,只有在具体任务确实需要时才增加自由度,并且始终配套相应的防护栏。

Questions to discuss with your team

  1. 这项功能是否真的需要一个智能体,还是一个固定工作流会更安全、更便宜? 自主权很有吸引力,但大多数工作都有已知的步骤,一条编排好的流水线能以低得多的风险处理它们。对大型团队而言,默认选用智能体意味着每个团队都要承担评估、追踪和安全方面的负担,而这些负担在更简单的设计下本可以避免。带上具体任务,问一问它的步骤是否可以预先确定;如果可以,智能体很可能就是过度设计。把开放式自主权留给那些路径确实因案例而异的目标。答案应当把大多数功能推向工作流,只把一小部分经过深思熟虑的场景留作真正的智能体。

  2. 对于我们的智能体能调用的每一个工具,一个被劫持的智能体用它能做的最坏的事是什么?什么能阻止这件事发生? 提示注入和困惑的代理人攻击,是把智能体自身合法的访问权限反过来用在你身上,因此正确的视角应该是对抗性的视角(第 4.2 章)。盘点每一个工具、它的权限范围,以及通过摄入内容夹带进来的恶意指令是否有可能触及它。对于把智能体接入内部系统的企业而言,这正是最小权限、沙箱化,以及对不可逆行动设置人工关卡真正见分晓的地方。带上工具清单以及每个工具持有的凭据。如果任何有重大后果的行动可以在没有校验或人工检查的情况下被触及,那就是首先要修复的问题。

  3. 既然每一次运行看起来都很像那么回事,我们要如何得知智能体的成功率下降了? 智能体是非确定性的,因此一份读起来很流畅的对话记录仍可能采取了错误的行动,一次绿灯通过的运行说明不了任何问题。问一问你们是否拥有一个带有可核验结果的目标评估集,针对每个用例多次运行以得出成功率,而不是单次通过与否。对于高风险或面向公众的部署,讨论运行追踪记录能否让你在出问题时准确复原发生了什么(第 6.5 章和第 6.6 章)。如果你唯一的信号是用户投诉,那就已经太晚了。这个问题的答案应当促使你在规模化之前、而不是在事故发生之后,为评估机制投入资源。

  4. 这个智能体的哪些行动是真正不可逆的?谁有权批准它们?我们是否有足够的评审人力来支撑这道关卡? 让模型在所有地方都无人值守地行动很有诱惑力,但只有当一位拥有否决权的具名人员在智能体提出请求时确实在场,人工关卡才是真实的。对大型团队而言,一个无人负责的审批队列会悄悄变成一个橡皮图章,你精心设计的安全性也会在业务量面前蒸发。带上智能体可以采取的所有行动的完整清单,标注每一项是可逆还是不可逆,并估算每天会落到评审人员手里的低置信度案例的数量。权衡一道关卡带来的摩擦和人力成本,与无人值守的错误所造成的爆炸半径,并优先考虑把一个不可逆的行动重新设计为可暂存、可撤销的行动,而不是增加另一名评审人员。在企业和政府场景中,把每一项有重大后果的行动与一位负责任的官员和一条变更管理记录绑定起来,因为一项影响公民或客户、却没有任何人批准过的自主行动,正是审计会发现的那种失败。

  5. 我们选用多智能体设计,是因为任务确实能够拆解,还是仅仅因为它看起来很精巧? 把工作拆分给多个专业化智能体很有吸引力,但每多一个智能体,就多一份协调开销,也多一个让微小错误累积成错误结果的地方。对大型组织而言,代价不仅是花费和延迟:一个多智能体系统在失败时要难以追踪、评估和推理得多,因此治理负担会随着你增加的每一个角色而成倍增长。带上具体任务,明确展示哪些部分是独立并行运行的,然后在同一个评估集上,比较多智能体版本与单一智能体版本实测的成功率和成本。如果单一智能体胜出或打平,那么这个精巧的设计就是过度工程。对于受监管或面向公众的部署,要记住链条中的每一个智能体都是监督机构必须能够检查的又一个组件,因此任何你无法正当化的额外结构,都是额外的责任负担。

  6. 智能体在步骤数、时间和花费上的硬性预算是什么?一个陷入循环的智能体会在造成成本或延迟飙升之前被如何捕获? 一个反复重复失败行动的智能体,可能在没有任何预警的情况下消耗金钱和时间,因此不设边界的自主权既是安全风险,也是财务风险。对于运行着许多智能体的大型团队而言,一个失控的循环就可能让云账单飙升,或耗尽一个让其他所有工作负载都陷入饥饿的速率限制,这使得单次运行的上限成为一个共同的运维关切,而不只是某个团队自己的问题。带上每个智能体当前的步骤、时间和 token 预算、超出预算时触发的告警,以及能安全失败而不是反复挣扎的循环检测机制。权衡过紧的预算(可能会切断一项确实很难但合法的任务)与过松的预算(可能让成本失控)。在必须预测和论证支出的企业和政府场景中,一个成本不设边界的智能体,是你在预算评审或审计中无法辩护的一笔支出。

Sector lens

Startup. 先在托管模型上发布一个触及你核心价值的、范围狭窄的智能体,配备能完成工作的最小工具集,并对步骤数和花费设置硬性上限。抵制多智能体演示的诱惑:与其协调一堆你维护不起的角色,不如把稀缺的工程注意力用来限定单一智能体的自主权、并追踪它的运行。把每一个有重大后果的行动都放在一道”只起草、绝不发送”的单一关卡背后,这样一次错误只需点一下撤销就能弥补,而不会酿成一起事故。

Small business. 你没有人手来运行评估机制或沙箱,因此优先选用嵌入在你已经信任的工具中的智能体,只开启你能凭肉眼监督的那部分自主权。把任何能代表你发送、付款或删除内容的智能体,视为在有人确认每一步操作之前都应保持关闭的功能,因为一条发给客户的错误自动化消息可能会让你失去这段客户关系。优先选择那些向你展示智能体做了什么、并让你能关掉自动化功能的供应商。

Enterprise. 这里的难题是在众多团队之间治理智能体:限定自主权的共享模式、最小权限的工具凭据、沙箱化、人在回路的关卡,以及端到端的追踪,让没有任何一个团队需要重新发明这些防护栏。把智能体接入内部系统时,赋予它与人类相同的访问控制,将不可逆的行动放在具名审批人和变更管理流程背后,并用成功率指标、单次运行预算和对抗性注入测试来管理整个智能体组合。统一追踪和评估层,使任何智能体的行为都能被复原和审计。

Government. 采购规则、透明度和公共问责制限定了每一个决策。把智能体的角色限定在收集事实和起草文本上,把每一项影响公民的决定都留给负责任的人类,因为公共部门决策的责任无法委托给一个模型。记录每一次运行,让监督机构能够看到咨询了哪些来源、做了什么,要求供应商披露智能体的工具和局限性,并通过一套对抗性评估集来证明,智能体拒绝在其被限定的职责范围之外行动。

Examples

Startup. 一家五人规模的分析初创公司构建了一个支持工单分诊智能体。它读取一张新到的工单,检索文档,然后要么起草一条回复,要么把工单转给人类,这就是它全部的工具集。它的凭据是只读权限,外加一个”创建草稿”操作,除非有人点击发送,否则永远不会真正发出。每一次运行都会被追踪,这样创始人就能明白某张工单为什么被转到了那个地方,每晚还会用五十张真实工单组成的评估集,让智能体对每张工单各运行五次,以追踪路由准确率。当竞争对手那个精巧的多智能体演示诱惑他们时,他们仍然坚持单一智能体的方案,因为他们的任务并不能拆解。

Enterprise. 一家银行构建了一个智能体来帮助运营人员核对失败的支付交易。它在与人类职员相同的访问控制下接入内部系统,通过仅限于对账用途的最小权限服务凭据获得授权。该智能体可以自由地进行调查(读取账本、检索交易历史),但任何转移资金或编辑记录的行动都会被暂存,并需要一位具名的人类审批人批准,以满足变更管理的要求。摄入的文档被视为不可信,以削弱提示注入的威胁,工具在沙箱中运行,每一次运行都被端到端地追踪以供审计。一个离线评估集会对每一次模型或提示词变更进行把关,单次运行的预算限定了步骤数和花费,使一个陷入循环的智能体无法让成本或延迟失控。

Government. 一家福利机构试点了一个智能体,帮助个案工作者为某项申请整理事实:调取记录、核对资格规则,并起草一份摘要。该机构划出了一条硬性界线:智能体负责收集和起草,但每一项影响公民的决定都由人类个案工作者做出并承担责任,因为公共部门决策的问责无法委托给一个模型(第 6.5 章)。每一次运行都被完整记录,显示咨询了哪些来源、起草了什么内容,让监督机构可以审计任何一个案件。自主权被有意地限定在”读取与起草”的范围内,工具是最小权限且沙箱化的,一套对抗性评估集确认该智能体拒绝在收集事实之外采取行动。

Business case: motivations, ROI, and TCO

智能体带来的回报,来自把过去需要人工在多个系统之间点击操作的多步骤工作自动化:分诊、对账、研究和例行运营。这种价值体现为无需人类参与每一步就能完成的工作、更快的周转时间,以及被解放出来去做需要判断力的工作的员工。由于智能体建立在现有的 LLM 和工具之上,构建出一个能运行的原型所需的时间很短()这正是团队容易过度构建的原因所在。

总拥有成本正是智能体与普通 LLM 功能的不同之处。在推理成本之上,你还要为工具集成、沙箱化和权限管道、评估机制、追踪与可观测性技术栈(第 6.6 章),以及负责审批关卡的人类评审员付费。一个陷入循环或边界设定不当的智能体,会带来一种可能在没有预警的情况下飙升的可变成本,因此步骤数和花费的预算是设计的一部分,而不是事后才想起的补救。不采用的代价,是运营更慢、人工劳作更多,而你的竞争对手正在把这些自动化掉。草率采用的代价,则是一次发出错误消息、泄露数据,或做出无人负责的决定的自主行动。向管理层论证这一点时,要把一个具体的自动化目标,与一份关于防护栏、评估和人工监督的具体计划配对提出,并诚实地说明,防护栏才是成本的大头。

Anti-patterns and pitfalls

  • 本该用工作流却用了智能体。 为一个步骤本已知晓的任务,承担了自主权的全部风险。
  • 过于宽泛的工具和凭据。 用一个”什么都能做”的工具,而不是狭窄的、最小权限的工具。
  • 对提示注入视而不见。 把不可信的内容喂给一个持有真实权限的智能体。
  • 对不可逆行动没有人工关卡。 让模型不经检查就发送、付款或删除内容。
  • 多智能体表演。 把一个简单的任务拆分给多个智能体,却付出协调成本而毫无收益。
  • 凭感觉评估。 依据对话记录读起来怎么样来评判,而不是依据任务成功率。
  • 不设边界的循环。 对步骤数、时间或花费没有上限,导致一个卡住的智能体不断消耗金钱和延迟。
  • 未被追踪的运行。 没有智能体做过什么的记录,导致你无法调试、审计或问责。

Maturity model

  • Level 1, Initiate: 智能体以随意的方式被原型化,拥有宽泛的工具访问权限,不设任何边界。成功与否靠演示来判断,而且是在出问题之后才反应性地判断。没有评估集,没有追踪,对有重大后果的行动也没有人工关卡。
  • Level 2, Develop: 部分智能体拥有有边界的循环和最小权限的工具,基本的追踪机制也已存在,但各团队的实践并不一致。少数项目里有手工评估集能捕获明显的回退,其他项目则完全没有。人工审批把守着最明显的不可逆行动,但覆盖并不均衡,也没有文档记录。
  • Level 3, Standardize: 共享的模式治理着自主权、工具权限、沙箱化和人在回路的关卡,在每个团队中都形成文档并被强制执行。每一个有重大后果的行动都设有关卡或经过校验,智能体被端到端地追踪,一个带成功率评分的自动化评估集在每次变更时都会运行。提示注入被当作一种长期存在的威胁,有明确的应对方案。
  • Level 4, Manage: 智能体组合被对照基线进行度量和管控。每个任务的成功率、提示注入防御的通过率、每次运行的成本和步骤数、人工审批的延迟,以及循环或失败事件,都作为指标被追踪;回滚和终止的阈值依据这些证据被强制执行,而不是依据投诉。单次运行在步骤数、时间和花费上的预算受到监控,任何指标出现回退都会在规模化之前、而不是在事故发生之后触发行动。
  • Level 5, Orchestrate: 自主权依据政策与任务风险相匹配,并随着结果不断到来而持续调整。持续的离线与在线评估把智能体的行为与业务结果联系起来,组织会随着风险状况的变化,例行地淘汰、重新界定范围,或重新授权智能体。追踪、成本预算和审计轨迹在整个智能体组合中保持统一;注入攻击和困惑的代理人防御会经过对抗性测试;自主行动的问责关系清晰、可审计。

Ideas for discussion

  1. 你们当前哪些 LLM 功能已经悄悄变成了智能体?每一个的自主权是否都是有意识地被限定的?
  2. 对于每一个智能体工具,攻击者通过注入内容滥用它的最廉价方式是什么?什么能阻止这一点?
  3. 你们在哪些地方选择了多智能体设计?你能证明其协调成本相较于单一智能体确实是值得的吗?
  4. 哪些智能体行动是真正不可逆的?其中每一项能否被重新设计为可逆或可暂存的?
  5. 如果一个智能体明天采取了有害的行动,你能准确复原它做了什么、谁应对此负责吗?

Key takeaways

  • 智能体是处于循环中的 LLM,配备工具、记忆和目标。风险存在于循环和工具之中,而不在文字本身。
  • 当步骤已知时优先选择固定工作流;把自主权留给真正开放式的目标,并对其严格设限。
  • 工具使用是核心能力。为每个工具赋予最小权限、经过校验的模式(schema)和一个沙箱。
  • 把有重大后果和不可逆的行动放在一位拥有真正权力的人类背后加以把关,并为廉价的撤销而设计。
  • 把智能体当作对抗性场景来对待:防范提示注入和困惑的代理人滥用(第 4.2 章)。
  • 依据多次运行下的任务成功率来评估,并追踪每一次运行以便调试、成本控制和审计(第 6.5 章和第 6.6 章)。
  • 很多时候,正确的答案根本就是不要构建一个智能体。

References and further reading

  • Shunyu Yao et al., ReAct: Synergizing Reasoning and Acting in Language Models.
  • Timo Schick et al., Toolformer: Language Models Can Teach Themselves to Use Tools.
  • Anthropic, Building Effective Agents (engineering guidance on workflows versus agents).
  • OWASP Foundation, OWASP Top 10 for Large Language Model Applications (including prompt injection and excessive agency).
  • Simon Willison, writing on prompt injection and the “lethal trifecta” for AI agents.
  • Norman Hardy, The Confused Deputy (the classic statement of the confused-deputy problem).
  • Chip Huyen, AI Engineering: Building Applications with Foundation Models.
  • Stuart Russell and Peter Norvig, Artificial Intelligence: A Modern Approach (intelligent agents and rational action).