跳转到主要内容

共享上下文是一致性问题,而非存储问题

知识图谱为多智能体系统提供了显式的共享状态,但真正的工作在于决定哪个智能体可以写入哪条边,以及如何解决冲突写入。

深色背景上由相连节点和边构成的网络图的抽象渲染

为什么共享上下文总在被重新发明

大多数需要共享上下文的多智能体系统都从向量存储开始。这是阻力最小的路径:将每个智能体所知的内容嵌入,按相似度检索,剩下的交给模型处理。这在两个智能体需要基于同一事实行动之前一直有效。

向量存储共享的是召回,而非状态。检索返回的是与查询看起来相关的分块排名列表;它不返回系统已承诺的一组命题。两个智能体可以检索到重叠的上下文,却无限期地持有不兼容的信念,因为存储中没有任何东西表示这种矛盾。一个智能体断言部署目标是 staging;另一个断言是 production。两个断言都留在索引中。没有任何一个被标记为已被取代。下一次检索可能浮现其中任何一个,或两者兼有,取决于嵌入距离和分块边界。

失败模式不是检索不精确。而是检索没有一致性的概念。存储中没有任何对象表示这是系统当前认定为真的事实,也没有任何操作表示这个新声明与那个声明冲突。

图恰好填补了这一空白。知识图谱使关系显式化:实体作为节点,声明作为边,以及约束哪些关系有意义的模式。一条边是一个可以被拥有、版本化、反驳和退役的命题。这正是多智能体系统为了对一致性进行推理、而非仅仅检索相似文本所需要的。

这个提议是合理的。但操作层面的问题尚未解决,而正是这些问题决定了共享图是有用的还是负担。近期关于基于图的智能体记忆的报道往往聚焦于存储层——哪个数据库、哪个嵌入模型、哪种遍历方式。更难的问题关乎权限与冲突:哪个智能体可以写入哪条边,以及当两个智能体写入无法同时为真的边时会发生什么。

写入权限:每条边都需要一个所有者

无归属的写入是共享图沦为谣言工厂的方式。如果任何智能体都可以断言任何边,图就会积累没有来源的声明,下游智能体便没有依据来决定信任哪一个。这种失败是悄无声息的:图在语法上保持有效,却在语义上变得不可靠。

解决办法是让写入权限显式化。模式中的每种边类型都应携带一条策略,说明哪个智能体、在哪个任务下可以断言它。一个模式片段可能如下所示:

edge_types:
  - name: service_owns_database
    subject: service
    object: database
    writers:
      - agent: inventory-agent
        task: reconcile-service-topology
    cardinality: many-to-many
    conflict_policy: quarantine

![Empty tunnel with a patterned ceiling of lights casting shadows](/media/tunnel-perspective-lights-a450e6-68c4fb.jpg)

  - name: deployment_target
    subject: service
    object: environment
    writers:
      - agent: release-agent
        task: promote-release
    cardinality: one-to-one
    conflict_policy: last-write-wins-with-timestamp

重要的设计选择是:权限存在于模式中,而非智能体的提示中。提示层面的规则是建议性的。一个被要求只写入自己有把握的边的模型,在上下文暗示它应该写入时仍会写入,而且没有任何机制可以拒绝这次写入。模式层面的策略由写入路径强制执行:与该边类型声明的写入者不匹配的断言会在到达图之前被拒绝。

这并不要求每次写入都经过中央权威。它要求权限被声明且可检查。一个智能体可以被授予某个任务的宽泛写入范围,但该授权是一条记录,而非系统提示中的指令。

冲突解决:矛盾的边是正常的

两个智能体断言矛盾的边是正常事件,而非错误。智能体基于部分视图、在不同时间、以不同证据运作。将矛盾视为异常的图要么停止,要么静默覆盖,而两者都是错的。

优先级必须按边类型预先决定。三种可行的选项:

  • 带时间戳的最后写入胜出。 简单且可预测,但它让新近性凌驾于证据之上。一个写入过时信念的智能体,如果写入时间晚于一个信息更充分的智能体,就会意外胜出。
  • 置信度加权合并。 每个断言携带一个置信度和一个来源。合并规则将它们组合起来。这更具表达力,但它要求置信度经过校准,而未校准的置信度分数只是一个让合并看起来有原则的数字。
  • 隔离,直到解析器运行。 冲突的边被排除在可读图之外,由一个解析步骤——专用智能体、人工审查或确定性规则——决定哪一条存活。

对于其他智能体将据以行动的事实,隔离通常是正确的。代价是延迟:图对该边暂时不完整,任何需要该事实的智能体必须等待,或带着一个显式的未知继续。这是一个真实的权衡。最后写入胜出保持图持续可读,代价是偶尔传播错误信念。隔离保持图可信,代价是可用性。选择应取决于基于错误边行动的后果,而非写入路径的便利性。

隔离还需要一个退出条件。一个永远不被解决的冲突是一个永久的空洞。解析器应是一个有明确触发条件的明确步骤——定Close-up of moss-covered brutalist concrete structure with geometric designa/server-rack-closeup-5ed2bb-8c3175.jpg)

下游步骤的读一致性

在运行中途读取图的智能体需要一个快照,而非实时视图。如果图在同一智能体轨迹内的两次读取之间发生变化,该轨迹就不可复现:智能体的决策依赖于一个已不存在且无法重建的状态。

机制是图版本化。每次写入推进一个版本计数器,读取针对特定版本进行。运行在其轨迹中记录它所读取的版本,与工具调用和模型输出并列。针对同一版本重放该运行会产生相同的输入,这是调试多智能体失败的最低要求。

这与隔离相互作用。被隔离的边在快照中缺席,因此读取该版本的智能体将该事实视为未知,而非有争议。这是否可接受取决于该智能体能否带着一个未知继续。如果不能,运行应阻塞在解析上,而非读取一个省略了它所需事实的版本。

版本化还使保留策略变得可处理。过时的边是一个保留策略问题,其形态与记忆保留相同:一条边保持可读多久,什么触发它的退役?一条已被取代的边不会立即删除——它可能被用来解释过去的运行。实用的规则是:从当前可读版本中退役边,同时保持它们可按版本寻址以供审计。垃圾回收随后针对版本运作,而非针对单条边,这保持了审计轨迹的连贯。

这对设计意味着什么

多智能体系统的共享知识图谱不是一种存储选择。它是一组关于权限、冲突和一致性的策略,恰好以图的形式表达。存储层是容易的部分。

设计工作在于模式:存在哪些边类型,谁可以写入它们,当两个写入者意见不一致时会发生什么,以及读取者看到哪个版本。这些决定决定了图是智能体可以据以推理的共享状态,还是智能体从中检索的共享谣言工厂。

诚实的权衡是:受策略治理的图比向量存储写入更慢、读取也更慢。写入要对照权限检查,冲突可能被隔离,读取被固定到版本。这种开销换来了可复现性和一个可辩护的一致性概念。对于智能体基于共享事实行动的系统,这通常是正确的权衡。对于智能体只需要召回相似文本的系统,则没有必要。

封面照片:Google DeepMind / Pexels。

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

相关阅读

这能回答的问题

Why is a vector store insufficient as shared context for multi-agent systems?

A vector store shares recall, not state. It returns ranked chunks by similarity and has no representation of agreement or contradiction, so two agents can hold incompatible beliefs indefinitely without the system detecting it.

Where should write authority be enforced in a multi-agent graph?

In the schema attached to each edge type, not in an agent's prompt. Schema-level policy is enforced by the write path and rejects assertions that do not match a declared writer; prompt-level rules are advisory and cannot block a write.

When should conflicting edges be quarantined rather than merged?

Quarantine is usually correct for facts other agents will act on, because it prevents a wrong belief from propagating. The cost is latency and a temporarily incomplete graph for that edge, so the choice should follow the consequence of acting on a wrong edge.

Why do agents need a graph snapshot instead of a live view?

If the graph changes between reads within one agent trajectory, the trajectory is not reproducible. Pinning reads to a graph version and recording that version in the run's trajectory makes replay and debugging possible.