有人问我:"你养了 75 个 AI Agent(截至 7 月中旬,含活跃和实验性角色),它们之间到底是怎么互动的?A 做完的事情 B 怎么接手?"
这个题目特别好。因为我一开始也没想清楚。
我最初的想法很简单:给每个 Agent 配好角色和 Skill,它们就能本身配合了。后来发现远远不够——Agent A 写了个文件,Agent B 死活读不到;Agent B 做完了一步,Agent C 不知道 B 做完了;整个流程断成一地碎片,我得亲身当传话筒。
回头看,Agent 之间的协作模式不是计划出来的,是踩坑踩出来的。大概经历了五个阶段——从最原始的手工操作,一步步走到现在正在搭建的工作流系统。
第零层:人工拷贝粘贴
没错,最开始的"协作"根本谈不上协作。
Agent A 输出了一段内容,我看完觉得不错,手动复制下来。然后找到 Agent B 的谈天窗口,把内容粘贴进去,告诉它"从这个开始处理"。Agent A 输出的文件路径?我手动记在脑子里。Agent C 需要等 B 的结果?我等着,拿到了再手动转发。
这听起来很蠢,但这是真实的起点。在还没想清楚"Agent 之间怎么传数据"的时间,人就是唯一的消息总线。每个 Agent 只跟我对话,Agent 之间没有直接联系。 它好的地方:零设置,零开发,打开就能用。 它不好的地方:什么都靠我。一个流程跑下来,我累得半死。Agent 数量一多,我不断在几十个谈天窗口之间来回切换,经常忘记"这个 Agent 该知道那件事了"。
但当时没更好的办法,只能这样。
第一层:文件交互
觉得人工拷贝太累了,开始让 Agent 直接写文件。
Agent A 把结果写到文件里,Agent B 去读那个文件。比如我的随想记录员天天记录内容到固定路径,其他 Agent 去那个路径读取信息来做本身的事。 它好的地方:总算主动化了。人不用当传话筒了。 它不好的地方:太松散了。没有约束,没有约定,文件路径写错就崩,格式改了不知道,谁写了什么全靠自觉。Agent A 写完的文件,Agent B 如果正读到一半被覆盖了——你就等着看一篇半成品吧。
说实话这个阶段比力痛苦,每次 Agent 数量一多就手忙脚乱。但没办法,总得从某个地方开始。
第二层:Skill 固定路径
开始意识到光靠自觉不行,得立规矩。
给 Agent 配备 Skill,每个 Skill 定义好固定的目录结构和处理流程。比如学习的 Skill——天天固定路径写入学习笔记,编译知识的 Skill 按固定目录去获取和处理。文件名用脚本生成,不许 Agent 本身起名。V1、V2、V3 版本都保留,不覆盖,方便追溯。
"目录结构必须规范,用脚本约束 Agent 不让他多创建或少创建文件。文件版本管理 V1/V2/V3,旧版本保留不删除。" 它好的地方:开始有规矩了。路径稳定,格式统一,Agent 不再凭心情写文件。 它不好的地方:仍然是单向的。Agent B 不知道 Agent A 什么时间写完,只能定时轮询。没有流程管控——如果 Agent A 写到一半挂了,Agent B 读到的就是个脏数据。而且这种"写文件-读文件"的模式跑多了,目录会变得越来越深、越来越乱。
这个阶段能用,但不敢上规模。
第三层:API + 数据库
忍不下去了。一个人当消息总线,撑死也就能管五六个 Agent。写文件太脆弱,开始上正经底子设施。
文章稿件写到数据库,审稿 Agent 和发布 Agent 通过 API 去获取和处理。数据有了持久化,状态可以追踪,谁做了什么、做到哪一步,数据库里一查就有。 它好的地方:不再依赖文件系统的一致性,API 有明白的输入输出定义。 它不好的地方:跨 Agent 的协作还是缺乏统一编排。Agent A 调用 API 写完了,Agent B 怎么知道该开始了?要么轮询,要么加消息队列——都是点对点的连接,没有一张"总图"。一旦 Agent 数量从几个涨到十几个、几十个,这种点对点的连接就酿成了一团乱麻。
而且有一个更本质的题目:Agent 不能自审自查。A 本身写的代码,A 本身来审,等于没审。但如果没有统一的流转系统,"写完找谁审"靠 Agent 本身判定,它大概率会默认本身审本身。
第四层:工作流系统