FIPA-ACL 遗产 本节摘要:在 MCP、在 A2A 之前,有过 FIPA-ACL。2000 年,IEEE 的智能物理Agent基金会(FIPA)批准了一套Agent通信语言——二十个施事语(performatives)、两种内容语言、一组交互协议(合同网、订阅/通知、请求-当)。它因本体(ontology)开销太重而在产业界淡出,但 LLM 多智能体的复兴正在悄悄重实现同样的思想:JSON 契约顶替了施事语,自然语言顶替了本体。本节认真读 FIPA-ACL,让你看清 2026 年各协议决策里哪些是「重新发明」、哪些是真创新、哪些老问题将被新一代规范重新踩一遍。读完本节,你能用一份「五问清单」审视任何新协议,而不被营销话术牵着走。
本节摘要:在 MCP、在 A2A 之前,有过 FIPA-ACL。2000 年,IEEE 的智能物理Agent基金会(FIPA)批准了一套Agent通信语言——二十个施事语(performatives)、两种内容语言、一组交互协议(合同网、订阅/通知、请求-当)。它因本体(ontology)开销太重而在产业界淡出,但 LLM 多智能体的复兴正在悄悄重实现同样的思想:JSON 契约顶替了施事语,自然语言顶替了本体。本节认真读 FIPA-ACL,让你看清 2026 年各协议决策里哪些是「重新发明」、哪些是真创新、哪些老问题将被新一代规范重新踩一遍。读完本节,你能用一份「五问清单」审视任何新协议,而不被营销话术牵着走。
阅读完本节,你应当能够:
2026 年的 Agent 协议图景拥挤:MCP 管工具、A2A 管 Agent 间通信、ACP 管企业审计、ANP 管去中心化信任、NLIP 管自然语言内容,外加 CA-MCP 与几十份研究提案。每个规范都自称「奠基性」。
诚实的解读是:它们大多在重新发现一条二十年前就画好的决策树。Austin(1962)与 Searle(1969)的言语行为理论告诉我们「话语即行动」;KQML(1993)把它变成线协议;FIPA-ACL(2000)产出标准化参考——二十个施事语、SL0/SL1 内容语言、合同网与订阅-通知等交互协议。JADE 与 JACK 是 Java 参考平台。这套努力约在 2010 年衰落,因为本体开销太重、Web 赢了栈。
当你看 MCP 的 tools/call、A2A 的任务生命周期、或 CA-MCP 的共享上下文存储,你看到的都是 FIPA 当年决策的更软、JSON 原生的翻版。懂这段遗产能告诉你两件事:哪些「创新」其实是重发明,哪些老失败模式新规范还会重新踩到。
Austin 注意到有些句子不是在描述世界,而是在改变世界:「我承诺」「我请求」「我宣布」。他称之为施事话语(performative utterance)。Searle 形式化为五类:断言类(assertive)、指令类(directive)、承诺类(commissive)、表达类(expressive)、宣告类(declarative)。KQML 把它工程化:一条消息 = 施事语(动作)+ 内容(关于什么)。FIPA-ACL 清理了 KQML 的缺口,标准化为约二十个施事语。
| 施事语 | 意图 |
|---|---|
inform |
我告诉你 P 为真 |
request |
我请你做 X |
query-if |
P 是否为真? |
query-ref |
X 的值是什么? |
propose |
我提议我们做 X |
accept-proposal / reject-proposal |
我接受/拒绝该提议 |
agree / refuse |
我同意/拒绝做 X |
confirm / disconfirm |
我确认/否认 P |
not-understood |
你的消息没解析出来 |
cfp |
就 X 招标 |
subscribe |
X 变化时通知我 |
cancel |
取消进行中的 X |
failure |
我试了 X 但失败了 |
重点不在背全表,而在于:每一个都对应着 LLM 协议最终会重新加回来的某个原语。
(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 协议加重试、线程化、本体时都要重新发明的东西。
content。达成本体共识是数年的标准化过程;Web 直接用 HTTP + JSON。把 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。谁也不是相对另一个的革命——它们是同一设计的不同权衡。
没有共享本体,Agent 从自然语言内容里推断含义。2026 年被记录的失败模式是语义漂移:两个 Agent 用同一个词(如「customer」)指代微妙不同的概念,接收方按错误理解行动,而没有任何 schema 校验器能抓到。FIPA 的本体要求本会在解析期就拒收这条消息。
⚠️ 这就是「协调难点」的典型形态——不是技术实现难,而是语义对齐难。本体的价值正在于此:它把语义冲突从「运行时悄悄出错」提前到「解析时显式失败」。
原课程 code/main.py 用 Python 标准库实现一个 FIPA-ACL 翻译器,演示每条 MCP/A2A 消息如何归约到同样的七个字段。核心是一个消息信封与一个合同网玩具演示。
def encode_acl(performative, sender, receiver, content, language="JSON", ontology=None, conv_id=None, reply_with=None): msg = { "performative": performative, "sender": sender, "receiver": receiver, "content": content, "language": language, } if ontology: msg["ontology"] = ontology if conv_id: msg["conversation-id"] = conv_id if reply_with: msg["reply-with"] = reply_with return msg def to_mcp_tools_call(acl_msg): # FIPA request → MCP tools/call return {"jsonrpc": "2.0", "method": "tools/call", "params": acl_msg["content"], "id": acl_msg.get("conversation-id")}
一个经理向三个投标者招标,用 cfp / propose / accept-proposal / reject-proposal 跑一轮:
def contract_net(manager, bidders, task): trace = [] cfp = encode_acl("cfp", manager, bidders, task, conv_id="c42") trace.append(cfp) proposals = [] for b in bidders: bid = {"bidder": b, "price": fake_bid(task)} # propose proposals.append(encode_acl("propose", b, manager, bid, conv_id="c42")) trace += proposals winner = min(proposals, key=lambda p: p["content"]["price"]) trace.append(encode_acl("accept-proposal", manager, winner["sender"], winner["content"], conv_id="c42")) for p in proposals: if p is not winner: trace.append(encode_acl("reject-proposal", manager, p["sender"], p["content"], conv_id="c42")) return trace, winner
设计要点:合同网是任务市场的原型——它把「谁来做、做多便宜」变成一个显式协议而非隐式编排。第 16 节的协商与第 21 节的 Agent 经济都建筑其上。
| 2026 规范 | FIPA 类比 | 保留 | 放弃 |
|---|---|---|---|
MCP tools/call |
request |
显式意图、关联 id | 形式语义、本体 |
MCP resources/read |
query-ref |
显式意图、关联 id | 形式语义 |
| A2A 任务生命周期 | 合同网 + 请求-当 | 异步生命周期、状态迁移 | 形式完备性保证 |
| A2A 流式事件 | 订阅/通知 | 异步推送 | 类型化谓词订阅 |
| CA-MCP 共享上下文 | 黑板模型(Hayes-Roth 1985) | 多写者共享内存 | 逻辑一致性模型 |
| NLIP | 自然语言内容 | LLM 原生 | schema |
读这张表自上而下,规律是:保留结构原语、丢掉形式化、让 LLM 去糊上语义的缝隙。
值得搬到 LLM 系统的三个 FIPA 交互协议:
cfp,投标者 propose,经理 accept/reject。这是任务市场模式(见第 16、21 节)。subscribe,发布者在主题变化时发 inform。这就是 2026 年的每个事件总线。outputs/skill-fipa-mapper.md 是一个技能:读取任何 Agent 协议规范,产出其 FIPA-ACL 映射。采用新协议前先用它回答一句:「这到底是新东西,还是带 JSON 语法的 inform?」
五问清单(别把 FIPA 搬回来,把它的清单搬回来):
把任何新协议进生产前,先为这五问写下答案。
code/main.py,观察往返编解码。识别 tools/call、resources/read、A2A 任务创建各自对应哪个 FIPA 施事语。cancel 施事语,让经理能在投标中途撤回任务。cancel 解决了什么单靠重试解决不了的失败场景?request 施事语的 content 字段设计一个最小 JSON Schema。它给了你什么纯自然语言给不了的?代价又是什么?下一节,我们进入具体的通信协议设计——如何为多智能体选择消息格式、传输层与会话语义,把本节的施事语落到可部署的工程层。