Contract Net Protocol(1980)

协商协议:招标、投标、授予在节点之间分配任务。独立的 Agent 如何连接,这个问题比 A2A 早了四十五年。

原文:Reid G. Smith, 1980,The Contract Net Protocol: High-Level Communication and Control in a Distributed Problem Solver,IEEE Transactions on Computers C-29(12): 1104–1113。协议在实验系统 CNET(INTERLISP)中实现。Smith 的博士论文与此前关于分布式传感、启发式搜索的应用报告属于同一条工作。

这个概念是什么

Contract Net(合同网)是一套给分布式问题求解用的高层通信协议。多个处理器节点上各有知识源,没有一个节点掌握解整个问题所需的全部信息,也没有全局控制器和全局共享内存,节点之间通过消息合作。

核心机制是把「由谁来做哪一项任务」写成协商:有任务的节点担任经理(manager),空闲且有能力的节点担任承包方(contractor)。双方交换结构化消息,互相选择之后订立合同。节点角色不预先固定,同一节点可以同时对某些合同担任经理、对另一些担任承包方,并把自己接到的任务再分包出去。

底层网络协议负责可靠地传送比特流;高层协议规定节点应该对彼此说什么(任务公告、投标、授予、汇报)。

论文的主要内容

要解决的问题

分布式问题求解有三个特征:合作(单个知识源信息不足)、控制与数据都是分散的、节点之间松耦合。任务共享中必须先解决连接问题:有待执行任务的节点,如何找到最合适的空闲节点。它包含资源分配(负载平衡)与聚焦(搜索中会生成大量对最终解无贡献的任务,最合适的知识源也无法先验指定)。

协商有四个要素:过程是局部的,没有集中控制;信息双向流动;每一方从自己的视角评价信息;最终协议来自互相选择。

基本消息与槽位

任务公告(task announcement) 由产生任务的节点发出,该节点成为这项任务的经理。寻址可以是全网广播、有限广播或点对点。公告有四个主槽:

槽 作用
资格说明(eligibility specification) 投标节点必须满足的条件,用来事先排除明显不合格的投标
任务摘要(task abstraction) 任务的简短描述,供潜在承包方在多项公告之间排序
投标说明(bid specification) 经理希望投标中提供哪些信息,使投标可比较
截止时间(expiration time) 接受投标的期限

投标(bid) 在节点空闲、准备接下一个任务时发出。节点维护尚未过期的公告列表,按任务类型排序。投标中的节点摘要按公告的投标说明填写,并可使用 REQUIRE 声明:若中标,需要经理传送额外信息。

授予(announced award) 通知中标者成为承包方,并给出开始执行所需的数据。若已有「满意」的投标,可以在截止时间之前立即授予。

合同执行期间还有:信息消息用于一般通信;汇报分为中期与最终;终止用于经理结束合同及其未完成的分包。扩展包括立即响应投标(BUSY / INELIGIBLE / LOW RANKING)、定向合同(跳过公告与投标),以及负载很高时反向进行的 node available。

论文中的例子:分布式传感

第三节用 CNET 模拟的分布式传感系统(DSS):传感器与处理器节点散布在较大地理区域,要动态维护该区域内的车辆交通图。初始化阶段出现一类 signal 任务:无传感能力但处理能力强的节点担任经理,寻找能提供信号特征的传感器节点。

双方的「理想合同」并不相同。经理希望承包方在空间上覆盖责任区、传感器类型搭配合理;承包方希望经理在地理上足够近。合同网允许把这两种评价写进不同槽位。经理广播的任务公告给出任务类型、位置、资格、投标须填项与截止时间;潜在承包方按距离排序后投标;经理选择能覆盖责任区、类型搭配合理的投标者并授予。

作者标明的限度与设计选择

  • 槽位中的具体内容必须由应用填写,协议只提供框架。CNET 提供基于对象—属性—值的简单公共节点间语言,领域词由用户扩充。
  • 投标有约束力,且节点允许同时有多个未决投标,因此可能收到多个授予,按到达顺序排队。这些权衡在文中明确写成暂定选择。
  • 协议最适合可以划分成相对独立子任务、对全局同步需求不高的问题。子任务之间若需要密集通信,收益会被通信开销抵消。

关键术语

术语 在这篇论文里的含义
分布式问题求解 分散、松耦合的知识源合作解题;无全局控制与全局数据
连接问题 任务与执行节点如何匹配;含资源分配与聚焦
经理 / 承包方 针对单项任务的角色,不是节点的固定身份
任务公告 / 投标 / 授予 / 汇报 协商的基本消息类型
公共节点间语言 填写槽位时各节点共用的高层编码
定向合同 跳过招标、直接授予已知合适节点
任务共享 / 结果共享 合作的两种风格;后者用请求与信息消息传递部分结果

和 AI Agent 的关系

合同网用招标、投标、授予在节点之间分配任务。独立的 Agent 如何连接,这个问题比 A2A 早了四十五年。

它的循环是公告、投标、授予、汇报,合同期内可分包、可终止。消息是节点之间的动作,观察是对方回过来的结构化槽位。决策核心是各节点上的知识源与局部评价函数。

2023 年以后用多个 LLM 角色对话来分工,处理的是同一类问题中的「聚焦」与「谁做什么」,匹配过程通常是提示词里写定的角色,而不是合同网上的公告—投标状态机。2025 年的 A2A 再次规定 Agent 之间如何发现对方、如何交付任务。A2A 使用 Agent Card、任务与消息,运行在 LLM 产品之上;合同网使用资格槽与合同状态,运行在 1980 年的分布式处理器模型上。二者同属「节点间如何连接」这一问题,不是同一份协议的版本迭代,也不是产品谱系。