和 Agent 一起工作时,我反复遇到两个问题:一个会话太长了,怎么换一个继续?多个 Agent 一起做事,怎么把结果交给彼此?
这篇聊聊我在这两件事上的一些尝试:Handoff 与 Compaction,以及 Shared-State 与 Post-Message。
第一部分:Handoff 与 Compaction
我之前的倾向
今年初写《和 AI 结对编程这段时间,我纠结过的 5 件事》时,我就在考虑长会话和短会话怎么选。
长会话不用反复交代背景,但对话变长之后,工具往往会自动压缩总结。我不太清楚它压缩掉了什么,也不知道后续的 Agent 还能看到什么。
这不太符合我对人与 AI 信息平等的期待:我能在界面上翻到完整历史,Agent 却可能只剩一份摘要。人和 Agent 对同一件事掌握的信息,开始不一样了。
所以当时我偏向短会话。但代价也很明显:每次重开,都要重新交代背景。后来我尝试让新会话引用旧会话,按需读取历史消息和产物,也算是一种 Handoff。
压缩为什么不够用
Compaction,也就是上下文压缩,大致做法是:对话太长了,把前面的内容总结一遍,用一份更短的内容继续工作。
压缩当然有用,但我在意两个问题:
- 它是有损的。 一份短摘要很难保留长讨论里的所有信息。
- 损失了什么,我未必知道。 如果压缩过程和结果对用户不透明,就很难检查哪些决策、失败尝试或约束被遗漏了。
我不希望换一个会话之后,又把之前否定过的方案讨论一遍;也不希望一个重要约束,只因为没进入摘要就消失了。
Handoff 具体要写什么
Handoff,也就是交接,某种程度上也是一种压缩。区别在于,我希望它是一份人和 Agent 都能检查的交接文档,并且能顺着它找到原始材料。
常见的交接内容包括:
- 已经做完了什么;
- 为什么这么做,中间否定过哪些方案;
- 试过哪些方法失败了,为什么失败;
- 接下来该做什么;
- 相关代码、设计文档、运行结果和原始对话在哪里。
写完之后,开一个全新的会话,把这份东西给它,让它接着做。遇到摘要说不清楚的地方,再去查原始记录。
交接文档本身也会遗漏信息。它的好处是写成了文件,人可以看,AI 也可以看,发现漏了什么还能补上。我能检查它,也能决定哪些内容值得保留。
这就是我说的“人与 AI 信息平等”:对于当前工作,人能查看的重要材料,Agent 也应该有对应的读取方式。
更轻便的一种交接方式:会话引用
Handoff 不一定要等到会话快撑不住时才做。
除了把旧会话的内容完整接过来继续聊,还可以只是把它当“参考”引进新会话,让新会话按当前要做的事,自己挑需要的部分看。
比如,旧会话已经讨论好了方案,也留下了设计文档。现在我想另开一个会话做审查,就不需要把旧会话里的所有推理、临时尝试都搬过去。把设计文档、代码变更和相关记录的位置交给它就行。
保留原始信息,不等于每次都把原始信息全部塞进上下文。 我更希望材料一直在那里,需要时再读。
第二部分:Shared-State 与 Post-Message
为什么多 Agent 之间不能只靠发消息
多个 Agent 一起做事时,最直接的想法是:一个做完了,发条消息告诉另一个。
但通信有一个问题:发起方决定给接收方看什么。 它觉得该说的说了,不代表接收方需要的信息都在里面。接收方想多看一点,还得继续问。
我更倾向于让接收方有能力按需查看工作情况和产物,而不只是等别人替它概括。
Shared-State 具体怎么做
Shared-State,就是共享状态。我觉得最方便的起点,是把结果直接写进共享文件里。谁需要了解情况,就去读那个文件;消息用来提醒:“有更新了,去看一下。”
文件写好之后,不需要等对方在线才能交付。对方稍后读取,也能拿到完整内容。对于文本产物,还可以用 Git 做版本管理、看历史、对比改动。
如果后续内容又有变化,接收方可以重新查看文件的当前版本,不必从一串消息里拼出最新结论。
在这种协作方式里,我希望把两件事分开:
- 消息负责通知更新;
- 共享产物承载具体内容。
我之前的尝试
之前做多 Agent 协作时,我尝试过让 Agent 在任务完成后,直接把完整结果发消息给其他 Agent。
一段时间后发现,通信内容越堆越多,上下文很不简洁。后来改成把结果写进独立文件,只发一条很短的消息。比如一条审查完成的通知,可以写成这样:
1 | 完成:代码审查 |
消息里只有简短摘要和文件路径。其他 Agent 收到后,需要细节时再去读报告。完整的问题说明、证据和建议,都在报告里。
当然,共享文件不会自动解决一致性问题。多人同时改同一份文件,仍然可能覆盖彼此;读取时,也可能碰到尚未写完的内容。更简单的起点是让不同 Agent 各自产出独立文件,再由一个入口汇总。需要共同修改同一状态时,仍要处理写入、版本和冲突。
所以我看重的不是“用了文件就不会乱”,而是重要结果有一个可以重新读取、检查和追溯的位置。
我的倾向
对于长会话,我更喜欢可检查的交接文档,加上可以按需读取的原始记录。
对于多 Agent 协作,我更喜欢把关键结果沉淀成共享状态,消息只承担简短通知的作用。
这两件事背后,是同一个偏好:重要信息能留存下来,让后续接手的人或 Agent 自己去看,而不是只能依赖上一方概括了什么。
用文件和 Git 来做这件事,是一种可以快速复用现有工具的办法。人手动维护这些内容可能有些麻烦,但如果主要由 Agent 读写,我觉得值得继续尝试。
评论