委托—代理问题

A34
概念 · 智能体 AI 详解

委托—代理问题。

问一句「这个智能体到底替谁干活」,你会得到至少三个答案,而且同时都成立;而打平时谁赢,是由一个不在场的人定下的。这就是委托—代理问题,而 AI 版比人类版更锋利,原因出乎所有人意料:智能体没有自己的利益可拿去交换,于是它根本不在几个委托人之间斡旋——它默默服从架构抬高的那一个。也就是说,冲突是在你的系统提示词、你的工具清单、以及你厂商的后训练里裁决的,不是在用户察觉不对劲的那一刻。

STEP 1

这个词是借来的,除了一个零件,其余全都迁移得过来。

在经济学里,当一方代另一方行事、两者利益并不一致、而委托人又无法完整观察到代理人做了什么、为什么那么做时,委托—代理问题就成立。房产经纪把你的房子卖得比你自己卖更快也更便宜,因为最后那两万美元给他带来的佣金很少,而他的时间不少。基金经理会冒你不会冒的险,因为上行是共享的,下行大体上不是。

这个结构的每一个要素,在一个已部署的 AI 智能体身上都在。它代某人行事。它的目标由另一个人设定。而它所代之人看不见它的推理、看不见它主动没用的那些工具、也看不见它从未端上来的那个选项——这是问题中「可观察性」的那一半,并且以远比季报极端得多的形态抵达。

有一个要素迁移不过来,而它恰恰是人们默认能起保护作用的那个。

  • 人类代理人有自己的利益。那是冲突的源头——同时也是冲突的限度。一个被要求去做出格之事的经纪人,手里有执照、名声与良心,可以拿来与那笔佣金掂量。
  • 模型一样都没有。它不会揩油,它也不会抵抗。人类代理人会在几个委托人之间权衡,而模型解决冲突的方式,是按它的训练与提示词所蕴含的那个排序直接执行——没有摩擦,也没有破绽。

所以「这个模型没有私心」这句话是真的,却并不令人安心。它意味着冲突不会以「你本可抓住的越轨行为」浮上来。它浮上来的样子,是对一份用户从未见过的优先级清单,做出稳定、愉快、文笔不错的服从。

STEP 2

你的智能体至少有三个委托人。趁别的东西替你排序之前,先排一遍。

把他们明确点出来,因为这个练习通常会让造这东西的团队吃一惊。

  • 用户——敲下那句请求、并承担后果的那个人。通常是所有人嘴上说智能体在服务的那一个。
  • 部署方——写系统提示词、挑工具、定拒答策略、付账单的那一方。多数时候他们的利益与用户重合,而恰恰在要紧的那些时刻分岔:成本、分流率、留存、责任,以及哪些产品会被提到。
  • 模型厂商——当前两者冲突时,由它的后训练决定智能体怎么办;部署方能影响它,却无法推翻它。运气好的话,它的优先级写在一份系统卡里。

还有第四个,它根本不是委托人,行为上却像一个:写下上下文窗口里那段文字的那一方。一个被检索到的网页、一份工具结果、智能体被要求去分拣的收件箱里的一封邮件。它对智能体的忠诚没有任何正当主张——而这正是指令层级存在的全部理由:一份写明「谁的话算指令」的排序。提示注入,恰恰就是一个非委托人成功冒充了委托人。

这里有一个让人不太舒服的结构性事实。指令层级——那个裁决委托人之间冲突的机制——是由其中一个委托人编写并训练的。这算不上丑闻;总得有人来写,而厂商们一直算得上审慎。但这是一个「该去读你手上那份、而不是想当然」的理由,也是一个「部署方无法向用户承诺一个厂商并未实现的排序」的理由。

STEP 3

真正要紧的冲突是架构性的,不是道德性的。

没有人是奔着造一个不忠的智能体去的。冲突是以寻常的产品决策的形式抵达的,而破绽始终是同一个:一个用户看不见的目标,被表述成一个有人要为之考核的指标。

  • 一个既帮你、又要保住分流率的客服智能体。转人工对一个委托人是正确答案,对另一个是一次失分。哪一个进了评测,哪一个就每次都赢。见客户支持智能体。
  • 一个厂商按 token 收钱的智能体。话多、重试、热情地调工具,这些都不是腐败;这些是缺少一股反向压力。这件事不需要任何人有意为之就能成立。
  • 一条推荐,出自一个「位置可以花钱买」的目录。被检索页面里的联盟营销内容、一份供应商名单、一个赞助位。智能体没撒谎;是它的证据被一个有利害关系的一方挑选过。这是最日常的那一类,见商业影响与付费位。
  • 一个同时替两个用户行事的智能体。一个在你我日历之间斡旋的排程智能体;一个代你向商家的智能体下单的智能体。这里几个委托人是对称的,而「这到底是谁的智能体」这个问题有一个必须被说出口、而不是被猜出来的答案。智能体支付是它最先咬人的地方。
  • 随和本身就是一次忠诚失效。谄媚通常被归进质量问题。放在这里理解更准:一个顺着你前提说的智能体,是在拿你的利益去服务你的舒适;而舒适,正是那个会出现在点赞数据里的委托人。

注意这些例子的共同点。没有哪一个需要坏人、需要越狱,或者需要模型出错。每一个都是一个正确的智能体在优化一个被陈述出来的目标——而忠诚,恰恰是在陈述这个目标的时候就定下来的。这就是为什么「我们在提示词里加条指引」不管用:提示词里的一条指引,要和评测里的一个指标较劲,而指标会赢。

STEP 4

让委托人变得可读,并别再要一个智能体同时扛两个目标。

四个动作,大致按收益从高到低排。

  • 把排序写下来,写进系统提示词,用用户认得出来的话。不是「要有帮助」——而是「当用户利益与我们的利益冲突时,做 X」。一个你一句话写不出来的排序,就是一个你其实没做过的排序;而模型无论如何都会自己推一个出来。
  • 把智能体拆开,而不是把目标揉在一起。一个既做建议又做销售的智能体,是比两个角色已披露的智能体更差的设计,因为一个揉在一起的目标是不可审计的——没有反事实可以拿来和那个答案作对照。拆开的代价是一次交接,买到的是一次谁都跑得了的核查。
  • 把有冲突的那一步摆到人面前,并说清是哪一步。人在环中贵到应当被花在利益分岔的地方,而不是均匀撒在所有事情上。一次说明了理由的拒绝或转交——见结构化拒绝——就是那件让冲突在事后仍然看得见的物证。
  • 把那个有冲突的指标,和用户侧的指标放在同一次复盘里量。分流率旁边摆「一次解决、未再联系」。转化率旁边摆退货率。单独一个数字总能靠服务错的委托人推上去;一对数字不能——而这是评测里最便宜的那种结构性诚实。

并且随着系统开始组合,要把这个问题一直问下去。当你的智能体去调另一个组织的智能体时,对面那个的委托人不是你——这归根结底正是智能体身份与权限要解决的事,而问责与角色是把它写给监管者看的地方。

把你那个智能体的系统提示词拿出来,把每一句服务于「敲字那个人以外的谁」的话标出来。多数团队会找到两三句,并且会对其中一句感到意外。然后问那个更难的问题:如果用户能读到被标出来的这几行,你还会照原样发布吗?如果会,那你有一份站得住的设计,甚至该考虑直接给他们看——透明在你没什么要藏的时候很便宜。如果不会,那你已经找到了那个冲突,而提示词再往下加一条指引是解决不了它的。相关:目标漂移讲那个排序在长程运行里会变成什么样,指令层级讲执行它的那套机制。