writing
派工链路演进:从同步直投到事件式消费
一个任务怎么从指挥层交到执行层,这条路我走了三版。同步直投会超时丢任务,异步中转解决了丢但不解决堵,最后落到事件式消费——智能体一次只做一件事,调度判断交给插件,MCP 只当手。
三层架构搭起来之后,最先撞上的不是「智能体够不够聪明」,而是「任务怎么从一层交到另一层」。听起来简单——上面派、下面干——但真跑起来,这条路我走了三版才想明白。
我把这条路的演进叫做派工链路。它不是某个组件,是任务在指挥链里流动的方式。这一篇记它怎么从同步直投,走到异步中转,最后落到事件式消费。
第一版:同步直投
最早的直觉做法是同步直投:指挥层要派活,直接调执行层的接口,等它干完,拿结果回来。就像你打电话叫人办事,电话不挂,等他办完跟你汇报。
这个方式最简单,也最先出问题。
第一个问题是超时。执行层干一件事可能要几分钟、几十分钟,而调用方的连接撑不了那么久。连接一断,任务其实还在跑,但指挥层以为失败了——要么重复派一次,要么就这么丢了。我遇到过派单五次失败、但其实任务早就完成的故障:网关活着、LLM 也跑完了,死在「等回复」这一步的超时上。
第二个问题是阻塞。同步意味着指挥层派出去一个任务,就得占着一个「人」等。它没法同时派十个任务然后各自跑——因为每派一个都要挂在那儿等回音。指挥层本该是动脑子的,结果被拖在等回复上,干不了别的。
第三个问题是单点。直投意味着指挥层和执行层必须同时在线、互相能直接够到。执行层重启一下、网络抖一下,派单就失败。整条链路绑死在「双方都在线」这个前提上,太脆。
同步直投的本质问题,是它假设了「派出去就能立刻拿到结果」。但真实的多智能体协作不是这样——任务有长有短,执行层会忙会闲,网络会断会续。用一个要求「即时回应」的模型,去套一个「本来就不即时」的现实,必然拧巴。
第二版:异步中转
第二版换成异步中转,引入一个中间层(我叫它 MessageBus)。指挥层派活,不再直接够执行层,而是把任务写进中间层的收件箱,然后立刻返回——不等执行层干完。执行层自己去看收件箱、领任务、干完再把结果写回去。
这把前面三个问题都解了一半。
超时没了,因为指挥层写完就走,不占着连接等。阻塞没了,因为可以一口气往收件箱里写十个任务,执行层各自领各自的。单点也缓解了——消息持久化在中间层,执行层不在线时任务排队等着,上线了补推。
但异步中转带来一个新问题:谁来决定什么时候领、领哪个。
最早的解法是轮询——执行层隔几十秒去看一次收件箱有没有新任务。能跑,但蠢。它不管有没有活都去看,看了没活就空转;有急活也得分到下一次轮询才被领走。更麻烦的是,轮询本身是消耗——每次看一眼都是一次开销,智能体本该用来思考的注意力,被耗在「反复张望」上。
异步中转解决了「丢」和「堵」,但没解决「谁来调度」。它把任务可靠地送到了收件箱,可收件箱外面站着个不知道该什么时候伸手的人。
第三版:事件式消费
第三版是我想清楚的关键一步,我管它叫事件式消费,也叫「形态 c」。
核心变化是:不再让智能体自己去轮询收件箱,而是让一个平台插件来驱动。有任务进收件箱了,平台触发一个事件,把任务「喂」给智能体——智能体不需要张望,任务会自己来。
这里最关键的判断,是把「脑」和「手」分开:
- 调度判断归插件——什么时候唤醒、领哪个任务、按什么优先级,这些是平台插件(「脑」)干的事。它是确定性的、规则驱动的,不该消耗智能体的推理能力。
- 读写收件箱归 MCP——MCP 工具(「手」)只负责一件事:把收件箱里的任务读出来、把结果写回去。它不判断、不调度,纯粹是收发的手。
智能体本身呢?它被解放成「一次 turn 只做一件事」。平台把一个任务递到它面前,它就想这一件事、干完交差,下一个任务来了再干下一个。它不再背着「我得记得去轮询」「我得自己决定先干哪个」这些负担——这些都被平台和插件接走了。
为什么这个分法重要?因为它对应了一个真实组织的分工:调度是管理职能,执行是专业职能,两者不该混在一个人身上。 让一个会思考、会烧钱的智能体去反复轮询收件箱,就像让一个高级工程师天天盯着邮箱等活——大材小用,而且他迟早会漏。把调度交给一个不会累、不会漏的平台插件,把执行交给会思考的智能体,各干各擅长的。
这条路教会我的
派工链路这三版,背后是一条更深的线:把「可靠传输」和「智能调度」分开做。
第一版把它们混在一起——同步直投既负责传任务又负责等结果,结果两头都做不好。第二版把传输独立出来(MessageBus 负责可靠送达),但调度还赖在智能体身上(轮询)。第三版才彻底分开——传输归中间层、调度归插件、执行归智能体,三层各司其职。
这跟整个工作台的架构判断是一致的:机制皆可拆装,但职责边界不让渡。 传输、调度、执行,这三个职责一旦混在一个组件里,就会在某一点上互相拖累;拆开,让每个组件只干一件事,整条链路才稳。
还有一点:这三版不是我预先设计好的,是被真实故障逼出来的。第一版的超时丢任务,逼出第二版的异步持久化;第二版的轮询空转,逼出第三版的事件驱动。每一版都是上一版跑出问题之后的回应——这正是「底层先稳,上层后裹」「用实证触发升级,而不是用想象规划升级」的活样本。
派工链路现在停在第三版的方案上,代码还在落地。但路怎么走,已经想清楚了:任务流动的方式,要从「打电话等回音」变成「写信投邮筒」,再变成「有人按时把信递到你手上,你只管回」。