FIPA-ACL 与言语行为理论的遗产
在 MCP 之前、在 A2A 之前,先有了 FIPA-ACL。2000 年,IEEE 的智能物理 agent 基金会(Foundation for Intelligent Physical Agents)批准了一套 agent 通信语言,带二十个 performative、两种内容语言,以及一套交互协议——contract net、subscribe/notify、request-when。它在工业界淡出,是因为本体(ontology)开销对当时的 web 太重,但 LLM 带来的多 agent 系统复兴正在悄悄重新实现同一批想法,只是丢掉了形式语义:JSON 契约顶替了 performative,自然语言顶替了本体。本课认真读一遍 FIPA-ACL,好让你看清 2026 年的哪些协议决策是旧瓶装新酒、哪些是真创新,以及当前这波浪潮会在哪些地方重新踩中 2000 年代早已解决的坑。
类型: Learn 语言: Python(标准库) 前置要求: Phase 16 · 01(为什么要用多 agent) 预计时间: ~60 分钟
问题背景
2026 年的 agent 协议版图很热闹:MCP 管工具、A2A 管 agent、ACP 管企业审计、ANP 管去中心化信任、NLIP 管自然语言内容,再加 CA-MCP 和二十多个研究提案。每个规范都自称是奠基性的。
老实说,它们多数都在重新发现一棵非常具体的、二十年前就画好的决策树。Austin(1962)和 Searle(1969)的言语行为理论给了我们「话语即行动」。KQML(1993)把它变成了一套线协议。FIPA-ACL(2000 年批准)拿出了参考标准化方案:二十个 performative、内容语言 SL0/SL1、用于 contract-net 和 subscribe-notify 的交互协议。JADE 和 JACK 是 Java 参考平台。这套东西在 2010 年前后淡出,因为本体开销太重,而 web 正在赢。
当你看 MCP 的 tools/call、A2A 的任务生命周期、或 CA-MCP 的共享上下文存储时,你看到的是一份更柔和、JSON 原生的 FIPA 决策翻版。了解这段渊源能告诉你两件事:哪些新「创新」其实是重新发明,以及新规范会重新踩中哪些旧的故障模式。
核心概念
一段话讲清言语行为
Austin 注意到,有些句子并不描述世界——它们改变世界。「我承诺。」「我请求。」「我宣布。」他把这些叫作施为话语(performative utterance)。Searle 把它形式化成五类:断言型、指令型、承诺型、表达型、宣告型。KQML(Finin 等,1993)把这套东西落地到软件 agent 上:一条消息 = 一个 performative(行动)加内容(行动针对什么)。FIPA-ACL 补齐了 KQML 的缺口,围绕二十个 performative 做了标准化。
FIPA 的二十个 performative(部分列举)
| Performative | 意图 |
|---|---|
inform | 「我告诉你 P 为真」 |
request | 「我请你做 X」 |
query-if | 「P 为真吗?」 |
query-ref | 「X 的值是多少?」 |
propose | 「我提议我们做 X」 |
accept-proposal | 「我接受这个提议」 |
reject-proposal | 「我拒绝这个提议」 |
agree | 「我同意做 X」 |
refuse | 「我拒绝做 X」 |
confirm | 「我确认 P 为真」 |
disconfirm | 「我否认 P」 |
not-understood | 「你的消息没解析成功」 |
cfp | 「就 X 征集提案」 |
subscribe | 「X 变化时通知我」 |
cancel | 「取消进行中的 X」 |
failure | 「我试了 X,失败了」 |
完整清单在 fipa00037.pdf(FIPA ACL Message Structure)里。重点不是把它背下来——重点是这里每一个都对应着某个 LLM 协议最终会重新加回去的原语。
标准的 FIPA-ACL 消息
(inform
:sender agent1@platform
:receiver agent2@platform
:content "((price IBM 83))"
:language SL0
:ontology finance
:protocol fipa-request
:conversation-id conv-42
:reply-with msg-17
)七个字段承载协议信封,一个字段(content)承载载荷。其余字段,恰恰就是你每次往 JSON 协议上硬塞重试、消息线程、本体时重新发明的那些东西。
两个遗留平台
JADE(Java Agent DEvelopment framework,1999–2020 年代)是用得最多的 FIPA 兼容运行时。agent 继承一个基类、交换 ACL 消息、在容器里运行、用「behavior」来协调。它附带的交互协议库里有 contract-net、subscribe-notify、request-when 和 propose-accept。
JACK(Agent Oriented Software 公司,商业产品)强调在 FIPA 消息之上做 BDI(Belief-Desire-Intention,信念-愿望-意图)推理。更形式化,采用率更低。
两者都在 web 技术栈吞掉多 agent 用例后衰落了。MCP 和 A2A 就是 2026 年的运行时「容器」。
FIPA 为何淡出
- 本体开销。 FIPA 需要一份共享本体才能解析
content。在本体上达成一致是一个长达数年的标准化过程。而 web 直接用了 HTTP + JSON。 - 没人用的形式语义。 SL(Semantic Language,语义语言)给出了严格的真值条件,但大多数生产系统用的是自由格式内容,干脆无视那套形式主义。
- 工具锁定。 JADE 只支持 Java,JACK 是商业产品。多语言团队绕开了这两个。
- 互联网赢了整个技术栈。 REST、然后是 JSON-RPC、然后是 gRPC,替掉了 ACL 的传输层。
LLM 复兴就是 FIPA 的简化版
拿一个 FIPA request 和一个 MCP tools/call 对比:
(request {
:sender agent1 "jsonrpc": "2.0",
:receiver tool-server "method": "tools/call",
:content "(lookup stock IBM)" "params": {"name":"lookup_stock",
:ontology finance "arguments":{"symbol":"IBM"}},
:conversation-id c42 "id": 42
) }信封相同,语法不同。两者都承载:谁、发给谁、意图、载荷、关联 id。谁也没比谁更革命——它们只是同一套设计上的不同取舍。
Liu 等人 2025 年的综述(《A Survey of Agent Interoperability Protocols: MCP, ACP, A2A, ANP》,arXiv:2505.02279)把这条血脉说得很明白:MCP 对应工具调用类言语行为,A2A 对应 agent 对等类言语行为,ACP 对应审计追踪类言语行为,ANP 对应去中心化身份扩展。新规范都是带 JSON 语法、语义更松的 ACL 后裔。
把这个取舍说白了
FIPA 给了你、而现代规范丢掉的:
- 形式语义——你能证明
inform蕴含「发送方相信该内容」。 - 一份标准的 performative 目录——你不必反复争论「我们要不要加个
cancel?」。 - 几十年的交互协议模式——contract-net、subscribe-notify、propose-accept——都带有已知的正确性属性。
现代规范给了你、而 FIPA 没有的:
- 与每种现代工具兼容的 JSON 原生载荷。
- LLM 无需手写本体就能解读的自然语言内容。
- web 技术栈传输(HTTP、SSE、WebSocket)。
- 通过实时 MCP
server/discover与 A2A Agent Card 实现的能力发现。
用更松的意图语义换更容易的实现。这就是那笔交易。
值得移植的交互协议
FIPA 附带了约 15 个交互协议。其中三个值得带进 LLM 多 agent 系统:
- 合同网协议(Contract Net Protocol,CNP)。 manager 发出
cfp(征集提案);竞标者用propose回应;manager 接受/拒绝。这是标准的任务市场模式(Phase 16 · 16 谈判)。 - Subscribe/Notify。 订阅方发
subscribe;发布方在主题变化时发inform。这就是 2026 年的每一条事件总线。 - Request-When。 「当条件 Y 成立时做 X。」带前置条件的延迟动作。它在 2026 年的对应物是持久化工作流引擎里的延迟任务(Phase 16 · 22 生产环境扩展)。
每一个都能干净地映射到现代消息队列、HTTP + 轮询、或 SSE 流式推送上。
丢掉本体后会崩什么
没有共享本体时,agent 从自然语言内容里推断含义。2026 年记录在案的故障模式是语义漂移(semantic drift):两个 agent 用同一个词("customer")指代略有差别的概念,接收方 agent 按错误的解读行动,没有任何 schema 校验器能捕到它。FIPA 的本体要求本会在解析阶段就拒掉这条消息。
不上完整本体的缓解手段:
- 给
content加 JSON Schema——在线协议层拒掉结构错误。 - 类型化产物(A2A)——拒掉错误的模态。
- 信封里写明确的 performative——即使内容是自然语言,意图也无歧义。
把 2026 年的规范映射到言语行为遗产
| 现代规范 | FIPA 对应物 | 它保留了什么 | 它丢掉了什么 |
|---|---|---|---|
MCP tools/call | request | 显式意图、关联 id | 形式语义、本体 |
MCP resources/read | query-ref | 显式意图、关联 id | 形式语义 |
| A2A 任务生命周期 | contract-net + request-when | 异步生命周期、状态转移 | 形式完备性保证 |
| A2A 流式事件 | subscribe/notify | 异步推送 | 带类型谓词的订阅 |
| CA-MCP 共享上下文 | 黑板(Hayes-Roth 1985) | 多写者共享内存 | 逻辑一致性模型 |
| NLIP | 自然语言内容 | LLM 原生 | schema |
从上往下读这张表,规律就是:保留结构原语、丢掉形式主义、让 LLM 把歧义糊弄过去。
sw-contract-net动手构建
code/main.py 用纯标准库实现了一个 FIPA-ACL 转换器。它编码和解码标准的 ACL 信封,并展示每一种 MCP / A2A 消息形态如何归约到同样的七个字段。这个演示会:
- 把五条 MCP 风格和 A2A 风格的消息编码成 FIPA-ACL。
- 把 FIPA-ACL 解码回现代等价形式。
- 用
cfp、propose、accept-proposal、reject-proposal在一个 manager 和三个竞标者之间跑一轮玩具版合同网谈判。
运行:
python3 code/main.py输出是一段并排的追踪记录,把每条现代消息同时以 2026 年的 JSON 形态和 FIPA-ACL 形态展示,再跑一遍合同网竞标的往返编解码。同样的协议原语在往返中幸存下来,变的只有语法。
实际使用
outputs/skill-fipa-mapper.md 是一个 skill,它读取任意一份 agent 协议规范,产出对应的 FIPA-ACL 映射。在采用一个新协议之前用它来回答:「这是真的新东西,还是带 JSON 语法的 inform?」
拿去用
别把 FIPA-ACL 请回来。把它的检查清单请回来:
- 每条消息的意图原语(performative)是什么?
- 有没有用于请求-响应和取消的关联 id?
- 有没有明确的内容语言(JSON-RPC、纯文本、结构化类型产物)?
- 交互协议是不是一等公民,还是你又在从头重新实现 contract-net?
- 两个 agent 对内容含义产生分歧时(语义漂移)会怎样?
在把任何新协议推上生产之前,先把这五个问题写进文档。
练习
- 跑
code/main.py。观察往返编解码。指出tools/call、resources/read和 A2A 任务创建分别对应哪个 FIPA performative。 - 给合同网演示加一个
cancelperformative,让 manager 能在竞标进行到一半时撤回任务。cancel解决了一个单靠重试解决不了的什么故障场景? - 读 FIPA ACL Message Structure(http://www.fipa.org/specs/fipa00037/)第 4.1–4.3 节。挑一个本课没覆盖的 performative,描述它的现代 JSON-RPC 对应物。
- 读 Liu 等人,arXiv:2505.02279。针对 MCP、A2A、ACP、ANP 各自,列出它们保留和丢掉的 FIPA performative 家族。
- 为你自己系统里
requestperformative 的content字段设计一份最小 JSON-Schema。这份 schema 给了你纯自然语言给不了的什么东西,又付出了什么代价?
关键术语
| 术语 | 大家嘴上怎么说 | 它实际是什么意思 |
|---|---|---|
| Speech act | 「一句会做事的话」 | Austin/Searle:话语即行动。ACL 的理论祖宗。 |
| FIPA | 「那个老旧的 XML 玩意儿」 | IEEE 智能物理 agent 基金会。2000 年标准化了 ACL。 |
| ACL | 「Agent 通信语言」 | FIPA 的信封格式:performative + content + 元数据。 |
| Performative | 「那个动词」 | 一条消息的意图类别:inform、request、propose、cfp 等。 |
| KQML | 「FIPA 的前身」 | Knowledge Query and Manipulation Language(1993)。更简单、更窄。 |
| Ontology | 「共享词汇表」 | 对内容语言所谈概念的形式化定义。 |
| SL0 / SL1 | 「FIPA 内容语言」 | Semantic Language 的 0 级和 1 级——形式化内容语言家族。 |
| Contract Net | 「任务市场」 | manager 发 cfp;竞标者 propose;manager 接受。标准的交互协议。 |
| Interaction protocol | 「消息的模式」 | 一串带已知正确性的 performative 序列:request-when、subscribe-notify 等。 |
延伸阅读
- Liu et al. — A Survey of Agent Interoperability Protocols: MCP, ACP, A2A, ANP —— 把现代规范连回 FIPA 遗产的标志性 2025 综述
- FIPA ACL Message Structure Specification (fipa00037) —— 2000 年批准的信封格式
- FIPA Communicative Act Library Specification (fipa00037) —— 完整的 performative 目录
- MCP specification 2026-07-28 —— 当前无状态的
request/query-ref现代工具调用等价物 - A2A specification —— contract-net 和 subscribe-notify 的现代 agent 对等等价物