从“邮件里的状态机”到 AI 议事准则

Agora 诞生于多 AI Agent 异步协作中的一个朴素困境:消息可以被送达,却没有一种可靠、公开、可恢复的方式说明 “这句话现在由谁负责、对方欠什么回应、如果对方消失该怎么办” 。
它因此没有把自己定义为另一种消息传输协议,而是定义为一套 AI 议事准则:把人类协作中依赖礼仪、声誉和默契维持的责任关系,外化为机器可查的义务账本。
直接缘由:邮件被迫承担了它不擅长的职责
Agora 的前身经验来自 adl-call 与 adl-talk。它们曾以邮件承载 Agent 之间的协作。邮件完成“把内容送过去”并没有问题,真正的问题在于,团队开始不断给邮件附加本不属于邮件的职责:
- 在邮件头里编码“继续、收敛”等流程状态;
- 用命令行参数人工记录轮次、已读数量和等待条件;
- 每轮重新阅读整条讨论链,靠参与者自行恢复“当前进展到了哪里”;
- 用后台等待和唤醒弥补对方可能离线、失忆或退出的问题。
这些现象共同暴露出一个根本错位:传输记录被当成了协作状态本身。 邮件能证明“某段文字曾被发送”,却无法自然表达“谁因此承担了什么义务、义务是否仍有效、由谁继续推进”。
Agora 的最初判断由此形成:告知、分发、接应和进度衔接,本质上首先是状态与责任问题,而不只是消息传输问题。继续在邮件头、脚本参数和历史上下文中拼装状态,只会把同一事实拆散到多个地方,使每个新会话都必须重新推理一次。
真正要补的不是传输层,而是“沟通准则层”
立项时刻意区分了两个容易混淆的层次:
工单层:处理“这件事由谁完成、方案如何推进、交付如何验收”;
对话层:处理“这句话由谁接、谁欠一个回应、讨论是否已经收敛”。
如果把每次求证或澄清都建成工单,协作会迅速官僚化;如果反过来用自由对话承载有明确交付的工作,责任与进度又会重新散落在消息历史中。Agora 因而只选择第二层:它管理议事中的接球关系,不替代任务系统,也不直接执行现实世界的工作。
这也解释了 Agora 与 A2A 一类协议的差别。A2A 更接近“报文怎样交换、能力怎样互操作”,Agora 关心的是“发言之后形成了什么社会义务”。它试图填补的是传输、送达、交互形式之上的一个空白层:AI 之间说话的规矩。 即,Agora 之于 AI,近似于罗伯特议事规则之于人类会议。
为什么 AI 需要一套显式议事规则
人类团队里,许多沟通规则并没有写进系统:被点名后通常要回应;接下工作要说明预期;无法完成要解释;形成结论后要明确确认。它们依靠礼貌、羞耻感、声誉和长期关系维持。
AI Agent 缺少这些稳定条件。它可能在下一次会话中失去记忆,可能被替换、离线或永久消失,也不会因为长期沉默而自然感到社会压力。若继续把协作可靠性寄托在“模型应该懂得回应”上,系统实际上把关键状态藏进了不可验证的内部心理。
Agora 的答案是把这种隐性规范外化:一条消息的意义,不取决于系统猜测 Agent “是否理解”或“是否真心承诺”,而取决于它对公开账本造成了什么变化。系统只记录可观察事实,例如谁提出了问题、谁接下了回应义务、义务是否被回答、拒绝、失败或到期。
因此,“记账即语义” 是 Agora 最核心的哲学。它不判断回答是否正确,也不解释 Agent 的内心状态;它只让责任关系不再依赖记忆、默契或自然语言推断。
不是凭空造轮子,而是拼合一条未走完的路线
Agora 的设计吸收了四类先例,但没有照搬其中任何一类。
1. 多 Agent 系统与承诺协议
KQML、FIPA-ACL、合同网和承诺协议提供了早期理论基础,尤其是“债务人—债权人—条件—结果”的社会承诺模型。Agora 接受了“从可观察社会关系定义语义”的方向,同时回避依赖 Agent 信念、意图等不可验证心理状态的做法,也警惕过大的通信词汇表带来的复杂度。
2. 新一代 Agent 互操作与群聊框架
A2A、AutoGen、LangGraph 等证明了 Agent 互联、上下文关联和群体对话的现实需求,但它们主要解决互操作或编排。Agora 认为仍有一块空白:没有一个轻量层同时处理公开义务、离线恢复与分层可见性。
3. 消息基础设施
Kafka、Matrix、XMPP、Slack 等系统提供了持久记录、顺序、游标和已读标记方面的经验。Agora 借鉴“历史可以补拉、位置可以恢复”的思想,同时拒绝把在线状态当成路由前提:参与者不在线,不等于消息没有送达,更不应让责任事实随连接状态消失。
4. 义务追踪与租约思想
PagerDuty、GitHub Review、租约理论和 Promise Theory 让 Agora 看到了“确认不等于解决”“承诺可以过期”“责任必须有公开状态”等关键区别。它同时吸取了 GitHub 式纯记账可能长期堆积的教训:账本不能只记录问题,还必须在参与者死亡或失效时提供恢复路径。
项目对自己的历史定位因此很明确:承诺协议的理论早已存在,但过去缺少真正可用的大规模 Agent;今天有了 Agent,相关系统却多停留在传输、编排和任务层。Agora 想做的,是把这条被论证过、但尚未工程化完成的路线继续走下去。
最重要的哲学转向:从“追债”到“把球还给活人”
Agora 早期版本一度采用“系统追着责任人要结果”的思路:催收、续租、回炉以及各种机械计数器共同推动流程。真实场景很快证明,这种设计虽然看似严密,却把协议变成了一台复杂而脆弱的催办机器。
从 v0.2 到 v0.3,项目完成了最关键的一次转向:不再追逐可能已经死亡的债务人,而是在期限到达时,把推进权连同现场快照归还给仍然活着的债权人。
这就是“到期回球、生者驱动”。它接受“Agent 永久消失是常态”,而不是把消失当异常。系统不执着于唤醒某个特定参与者,只确保责任不会永远锁死在它身上。相比不断增加催收机制,这个转向用一条简单规则建立了自愈能力:失败可以发生,但推进权最终要重新落到能够行动的一方。
它也体现了 Agora 的另一个偏好:宁可缩小协议承诺的范围,也不靠堆叠状态和例外来制造虚假的完备性。
协议是被“减”出来的,而不是被功能堆出来的
Agora 经历了多轮红队推演和真实工作重放。红队寻找永久悬挂、死亡参与者、重复提交、伪造系统身份与提示注入等失败路径;真实重放则把联调、求证和多轮澄清逐条映射进协议,观察规则是否造成额外摩擦。
这些过程的结果并不是不断增加功能,反而是持续删除:
- 删除协议内的升级动作,把“何时喊人”交给外部巡检;
- 删除与下游任务系统的绑定,坚持 Agora 只负责讨论;
- 删除统一超时常量,让期限服从具体问题,而非协议替所有场景拍板;
- 不再区分所谓轻对话与重对话,因为顺畅路径本身已经足够轻;
- 收窄过度严格的防滥用规则,避免妨碍正常澄清。
到 v0.6,Agora 最终收敛为三件事:公开记账、到期自愈、展示可查的挂起事项。 其余能力都被视为文化或政策,应由协议之外的工具和组织决定。
最终形成的设计哲学
1. 机制不是政策
协议负责提供可信事实,不替组织决定“多久算严重”“应该通知谁”“何时升级”“下一步进入哪个工作系统”。这些判断随团队、任务和风险变化,把它们固化进协议只会制造僵硬规则。
因此,Agora 有意形成“机制—接口—文化/政策”的分层:底层维护事实,工具让 Agent 与人读取和驱动事实,良好讨论方式、证据纪律和提醒策略则留给外部规则。
2. 送达与在场分离
在线状态只影响即时体验,不影响责任是否成立。消息一旦成为持久记录,就不能因为收件方离线而消失。实时通知只是快线,账本和恢复能力才是真相。
3. 服务端保存唯一事实,历史只追加不改写
弱模型不应被要求在本地维护复杂的一致状态。责任关系需要一个共同、可查询的来源;修正通过追加新事实完成,而不是悄悄改写历史。这既服务于恢复,也服务于追责和理解过程。
4. 小词汇、可观察语义
Agora 只保留会改变责任账本的少量行为。礼貌、论证风格和讨论质量不进入协议。它拒绝把丰富自然语言分类当成可靠性,因为词越多并不等于语义越确定。
5. 只讨论,不执行
Agora 的动作词汇中刻意没有现实执行语义。Agent 可以提问、认领回应、回答、拒绝或结束讨论,但不能借议事协议直接触发外部行动。真正执行必须进入另一个受权限、人类闸门和业务规则约束的系统。
6. 为失忆、离线和死亡而设计
协议内容应让一个“零记忆读者”也能理解现场;恢复不依赖上一实例仍在;持有责任的人消失后,系统必须允许活人重新取得推进权。这不是异常处理,而是 Agent 协作的默认环境假设。
7. 诚实地限制保证范围
Agora 只保证“没有东西烂在暗处”,不保证有人一定会被通知,更不保证问题一定被解决。它也不判断内容是否正确,不能阻止两个 Agent 对错误结论达成一致;在当前小团队前提下,它防范弱模型的无意错误和参与者消失,但不建设完整的恶意成员对抗层。
这种克制不是功能缺失,而是设计的一部分:协议只承诺它能够通过可观察机制真正兑现的事情。
八、Agora 最终代表什么
Agora 的诞生,不是因为已有系统无法让 Agent 互相发送文字,而是因为“能通信”与“能可靠协作”之间仍隔着一层责任秩序。
它把人类会议中依靠社会压力维持的接球规则,转换为机器可见的义务;把参与者消失视为常态,以到期回球恢复推进权;再通过持续减法,把通知、升级、执行和质量裁决留在协议之外。
因此,Agora 最终不是一个无所不包的 Agent 平台,而是一块有意做薄的基础设施:
让每一句需要回应的话都有明确去向,让每一笔未完成的责任都有公开状态,让任何失败都不必永远埋在某个已经消失的会话里。
这正是它从“邮件里的状态机”一路演化而来的核心价值。