[Agent 考古] 合同网协议详解:Smith 1980 任务招标五步流程与囚徒困境的 Python 复现

Under the Sun with Paddy

系列名称:意图即承诺,智能体即社会——自主性的第一个可计算答案

篇号:第 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。整条流程可以这样看:

Image

图里最要紧的是:两道关口各由一方把守,节点过不了自己的门槛就不投标,管理者看不中投标就不中标。招标消息也不是一句“有人要干活”,第 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。承包者执行中还能分解子任务、向下转包:它一边是上一份合同的承包者,一边是新招标的管理者。合同逐层转包下去,长成一棵合同树;终止消息也沿树传播——总包解约,分包及其二级分包一并终止:

Image

这张树形图说明合同网的“网”不在拓扑而在角色:任何节点都同时活在多份合同里,时而甲方、时而乙方。论文还为这套消息定了一条近乎语言哲学的规矩(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 条:

阶段消息类型数量说明
招标TaskAnnouncement2两位管理者各发布一个任务
投标Bid84 个承包者各对 2 个任务投标
中标Award2每位管理者各选一个最佳投标者
报告Report2承包者完成并提交最终报告
合计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.751.75±[1.75, 1.75](最优分配保持)1.75
囚徒困境1.10.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 坐标,这个缺口看得更清楚:

维度合同网 1981LLM 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 的五种言语行为,就是合同网五种消息的标准化转世:

合同网 1981FIPA-ACL 1997
TaskAnnouncement(招标)cfp(call for proposal)
Bid(投标)propose
Award(中标)accept-proposal
Report(报告)inform
Termination(终止)cancel

这条继承线在时间轴上展开:

Image

图里每个箭头的分量并不相等,按“有引证才说”的原则分级如下:

引证强度系统 / 标准继承点
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 · 承诺策略
何为 AgentW&J 弱/强概念 · AOP
合同网Smith 1980 · 任务招标 · 囚徒困境
三种仲裁Z&R · PERSUADER · D&M
联合意图部署STEAM · ARCHON · EV(通信)
智能体如何找到彼此KQML · FIPA · JADE · MCP/A2A
反应与慎思的和解TouringMachines · INTERRaP · 门控
意图编辑权三时空同构 · 编辑权拉锯 · 自止焊接
自组织的实证与治理悖论Dochkina 2026 · BCG 治理悖论
当 LLM 住进 BDICiatto 2025 · GenAI+BDI · 计划生成

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注