共享与多用户智能体

11 分钟读完

H9
实战手册 · 智能体体验与人机交互

共享智能体:第二个人能看见它的那一刻,你对"用户"的模型就错了。

把一个跑得好好的单用户智能体丢进团队频道,三条假设会在同一瞬间失效——只有一个意图要服务、只有一套权限可据以行动、只有一个人为它做的事负责。团队会为第二条做设计,因为权限泄漏听起来像一次数据泄露。而真正把采纳率杀死的是第三条:当一个动作被记为"智能体做的",团队里就没人拥有它,而一个没人拥有的共享智能体,最终会稳定在它最怀疑的那位成员的信任水平上。把每次运行绑定到一个提出请求的人,把这个绑定显示在界面上,其余大部分就跟着来了。

STEP 1

把你正在打破的那三条假设点出来。

单用户智能体有一个委托人。它知道自己在追求谁的目标、在花谁的凭证、结果旁边署谁的名。而一个共享智能体——在团队频道里、在共享文档里、在家庭设备上、在几个人一起看的工单队列里——拥有的是一群观众,而观众不是委托人。

  • 意图是有争议的。同一个话题里的两个人可能想要相反的东西,而更晚的那条消息并不是更有权威的那条。一个十秒钟前才加入话题的同事说的"取消它",与发起这次运行的那个人说的"取消它",不是同一条指令。
  • 权限是不齐的。屋里每个人都能看到这个智能体,而他们对它所能触及之物的访问权并不相同。智能体的能力集合现在是谁在问的函数——这是单用户设计从来不必表示的东西。
  • 问责是无主的。一个记在智能体名下的动作,是一个旁边没有人的动作。这是人们忘记去打破的那条假设,也是把"这个智能体挺有用"变成"没人想当那个放它跑的人"的那一条。

这与多租户不是同一个问题——多租户讲的是把不同客户彼此隔开。这里所有人都正当地待在同一个空间里,而你需要的隔离跑在一个租户内部——跑在彼此都看得见的同事之间,这意味着执行点不可能是工作区边界。

STEP 2

每次运行恰好有一个人类委托人,就是那个提出请求的人。

这个设计里最吃重的一个决定,是拒绝对共享空间做那种"环境式"的读法。一次运行不属于"这个频道"。它属于那个用消息发起它的人,这个绑定在整次运行的生命周期里固定不变,而每一次下游调用都携带着它。

  • 权限取交集,绝不取并集。智能体可以做它被授予范围内的事并且是提出请求者被允许做的事,除此之外什么都不行。诱人的失败是一个持有团队所有人可达之物并集的服务账号——它让演示跑得通,也让智能体变成一件任何成员都能调用的提权装置。见智能体身份与权限
  • 读权限也跟着请求者走,不只是写权限。如果 Alice 打不开那份薪资表,智能体就不能因为 Bob 上周把链接贴进了频道就为她做摘要。对共享上下文的检索是那个安静的泄漏,而且在它发生的那一刻,它从来不像一次访问控制决策。
  • 运行途中来自第三方的指示是提议,不是命令。它们可以被呈给委托人;它们不可以悄悄改变运行的方向。中断与交接里的"暂停/引导/中止"词汇表是对的模型,只需加一件事:谁被允许使用哪个动词。
  • 把"中止"给比"引导"更多的人。屋里任何看见一次运行走偏的人都该能把它停住;而几乎不该有人能悄悄改变它的目标。这两者是不对称的,理由很明确——停止是安全且可逆的,改向两者都不是。
  • 升级发给委托人,不发给频道。一个广播给整个屋子的审批请求,是一个没有收件人的审批请求,而它会由最闲的那个人、而不是负责的那个人来回答。异步智能体体验里的死锁分析在围观者变多之后只会更糟,不会更好。
STEP 3

归属塌陷才是那个终结试点的失败。

去问一个共享智能体上线六周的团队出了什么问题,你很少会听到"泄漏"。你会听到:没人确定那件被发出去的事是谁要的,两个人重做了同一份工作,以及话题里的某个决定追不到一个有意做出它的人身上。审计日志里通常有答案。这没用,因为失败在界面里,不在存储里。

  • 每一次都把委托人渲染进消息里。"正在起草客户回复——为 @alice"只要一行,就能在歧义还没成形的那一刻把它移除。一条没有附着人名的智能体消息,在滚过屏幕的那一刻就成了孤儿。
  • 归属由产物携带,不只由聊天记录携带。工单评论、日历邀请、提交、外发邮件——任何离开共享界面的东西,都必须在自己身上写明它是在为哪个人行事。聊天记录是人们去找归属的地方;产物才是需要归属的地方。
  • 可见地"认领"工作,以防重复。在共享空间里,两个人会在相隔一分钟内问同一件事。一个会宣告"已经在为 @bob 做这件事了,40 秒前开始"的智能体,既避免了重复运行,更重要的是避免了两个分叉的结果落进同一个话题。
  • 把回执做成一等对象。谁要了什么、做了什么、以谁的权限、动了什么——每次运行一份可链接的记录。决策回执审计轨迹给你机制;而体验上的要求是:一位团队成员能从那条消息一键抵达它,不必去找管理员。
  • 对共享智能体的信任由最不信任它的那位旁观者设定。任何能看见智能体动作的人都能在社交层面否决它,而一次当着观众面的不舒服动作,代价高过好几次私下的。这个乘数正是为信任而设计在这里比在私人工具里更严苛的原因。
STEP 4

决定智能体何时可以说话,并默认为"被邀请才说"。

共享智能体有一个私人智能体没有的"占场"问题。什么都回,它就占了这个频道,并训练人们把真正的对话挪到别处去。只在被点名时才回,它就错过了大部分本可以做的工作。这个取舍是真实的,没有哪个设置能绕过它,所以要把它做成一个刻意的、可见的、按空间而定的选择,而不是一个写死的默认值。

  • 显式调用是正确的默认。从窄的开始。一个因为受信任而被更频繁邀请的共享智能体,比一个正在被静音的,处境好得多。
  • 先提议,再行动。在沉默与说话之间有一个低成本的中间地带:一条短暂的、只对一个人可见的建议("我可以把那些数字拉出来——要我做吗?")。它能采集到"不请自来的帮助何时受欢迎"的信号,又不花掉整个频道的注意力。
  • 话题串是容纳单元。把运行过程中的絮语留在话题串里,只把结果发到频道。这一条约定对共享智能体可忍受度的贡献,超过任何提示词调优。
  • 沉默需要一个状态界面。一次什么也不说的长运行,与一次坏掉的运行无从分辨,而在共享空间里会有好几个人各自去戳它。一条会更新的状态消息胜过一串进度贴——异步智能体体验里"产物即状态界面"的论证在这里直接适用。
  • 按空间设置,而不是按用户设置。人们据以思考的单位是那个屋子。让共享屋里的每位成员各自配置智能体的聒噪程度,产出的是一个当着见证者的面行为不一致的智能体,而那读起来就是"不可预测"。
STEP 5

共享的上下文窗口是一个注入面,而攻击者带着工牌。

私人智能体的安全模型假定不可信内容来自外部——网页、文档、邮件。而在共享空间里,智能体读到的内容是由正当地待在里面的人写的,加上他们邀请进来的任何人,再加上任何从别处粘进来的东西。一条精心构造的消息的爆炸半径,是智能体在下一个调用者名义下所能触及的一切。

  • 频道历史是不可信输入,要被界定并如此标注。提示注入入门同样的纪律,只是多了一层不适:写下那段文字的人在你的工资册上,而且他可能是无心粘进来的。
  • 访客、外部成员与被转发的话题串是那道锋利的边。大多数共享工作区允许外部参与者,而大多数团队记不清哪些频道里有。如果你的智能体在读某个频道,就把"谁能往这个频道写"枚举出来——答案通常比里面任何人以为的都宽。
  • 指令从不来自历史,只来自当前委托人的那条消息。先前的消息是关于世界的证据,不是指令。这是一条你在代码里强制执行的解析规则,因为它不是一条模型能可靠替你执行的规则。
  • 共享记忆可被投毒,而且会持续。一个会从频道里学习的智能体,可能被一条消息教会一件错事,然后对整个团队重复它好几个月。如果你保留团队级记忆,就给每一条记录保留来源,并让它可被审阅——见记忆投毒防御
  • 按构造,数据外泄只差一条消息。智能体本来就能往屋里发消息。一条诱使它把私有文档摘要进共享频道的注入指令,既不需要网络出口也不需要任何漏洞——那就是智能体在对错误的观众做它的本职工作。
STEP 6

记忆,以及你怎么知道它在起作用。

共享智能体会积累一些没人明确拥有的上下文:偏好、约定、既往决定、关于"这个团队怎么做事"的内部梗。那份记忆正是共享智能体会比私人智能体变得更好的原因——而在有人离开团队的那一刻,它就成了一个治理对象。

  • 把个人记忆与空间记忆分开,且绝不静默合并。Alice 告诉智能体的关于她自己偏好的事是她的;团队就命名约定达成的共识属于这个空间。把前者写进后者是一次看起来像功能的隐私事故。智能体记忆里的那个区分是机制;在这里它同时也是一条边界。
  • 空间记忆需要一个所有者、一个审阅界面和一套删除方案。谁能看到智能体学到了关于这个团队的什么、谁能编辑它,以及当一位成员离开或项目关闭时它会怎样。如果答案是"一个有数据库权限的工程师",那它还不是一个共享功能。
  • 按团队评测,不按请求者评测。按用户的满意度会漏掉这份手册里的整整一类失败。去追踪重复运行率、拥有可识别委托人的运行占比、每个空间的静音与退出率,以及由真正的委托人(而非旁观者)回答的升级占比。
  • 尤其盯住那个旁观者指标。当审批越来越多地由最近的那个人、而不是提出请求的那个人点掉时,问责链条已经断了,而日志看上去仍然完美。
  • 用"对抗性同事"来测,而不是"对抗性攻击者"。这里现实的红队是一位好心的队友,他粘进来一封含有指令的客户邮件;或者是一位待在没人审计过的频道里的外部访客。用真实消息来建这条切片。

如果在进入共享空间之前只做一件事,就做这件:让每次运行携带一个人类委托人,把权限强制为"那个人的访问权 ∩ 智能体的授权范围",并把名字打印在那条屋里人看得见的消息上。它同时修好了人们担心的那个泄漏和真正终结试点的那个归属失败,而代价是你运行对象上的一个字段。一屋子人当中的智能体不是一个更强大的助手——它是同一个助手,只是"代表谁?"这个问题现在没有答案,而你的工作就是在代码里和屏幕上回答它。

相关:审批与确认体验讲闸门放在哪里,透明与可解释讲屋里的人需要看到什么,邮件与日历智能体讲最常见的共享界面部署,共享记忆与黑板讲同一个争用问题的机器对机器版本。