Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

也论人和Agent的交互设计

2026-06-07, 杭州

为什么传统应用厂商们不断端上来一些智能化xx平台,但实战中我们还是喜欢用CC/Codex/Crush之类的通用Agent?

三个月的实习生

很喜欢一个比喻,Agent是一个永远只在你这里工作三个月的校招实习生。这个比喻完美反映了现阶段LLM Agent在交互上的属性:

  • 真正的短期记忆只发生在一次上下文中,所有你需要保留的内容都需要显式叮嘱他写成存在磁盘里的文字。实习生干完三个月(黄金区间~200K上下文)就滚蛋,然后来了下一个实习生
  • 每次开始干活都是空有一身本领但不熟悉干活的结构,你需要诱导他一步步读上下文,但又要平衡好“学习项目知识”和“实现项目产出”的精力
  • 工作的唯三体现,一是和你对话,二是操作工具,三是翻阅文档
  • 可能出错,中途要有人盯着,要问进度,要设目标,要检查成果
  • 如果你要标准化结果,就给他标准化指导,越标准越好;反之亦然,过多的指导会给探索性工作设下偏见

在下一代的Agent交互范式出现之前(读者可以自由畅想),我们在做所有Harness设计时都将Agent想象成这样的一个实习生是没问题的。

graph LR;
Human <--> Agent
Agent <--Tool--> System
Human <--> System
Human <--> Knowledge[(Knowledge)]
Agent <--> Knowledge

Agent的交付物,可以是System里面状态的变化(帮你写代码上线了),也可以是基于System或Knowledge抽取出的新Knowledge(帮你根据季度工作写了PPT)。

两类协同工作方式

其实就是是否有人时刻在旁边盯着(HITL, Human in the Loop)。设想两个场景:

  1. 你在填一个申报,里面有一栏获奖情况,这个时候你想,要是有人能给你相册里的10张奖状都分析出来把获奖名称填到表格里。
  2. 你是领导,你根本不用填这个申报,这个也是上级发下来的文件,你只要把邮件转发给实习生,告诉他让他给你发回填好的表

为什么场景1还需要你盯着?因为有些Knowledge只在你的脑子里或者无法靠确定的System去捕获。当然,现阶段也包括Agent对Knowledge的应用能力仍然不足。现在我们管第一种场景叫HITL,第二种场景叫GOAL,分别考虑一下现在已有的糟糕设计,以及怎么做更好。

HITL

在我之前探讨智能安全产品时,我提到过一个糟糕的设计,就是任何系统都要在页面上带一个Chatbot。拜托,Chatbot在AI出现之前已经火了至少20年,绝大多数时候,当一个Chatbot出现在页面右下角,它只能起到引流的作用,要么引导到一个独立的客服对话框(转为GOAL模式),要么引导你加客服联系方式(升级到完整的对话体验)。归根结底,当前的前端基础设施还不能让你靠网页界面的Chat就自动去本地抓信息把表填了的,这也有严重的安全隐患。

对话框一定要能对话

为什么老的Chatbot总是起到引流作用呢?因为它的交互往往很差,根本不工作,只有通过引流来实现交互升级。那么升级到什么程度才合适呢?

  1. 基本的输入体验,支撑正常的打字,发送,阅览回复。这方面有个负面例子是某云平台的文档页,右下角的弱智Chatbot会把需要宽屏才能塞下的页面扔进比手机屏幕还小的frame里。
  2. 会话管理,至少支持人关掉再开还能继续。说白了就是聊天记录。
  3. 在会话中体现有效信息。又回到上述场景,你往往需要补充几句话,告诉对面你在哪块儿要帮忙,要对面登到哪个平台上填什么东西。

于是,在企业内,平台一旦多起来,每个平台一个Chatbot根本不现实。这个时候,更明智的选择当然是提取页面上最需要关注的有效信息,通过消息的形式发送到专门的IM平台,平台升级你和Agent的对话体验。说白了,这才是“摇到人来帮忙”。

实时的Co-edit

思考一下,现在你如果和人一起填一个表,一般怎么做?一般是通过钉微飞给他发在线表格,简要交代一下情况,然后俩人一起边写边聊。如果他工位离你很近,可能直接就跟你一起看,然后他边说你边填。

在HITL的场景里,这类实时更新的co-edit的能力是至关重要的。对于老的Web系统而言,不太优雅但是奏效的办法是通过WebBridge,让Agent直接接管你的浏览器。GUI方面,部分系统可以靠a11y基础设施来实现。

但这里又有需要注意的部分。在ReAct模式下,Agent的思考-执行切换并没有那么灵活,它没法实时跟你说多敲一个少敲一个字更好。这个时候你就怀念以往靠3.5或者4o给你tab补全的时光了,那种程度倒是较为方便的,就是不够聪明。总之,最小的分工单元,由模型和框架ReAct的灵活性决定

总的来说就是宜有一个集中管理的地方让你和AI好好地沟通,而各平台需要尽量实现你和AI二者对System的操作是无缝写无缝读的。现阶段比较好的做法是统一IM,然后有共享文档就用共享文档,没有共享文档就老实把局部的控制权交给AI让他帮你自动锁头。你这Excel怎么有框?

额外一提,不要创造任何的让AI帮你填好收款人并点击转账按钮的机会。破产的是你,坐牢的是你。

GOAL

现在,你是领导,你只管告诉实习生端午节之前给你把材料交了,然后你的大脑皮层和紧皱的眉头一起被抚平,以至于以下的部分好像人和Agent的交互部分不是很多,更多是强调如何从人、System和Knowledge三方面反向驯服Agent。相信Agent用得多的人老早就爱上了/goal,当然我个人认为这和御三家的LLM开始出现偷懒发EOS token也脱不了关系。

消息机制:等待戈多

GOAL模式严重依赖异步的消息机制,你把文件转发给实习生,但你不知道他什么时候回你,甚至不能保证他回你。这方面洋人的文化就很拘谨,邮件大大方方发,不太会突然给你来一个叮一下五分钟内打电话给我。这方面,OpenClaw约定俗成的Channel机制真不是好东西。首先超长Loop下,外部系统可能根本没法保持这么久的等待会话状态;其次,会话遇到EOS并不代表任务的完成。思前想后,传统的异步消息机制,也就是邮件/通知,依然是最方便的

当然,还有个坑,GOAL下发现实在缺少信息需要降级到局部的HITL,怎么通知用户。

观测面和服务降级:实习生准时下班之后

这里的观测面并不是说针对Agent的观测(下面会讲),而是针对任务的观测。设想一下,如果有个相当复杂的任务,而Agent还在走它的ReAct loop到一半,此时你又需要预先看看。长远来看,复杂会话Agent可能会新开一个会话,然后介入别的会话去一窥,这确实是一种方案;另一种方案则是System本身能够反映出当前任务已经做了的事情。就像你边跑vibe coding,边看着下面一堆文件建出来+114514行,回头梁圣只收了你5毛钱,你不会觉得很爽吗?

另一种情况则是服务降级,AI不工作的时候你必须还能接着工作。就像是实习生居然五点半准时开溜(没把PPT发你),然后大领导告诉你PPT九点要对一版。显然,哪怕是设计为GOAL的场景,系统也要支持导出AI在前期已经做的工作让人接手。

红线校验和回滚措施:实习生不能背锅

上文说过,破产坐牢的是你。你设的/goal是应然,而Agent对System和Knowledge产生的变更是实然。可能/goal还没实现,你的库就被删了;也有可能Agent觉得自己彻底EOS了,但并没有达成你的/goal。那么,我们显然需要脱离于Agent的,确定性的红线去约束Agent的工作。

  1. 不能做的坚决不做。这是企业级AI应用最难的部分,已知加Skill也是没法杜绝的,传统堡垒机是没用的,操作系统层面的破坏性操作可以靠LandLock/bwrap去防,但现实的System/Knowledge如何应对?只能靠良好的Tooling解决。
  2. 要做到的坚决做到。这取决于你对内容的规范要求到什么样的程度。完全确定的内容可以用完全确定的schema去lint,约莫有用的大纲可以让AI自查自纠;而完全松散的工作,根本就不适用这一条。
  3. 做错了可以补救。为什么强调vibe coding一定要上git,勤提交,因为AI在每个stage都可能瞎搞。但对于现存老旧系统,这样的事务性显得尤其困难。为了追求性能(以及现实世界的许多情况),一旦提交了事务就不再有回滚的机会了。但不管怎么说,你要考虑。IaC焕发第二春的一集。

Supervisor Agent:让导师抽鞭子

上文说到,EOS不意味着任务完成。所以这其实是接续上一条里面提到的点,对于一些任务,我总是需要一个定期巡查的导师。如果系统已经汇报EOS,我应当先去用代码判断硬性的任务交付物是否已经达成;如果完成了,可以根据需要再接一个Agent去判断是否有严重的工程纰漏;而如果没完成,则Agent需要介入查看目前session内发生了什么情况,并根据原始的goal,接着给Agent抽一鞭子接续会话,直到完成goal。

也有不少开发者意识到了,可观测性对Agent来说尤为重要。不管是这里说的对工作质量的supervise,也包括预防Agent出现幻觉和进行误操作的意图识别。这里所说的许多审阅和介入操作,可以通过OTel导出审阅来实现实时抽鞭子。

权限和身份

这块本来不应该放在这里讲,因为和交互设计关系没那么大。在Agent和别人、和System、和Knowledge发生交互的时候,什么时候Agent代表Agent?什么时候Agent代表你本人?什么时候Agent持有你的授权?大的体系框架来看,AD/Kerberos那套就已经够用了(当然,许多域管理员可能从业至今都碰不到一次Delegation);但落实到企业中,这无疑是个很痛苦的过程。这简直值得新开一篇文章来谈,放在这只是想表述我意识到对标AD/krb的全局RBAC,在人机协同糊弄系统的时代会很有用