系列名称:意图即承诺,智能体即社会——自主性的第一个可计算答案
篇号:第 4 篇 / 共 11 篇 主题分类:历史记述 前置阅读:总览与阅读路线 阅读时间:约 11 分钟
合同网:1980 年,任务分配第一次被写成一份合同
如果一个网络里没有老板,没有中央调度器、没有全局数据库,谁来决定哪个节点干哪件活?1980 年,Reid G. Smith 在博士论文《A Framework for Distributed Problem Solving》里给出了一个出人意料的答案:让任务分配走一遍合同流程smith1980。次年 5 月,他与 MIT AI Lab 的 Randall Davis 把这一思想写成 MIT AI Memo No. 624《Negotiation as a Metaphor for Distributed Problem Solving》,1983 年再以同题论文刊于《Artificial Intelligence》。今天所说的“合同网协议”(Contract Net Protocol),就诞生于这条 1980—1983 的出版链。
Memo 624 给分布式问题求解下的定义,至今仍是这个领域的奠基表述:
“the cooperative solution of problems by a decentralized and loosely coupled collection of problem solvers” ——由分散且松耦合的问题求解器集合进行的合作解题 memo624
论文随即划出本质约束:”there is neither global control nor global data storage”(既无全局控制,亦无全局数据存储)memo624。这条线划得极清:Logic Theorist 是单一推理引擎,STRIPS 是单一规划器,MYCIN 是单一诊断系统,它们都有全局控制和全局存储;合同网第一次把控制与数据分布到网络节点上,再用一套协议协调节点间行为。而全部机关都藏在封面摘要的一句话里:
“Task distribution is viewed as an interactive process… This discussion is the origin of the negotiation metaphor: Task distribution is viewed as a form of contract negotiation.” ——任务分布被视为一个交互过程……这一讨论就是协商隐喻的起源:任务分布被视为合同协商的一种形式 memo624-p1
隐喻的力度在于:它把任务分配当成一个社会过程,而非调度问题(谁有资源、怎么最优分配)——有任务的人发招标,有能力的人评估兴趣、交投标,招标者裁决中标,双方立约。这是一套有协议语义的社会交互,而非数学优化。
编者注:本文精读的存档是 Memo 624(1981 年 5 月技术报告版),非 1983 年 AIJ 期刊版;两者章节结构有差异,文中页码均按 memo 页码标注,期刊版独有的内容会单独说明。
五步走完一份合同:招标、投标、中标、报告、终止
协议本体在 Memo 624 第 7.3 节(p15-16):一次任务分配由五种消息串成:招标(task announcement)、投标(bid)、中标(award)、报告(report)、终止(termination)memo624-p15。整条流程可以这样看:

图里最要紧的是:两道关口各由一方把守,节点过不了自己的门槛就不投标,管理者看不中投标就不中标。招标消息也不是一句“有人要干活”,第 7.4 节(p20)规定了四个主槽位:资格判据(满足什么条件才有权投标)、任务抽象(让节点能给多个在招任务排序)、投标规范(规定投标长什么样、便于横向比较)、到期时间memo624-p20。论文自己的例子是一份傅里叶变换招标:
TASK TYPE: FOURIER-TRANSFORM
NUMBER POINTS: 1024
ELIGIBILITY: MUST-HAVE FFTBOX
BID SPECIFICATION: COMPLETION-TIME
EXPIRATION: 29 1645Z NOV 1980
投标则以节点能力自述回应:有什么硬件、什么传感器;节点间公共语言建立在“属性-对象-值”三元组之上memo624-p20。表示简陋得惊人,却撑起了一个可扩展的市场。
匹配不是一次模式匹配,而是两轮各自独立的决策。第一轮是节点自评,即节点”evaluate their own level of interest in each task with respect to their specialized resources”,结合自己的专用资源评估兴趣水平,够高才投标。第二轮是管理者裁决,”using a task-specific bid evaluation procedure”,用任务特定的投标评估程序选出中标者memo624-p15。在我们的复现里(完整代码在 ../contract-net-reproduction/),这两轮各是几行代码:
def evaluate_announcement(self, ann):
"""任务评估程序 (p15)——节点从自己的视角评估"""
if self.busy:
return None
raw_cap = self.capability.get(ann.content["task_id"], 0.0)
if raw_cap >= self.threshold: # 兴趣水平超过门槛才投标
return Bid(sender=self.name, recipient=ann.sender,
task_id=ann.content["task_id"], capability=raw_cap)
return None
自评完全站在节点自己的视角:查自己的能力值、比自己的门槛、忙则弃权。裁决则站在管理者的视角:
def evaluate_bids(self, task_id):
"""投标评估程序 (p15)——管理者裁决"""
bids = self.received_bids.get(task_id, [])
if not bids:
return None
best_bid = max(bids, key=lambda b: b.content.get("capability", 0))
return Award(sender=self.name, recipient=best_bid.sender, task_id=task_id)
注意那行 max:贪心取最高能力值,它是每一轮的局部最优解,也是后文囚徒困境的全部根源。两轮评估各由不同方持有、各自独立决策,这正是论文所说合同的本质——相互选择(mutual selection):”establishing a contract is a process of mutual selection… Both parties to the agreement have evaluated the information supplied by the other”(立约是相互选择的过程,双方都评估了对方提供的信息)memo624-p15。
同样反直觉的是:管理者和承包者只是角色,并非固定的节点类型——”Individual nodes are not designated a priori as managers or contractors; these are only roles, and any node can take on either role dynamically”(节点不被先验指定,任何节点可动态承担任一角色)memo624-p15。承包者执行中还能分解子任务、向下转包:它一边是上一份合同的承包者,一边是新招标的管理者。合同逐层转包下去,长成一棵合同树;终止消息也沿树传播——总包解约,分包及其二级分包一并终止:

这张树形图说明合同网的“网”不在拓扑而在角色:任何节点都同时活在多份合同里,时而甲方、时而乙方。论文还为这套消息定了一条近乎语言哲学的规矩(p20)memo624-p20:
“It is useful to adopt the perspective that the messages are statements in a language, rather than, say, patterns to be matched.” ——把消息视为语言中的语句、而非待匹配的模式,是有用的视角
消息不是触发器(收到 X 就做 Y),而是可解析、可推理、可选择性回应的语句。模式匹配是二值的,语句理解是连续的:节点可以评估一条消息与自身状态的相关性。由此带来惊人的可扩展性:”new nodes can simply be added to the existing collection; they will find their own place in the scheme of things by listening to task announcements, issuing bids”,新节点入网无须任何人指派,听招标、自评、投标,自己找到自己的位置memo624-p20。论文第 9 节(p33)最后把整套机制放进一个漂亮的三分法memo624-p33:
“if the caller alone selects, it’s invocation; if the respondent alone selects, it’s a blackboard; and if both select, it’s negotiation.” ——若只有调用者选择,是过程调用;若只有应答者选择,是黑板;若双方都选择,是协商。
子程序调用与黑板由此被重释为协商的退化形式:前者调用者单方选,后者应答者单方选,只有合同网让双方各持选择权。三种看似不相关的架构被统一进一个谱系。这也顺手解释了协商为什么最贵:信息双向、评估局部、选择对称。
让协议跑起来:14 条消息完成一次匹配
复现仓搭了个最小市场:6 个节点,Node-0 与 Node-1 各发布一个任务,其余 4 个节点作为潜在承包者评估、投标。协议在第一轮(t=0)就完成了全部匹配,总消息数 14 条:
| 阶段 | 消息类型 | 数量 | 说明 |
|---|---|---|---|
| 招标 | TaskAnnouncement | 2 | 两位管理者各发布一个任务 |
| 投标 | Bid | 8 | 4 个承包者各对 2 个任务投标 |
| 中标 | Award | 2 | 每位管理者各选一个最佳投标者 |
| 报告 | Report | 2 | 承包者完成并提交最终报告 |
| 合计 | 14 |
中标者是 Node-2(能力值 0.85,压过 0.60/0.40/0.30 三份投标)和 Node-4(0.90,压过 0.30/0.75/0.50)。两位管理者各自贪心,恰好都选到了全场最优,全局效用 1.75 正好也是最优匹配的效用。把 14 条消息拆开看,市场的形状就出来了:两条招标广播出去,8 份投标汇回来,信息扇出再汇聚;裁决各一条,报告各一条。整个匹配过程中没有任何一条消息经过中央节点,也没有任何节点见过全局状态——“既无全局控制亦无全局数据存储”在消息层就是这个形状。顺境。但顺境是有条件的:两位管理者看中的恰好是不同的节点;一旦同时看中同一个节点,协议的另一面就露出来了。
囚徒困境:每个节点都选了最优,系统却拿了次优
论文 §11.4(p36)自己给出了这条自反性批评memo624:
“The best global assignment does not necessarily result from the simple concatenation of all the best local assignments.” ——最好的全局分配,未必来自所有最好局部分配的简单拼接。
脚注 22 说得更直白:这”appears to be a variety of the ‘prisoner’s dilemma’ problem”,囚徒困境的一种变体。数字例:管理者 Mgr-A、Mgr-B,承包者 Con-X、Con-Y;Con-X 两项都强(task_1 评 0.9、task_2 评 0.8),Con-Y 只有 task_1 尚可(0.8),task_2 很弱(0.2)。两位管理者独立贪心,都会选 Con-X。复现跑出的三种效用:
| 视角 | 分配 | 效用 | 可达性 |
|---|---|---|---|
| 局部最优拼接 | task_1→Con-X(0.9)、task_2→Con-X(0.8) | 1.7 | 不可达:Con-X 不能同时接两份合同 |
| 协议实际产出 | task_1→Con-X(0.9)、task_2→Con-Y(0.2) | 1.1 | 先到先得的真实结果 |
| 全局最优 | task_1→Con-Y(0.8)、task_2→Con-X(0.8) | 1.6 | 需要中央仲裁者——合同网没有 |
节点日志记下了困境的全过程:
[Mgr-B]
[MANAGER] 评估 2 份投标 -> 中标 Con-X (cap=0.80)
[MANAGER] Con-X 已被占用 -> task_2 中标被拒,下一轮重选
[MANAGER] 评估 1 份投标 -> 中标 Con-Y (cap=0.20)
同一轮里,两位管理者独立评估、都裁给 Con-X;Con-X 只能接一份合同,Mgr-A 的中标先被处理,Con-X 接下 task_1 并置忙;Mgr-B 的中标被拒,下一轮只剩 Con-Y 的 0.2 可选。局部最优拼接(1.7)不可达;实际产出(1.1)是先到先得的结果;全局最优(1.6)需要 Mgr-A 主动让出 Con-X。这要求一个掌握所有人能力与偏好的中央仲裁者,而论文自己在第 10 节(p34)命名了它不存在的原因:连接问题(connection problem)——”no one node has complete knowledge of either the capabilities of or the busy/idle state of every node in the network”(没有任何节点掌握全网的能力与忙闲状态)memo624。论文把原因归为两条:一是 timing:投标异步到达,稍等片刻或许能等到更好的匹配,但协议里没有任何一方有“等”的动机或机制,先到先得写在裁决的贪心里;二是局部决策本身,各节点的最优拼不出全局的最优。招标-投标正是为了让匹配在缺乏全局知识时仍然发生;但它只保证匹配发生,不保证匹配最优。
当投标者必须诚实:自评的诚实性挤压市场深度
回头看那两轮评估,会发现整个市场押在一个从未被论证的前提上:节点会诚实报告自己的能力。Bar-Hillel 当年批评机器翻译把“理解”偷换为“模式匹配”、预设了一个不成立的等价前提;合同网有一个结构相同的软肋——它把“合作”偷换为“自愿投标”。论文用“兴趣水平”描述投标值,但兴趣不是效用函数:它没有定义节点为什么投标、投多高、什么时候会策略性偏离。节点可以虚报能力抢合同,也可以瞒报能力躲任务,协议对此没有任何防御。
这也不是事后诸葛。Zlotkin & Rosenschein 1989 年的批评正冲这里:”Smith’s original work assumed some autonomy among agents, these agents willingly bid for tasks without explicit motivation”,这些智能体没有任何明确动机就自愿投标zr1989。他们那条研究线的全部工作,就是给“自愿投标”补上效用模型,并证明协议设计可以封死有利的不诚实行为。合同网没有这种保证。
编者注:以下为 2026 新增 A/B 对照实验(E5),把”诚实自评”这一个组件换成 LLM,观察合同网市场会发生什么。原始数据:
../experiment_results/ab_e5_contractnet_selfassessment.json(240 次调用,36,380 tokens)。
实验设计尽量薄:基线是确定性古代机制,节点自评就是查真值能力矩阵;变体只替换这一个组件:LLM(deepseek-chat,temperature 0.3)从定性能力自述映射出 0-1 能力分数,自述与真值同源但不含数字(Con-Y 对 task_2 的自述是“没有检测仪器,几乎做不了”);管理者裁决与协议流程逐字节不动。校准部分 12 项自评 × 10 轮独立抽样:
| 校准(12 项 × 10 轮 = 120 次自评) | 结果 |
|---|---|
| 失败模式分布 | correct×61,underbid×58,overbid×1 |
| MAE 均值 | 0.127 |
| 强项自评 | 0.85→0.95、0.9→0.95、0.9→0.85——头部校准良好 |
| 弱项自评 | 0.3→0.1、0.5→0.3、0.2→0.05——中低段系统性压低 |
LLM 自评呈不对称校准:对强能力诚实甚至略乐观,对弱/中能力系统性严厉:120 次自评中 61 次落在真值 ±0.1 内、58 次低估、高估仅 1 次(第 8 轮 Node-4 把 0.4 自评为 0.6)。后果在下游精确显形:
| 下游场景(10 轮) | 基线效用 | LLM 效用 | 全局最优 |
|---|---|---|---|
| 基础场景 | 1.75 | 1.75±[1.75, 1.75](最优分配保持) | 1.75 |
| 囚徒困境 | 1.1 | 0.90±[0.9, 0.9](恶化) | 1.6 |
基础场景的头部排序未被扰动,最优分配 10/10 轮保持;囚徒困境场景中,Con-Y 对 task_2 的真值 0.2 被自评为 0.05,跌破投标门槛 0.1,干脆不投标。task_2 失去唯一的兜底承包者,Con-X 又忙于 task_1,该任务无人中标,全局效用从基线的 1.1 跌到 0.9(10/10 轮一致),离全局最优 1.6 更远。
这个结果不该读成“LLM 不诚实”——恰恰相反,它是诚实的:让它如实书写能力语义,它就如实写“几乎做不了”。问题在于,合同网市场依赖的正是那些弱但非零的冗余容量做兜底,诚实的自评把这些容量挤出了市场。[作者判断] 这也是 blog-09 意图编辑权里“Agent Card 是接口还是内容”之问的一个定量答案方向:自述越诚实,市场越浅。把合同网放进 BDI 坐标,这个缺口看得更清楚:
| 维度 | 合同网 1981 | LLM Agent 2026 |
|---|---|---|
| 信念 | 招标消息四槽位 + 节点能力自述 | 参数分布 + system prompt + RAG |
| 愿望 | 任务规范(外部招标下发) | 用户指令 / task description |
| 意图 | 合同(相互选择的承诺) | ReAct 循环的 action 序列 |
| 承诺语义 | 显式协议,可单方终止 | tool call 是隐式承诺,无终止条款 |
| 最优性保证 | 不保证全局最优(囚徒困境) | 不保证最优(采样随机性) |
愿望由招标下发而非节点自生,承接与否由自评决定——这与当代 LLM Agent“愿望由 prompt 下发、LLM 按概率采样执行”结构同构。但地基不同:合同网预设节点有固定、可验证的能力值,LLM Agent 的“能力”是 prompt 生成的概率分布。当 MetaGPT 的 Product Manager 向 Engineer“分配”任务时,投标是一段自然语言,不是可验证的能力值metagpt。合同网的 Bar-Hillel 式局限在 LLM 基座上不仅没被克服,反而被放大了。
从 Memo 624 到 FIPA cfp:一份协议的四十五年继承
合同网的第二个持久贡献是“协议观”。第 4.2 节(p10)有一段被后续文献反复引用的论证memo624-p10:
“Cooperation cannot be established between nodes simply by indicating how they are to communicate; we must also indicate what they should say to each other.” ——仅指出节点如何通信并不能建立合作——还必须指出它们彼此该说什么。
TCP/IP 只规定比特怎么从 A 到 B,是传输协议而非问题求解协议;Davis 和 Smith 主张,分布式 AI 的协议必须规定消息的内容。“Agent 通信协议”由此成为独立研究对象,并最终长成标准。1997 年 FIPA-ACL 的五种言语行为,就是合同网五种消息的标准化转世:
| 合同网 1981 | FIPA-ACL 1997 |
|---|---|
| TaskAnnouncement(招标) | cfp(call for proposal) |
| Bid(投标) | propose |
| Award(中标) | accept-proposal |
| Report(报告) | inform |
| Termination(终止) | cancel |
这条继承线在时间轴上展开:

图里每个箭头的分量并不相等,按“有引证才说”的原则分级如下:
| 引证强度 | 系统 / 标准 | 继承点 |
|---|---|---|
| 强 | FIPA-ACL(1997)fipa、KQML(1993)kqml、Jack / Jadex jadex、ECN / HCN 变体 smith1980 | 直接继承协议语义:五消息即五种言语行为;消息类型形式化;框架内置合同网 |
| 中强 | HEARSAY-II 黑板重释 erman、Zlotkin & Rosenschein(1989)zr1989、PERSUADER(1988)sycara、MetaGPT(2023)metagpt | 工程化协商概念:三分法重释黑板;补效用模型;论据改变对方效用;SOP 隐式招标 |
| 中等 | AutoGen(2023)autogen、CrewAI(2024)crewai、Coordinator 协议(2026) | 概念启发:消息交换编排、manager/worker 角色动态分配、集中仲裁补囚徒困境缺口 |
看最右端:Dochkina 2026 的 Coordinator 协议用集中仲裁解决合同网的囚徒困境,代价是放弃去中心化。这条当代线索在 blog-10 展开。而合同网对传统调用机制”designed to carry one particular sort of information”(只承载一种信息)的批评(p32),正是 FIPA 走向通用 ACL 的动机。
论文自己划下的四条边界
合同网的局限不用等后人来挑,论文自己认了四条。第一,囚徒困境:协商不保证最优匹配,原因有二——消息异步到达(timing)与局部决策,上面 1.7/1.1/1.6 三个数字已经量过。第二,合作假设:协议预设节点诚实投标、自愿承接、管理者公平裁决,而脚注 22 自认匹配权竞争是囚徒困境的变体。合作框架内部自认了冲突,把真正的利益冲突域留给后续工作。第三,无动机模型:如 Z&R 所批,“兴趣水平”不是效用函数,谁投标、投多高都不由期望效用计算决定。第四,版本边界:AIJ 期刊版与 Smith 1980 博士论文含节点任务评估的加权和公式(含 node workload 项),Memo 624 全文(已逐页核至 p36)无此公式。凡引该公式须改标期刊版,不得以本存档为源。
这四条边界没有一条毁掉合同网,反而划出了此后多 Agent 研究的地图:Z&R 与 PERSUADER 去补效用与冲突(blog-05 三种仲裁),KQML 与 FIPA 去标准化语言(blog-07 智能体如何找到彼此),Coordinator 用集中仲裁换效率(blog-10),Agent Card 重新追问自述的语义(blog-09)。它与 Minsky 的心智社会殊途同归——后者把冲突与协商搬进脑内,前者搬到网络节点间;智能是多个半自主单元协商的结果,而非单一引擎的产物。Wooldridge & Jennings 笔下的“社会性”(blog-03 何为 Agent)在这里第一次有了可运行的形态:协作从哲学概念变成协议语义,协商从修辞变成控制转移机制——双方各持评估权,谁也不能单方面指挥谁。四十五年后,当 LLM Agent 们开始互相招标,它们说的还是那五句话。
参考文献
[memo624] Davis, R. & Smith, R. G. “Negotiation as a Metaphor for Distributed Problem Solving.” MIT AI Memo No. 624, May 1981.(精读存档 原始文章\03f-DavisSmith-ContractNet-1983.pdf,44 页扫描件,文本层 0 字符,逐页图像阅读转录。引用页码均按 memo 页码标注。)
[memo624-p1] 同上,封面摘要(p1)。
[memo624-p10] 同上,第 4.2 节(p10)。
[memo624-p15] 同上,第 7.3 节(p15)。
[memo624-p20] 同上,第 7.4-7.5 节(p20-21)。
[memo624-p33] 同上,第 9 节(p33)。
[smith1980] Smith, R. G. “A Framework for Distributed Problem Solving.” PhD dissertation, 1980. https://doi.org/10.21236/A087209
[fipa] FIPA, Foundation for Intelligent Physical Agents, FIPA-ACL specification. https://fipa.org
[kqml] Finin, T. et al., KQML. https://www.cs.umbc.edu/csee/677/papers/kqml.pdf
[jadex] Jadex Active Components framework. https://jadex.org
[erman] Erman, L. D. et al., “The Hearsay-II Speech-Understanding System: Integrating Knowledge to Resolve Uncertainty.” ACM Computing Surveys, 1980. https://doi.org/10.1145/357580.357586
[zr1989] Zlotkin, G. & Rosenschein, J. S. “Negotiation and Task Sharing Among Autonomous Agents in Cooperative Domain.” IJCAI-89, 1989. https://doi.org/10.1016/B978-0-934613-85-5.50142-X
[sycara] Sycara, K. “Resolving Adversarial Conflicts: An Approach to Multi-Agent Negotiation.” AAAI-88, 1988. https://ojs.aaai.org/index.php/AAAI/article/view/4588
[metagpt] Hong, S. et al., “MetaGPT: Meta Programming for a Multi-Agent Collaborative Framework.” 2023. https://github.com/geekan/MetaGPT
[autogen] Microsoft, “AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation.” 2023. https://github.com/microsoft/autogen
[crewai] CrewAI Inc., “CrewAI.” 2024. https://github.com/crewAIInc/crewAI
系列导航 · 意图即承诺,智能体即社会——自主性的第一个可计算答案
| Agent 考古 意图即承诺,智能体即社会 系列文章 | 关键词 |
|---|---|
| 导读:总览与阅读路线 | 四条线时间线 · 阶段二衔接 · 阅读路线 |
| 意图即带承诺的选择 | C&L 1990 · PGOAL · 持续承诺 |
| BDI 从理论到工程 | PRS · AgentSpeak · dMARS · 承诺策略 |
| 何为 Agent | W&J 弱/强概念 · AOP |
| 合同网 | Smith 1980 · 任务招标 · 囚徒困境 |
| 三种仲裁 | Z&R · PERSUADER · D&M |
| 联合意图部署 | STEAM · ARCHON · EV(通信) |
| 智能体如何找到彼此 | KQML · FIPA · JADE · MCP/A2A |
| 反应与慎思的和解 | TouringMachines · INTERRaP · 门控 |
| 意图编辑权 | 三时空同构 · 编辑权拉锯 · 自止焊接 |
| 自组织的实证与治理悖论 | Dochkina 2026 · BCG 治理悖论 |
| 当 LLM 住进 BDI | Ciatto 2025 · GenAI+BDI · 计划生成 |
