跳转到主要内容

智能体集群需要发现契约,而非共享数据库

在集群规模下,真正的难题在于就事实如何命名、如何版本化、如何退役达成一致。发现契约必须先于任何共享存储存在。

Studio shot of a humanoid robot with glowing eyes against a dark background, offering ample copyspace.

共享存储不是瓶颈

当一个集群从少数几个智能体扩展到数千个时,本能反应是去找一个共享数据库。把所有事实放在一个地方,让每个智能体都能读写,协调就变成了一个存储问题。这种本能是错的。存储很便宜,而且已被充分理解。集群规模下的失效模式不是容量,而是一致:智能体对什么是事实、事实何时是当前的、谁有权声称它存在,并没有共同的定见。

没有发现契约的共享存储会变成只写不读的垃圾场。每个智能体都能追加,很少有人能解读,没有人能退役。结果不是知识库,而是一堆关系未定义的主张。

并发写入者产生相互冲突的记录,没有任何单一智能体能裁决

两个智能体观察到同一个底层事件,往往会以不同方式记录它。一个把温度写成浮点数,另一个写成带单位的字符串。一个用本地时间打时间戳,另一个用 UTC。单独看,两者都没错。合在一起,它们无法调和,因为没有任何智能体拥有决定哪种表示是规范形式的权威。存储忠实地保留了两者,每一个下游读者都继承了这份歧义。

这不是一个靠更强事务模型就能解决的一致性难题。即便有可串行化的写入,除非写入者事先就事实如何命名达成一致,存储也无法知道两条记录描述的是同一个事实。共识协议为写入排序;它们不解读写入。

没有命名规则,重复项看起来就像独立证据

这是更危险的失效。如果三个智能体各自独立发现了同一个事实,并用三个不同的键写入,下游消费者会看到三条记录。如果该消费者把记录数量当作置信度的代理指标,它会断定这个事实得到了充分支持。并非如此。它只是一个观察,被意外复制了。

重复即证据是一种无声的腐化。它不报错,它抬高置信度分数。依赖佐证计数的集群,如果没有命名纪律,就是在测量自身的冗余,并称之为一致。

发现契约

A detailed close-up of an illuminated audio mixer showcasing controls and displays.

发现契约是一组规则,规定事实在进入任何存储之前如何命名、如何版本化、如何退役。它是一个协议,不是模式。模式描述记录长什么样;契约描述它意味着什么,以及何时不再意味着什么。

有三个属性是承重的。

规范键、生产者身份、时间戳

每个事实都必须携带一个由其内容派生、而非由写入它的智能体派生的规范键。像 sensor:temperature:celsius:station-7:2024-06-01T12:00Z 这样的键,任何观察到同一事实的智能体都能推导出来。两个写入同一观察的智能体会产生相同的键,存储可以把它们合并为一条带两份证言的记录,而不是两条记录。

键必须伴随生产者身份和时间戳。生产者身份不是显示名称;它是对发出该事实的那次运行的引用,足以检索该运行的输入和配置。时间戳是观察时间,不是写入时间,因为写入时间反映的是排队,而不是现实。

读取方声明它所依赖的版本

消费某个事实的读取方必须声明它依赖哪个版本。这把陈旧读取从无声的隐患变成了明确的选择。一个读取版本 3 并据此行动的智能体,事后可以被审计:它依赖版本 3,而版本 5 取代了它。没有这一点,消费了被取代事实的读取方,与消费了当前事实的读取方看起来一模一样,由此产生的错误无法归因。

版本声明不是免费的。它迫使读取方携带状态,迫使写入方发布版本转换。这个权衡是真实的:跳过版本声明的系统获得吞吐量,失去解释自身输出的能力。对于做出会累积的决策的集群来说,解释比吞吐量更值钱。

退役是一等操作

被取代的事实必须停止被引用。这需要一个与写入同样明确的退役操作。事实不是被删除;它被标记为已退役,并附上取代它的事实和原因。声明了对某个已退役事实的版本依赖的下游读取方,会收到错误或重定向,而不是无声的替换。

退役正是大多数共

Rows of wine bottles on a production line in an industrial setting.

下游智能体必须能够把一项主张追溯到产生它的那次运行。这不是调试时的锦上添花;它是让契约其余部分可被执行的属性。如果一个事实无法被追溯,它就无法被版本化、退役或裁决。

实际后果是一条写入时规则:无归属的事实被拒绝。不是在读取时过滤,不是隔离待后处理,而是拒绝。读取时过滤器是每个消费者都必须正确且一致实现的策略。写入时拒绝是系统的一个属性。前者在某个消费者忘记时无声失败;后者在边界处大声失败。

这是对写入灵活性的权衡。无法产生运行引用的智能体无法贡献。在早期原型中这感觉受限;在集群规模下,这是保持语料干净的唯 一方式。替代方案是存储不断累积无法归属的主张,直到没有任何消费者能区分信号与残渣。

评估含义

集群质量不能仅靠任务完成度来衡量。一个通过引用被取代的事实、或把同一个观察的三份副本当作三次独立确认来完成任务的集群,是偶然成功的,并且会以不可预测的方式失败。

因此评估必须包含事实级指标:智能体之间在规范键上的一致率、共享同一键但在值上分歧的事实之间的矛盾率,以及被引用事实中属于当前而非已退役的比例。这些是集群共享状态的属性,不是任何单一智能体输出的属性,而且它们需要发现契约才能被测量。

诚实的局限是:事实级指标比任务完成度更难计算。它们需要对契约本身进行埋点,以及一个关于什么算作一致的参照。这个成本,就是知道一个集群是连贯的、还是仅仅多产的代价。

先构建契约

共享存储是最后一个决定,不是第一个。在选择数据库之前,先定义事实如何命名、谁可以产生它、读取方依赖哪个版本,以及它如何退役。这四条规则就是发现契约。实现了它们的存储是协调基座。没有实现的存储,只是一个索引更好的共享文件夹。

集群失败,不是因为它们存不下足够多的东西。它们失败,是因为无法就自己存了什么达成一致。

封面照片:panumas nikhomkhai / Pexels。

分享XLinkedIn永久链接5 分钟阅读

相关阅读

这能回答的问题

What is a discovery contract in a multi-agent system?

It is the set of rules governing how facts are named, versioned and retired before they reach any shared store. It defines canonical keys, producer identity, version dependencies and retirement semantics, so agents agree on what a fact is rather than only where it is stored.

Why does a shared database fail at swarm scale?

Because storage is not the bottleneck. Concurrent writers produce conflicting records that no single agent can adjudicate, and without naming rules the same fact written by different agents looks like independent evidence. Stronger transactions order writes but do not interpret them.

Why should unattributed facts be rejected at write time?

A read-time filter is a policy each consumer must implement correctly and consistently, and it fails silently when one forgets. A write-time rejection is a property of the system and fails loudly at the boundary, keeping the corpus traceable and auditable.

How should swarm quality be evaluated?

Not on task completion alone. Evaluation should include fact-level metrics: agreement rate on canonical keys, contradiction rate between facts sharing a key, and the proportion of cited facts that are current rather than retired.