Перейти к основному содержимому

Общий контекст — это проблема согласованности, а не хранения

Графы знаний дают мультиагентным системам явное общее состояние, но настоящая работа — решить, какой агент может записывать какое ребро и как разрешаются конфликтующие записи.

Абстрактное изображение связанных узлов и рёбер, образующих сетевой граф на тёмном фоне

Почему общий контекст постоянно изобретают заново

Большинство мультиагентных систем, которым нужно разделять контекст, начинают с векторного хранилища. Это путь наименьшего сопротивления: встроить то, что знает каждый агент, извлекать по сходству и позволить модели разобраться с остальным. Это работает, пока двум агентам не потребуется действовать на основе одного и того же факта.

Векторное хранилище разделяет воспоминания, а не состояние. Извлечение возвращает ранжированный список фрагментов, которые выглядят релевантными запросу; оно не возвращает набор утверждений, которые система приняла. Два агента могут извлечь перекрывающийся контекст и при этом бесконечно придерживаться несовместимых убеждений, потому что ничто в хранилище не представляет противоречие. Один агент утверждает, что цель развёртывания — staging; другой утверждает, что это production. Оба утверждения лежат в индексе. Ни одно не помечено как вытесненное. Следующее извлечение может выдать любое из них или оба, в зависимости от расстояния между эмбеддингами и границ фрагментов.

Режим отказа не в том, что извлечение неточно. А в том, что у извлечения нет понятия согласия. В хранилище нет объекта, который говорит это то, что система в настоящее время считает истинным, и нет операции, которая говорит это новое утверждение конфликтует с тем.

Графы решают именно этот пробел. Граф знаний делает отношения явными: узлы для сущностей, рёбра для утверждений и схему, которая ограничивает, какие отношения осмысленны. Ребро — это утверждение, которым можно владеть, версионировать, противоречить и выводить из обращения. Это то, что нужно мультиагентной системе, чтобы рассуждать о согласии, а не просто извлекать похожий текст.

Предложение здравое. Операционные вопросы не решены, и именно они определяют, будет ли общий граф полезен или обузой. Недавние материалы о графовой памяти агентов обычно сосредоточены на слое хранения — какая база данных, какая модель эмбеддингов, какой обход. Более сложные вопросы касаются полномочий и конфликтов: какой агент может записывать какое ребро и что происходит, когда два агента записывают рёбра, которые не могут быть истинными одновременно.

Полномочия записи: у каждого ребра должен быть владелец

Запись без атрибуции — это то, как общий граф превращается в источник слухов. Если любой агент может утверждать любое ребро, граф накапливает утверждения без происхождения, и у нижестоящих агентов нет оснований решать, чему доверять. Отказ тихий: граф остаётся синтаксически валидным, становясь семантически ненадёжным.

Решение — сделать полномочия записи явными. Каждый тип ребра в схеме должен нести политику, которая указывает, какой агент, действуя в рамках какой задачи, может его утверждать. Фрагмент схемы может выглядеть так:

Empty tunnel with a patterned ceiling of lights casting shadows

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

  - 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

Важный выбор дизайна в том, что полномочия живут в схеме, а не в промпте агента. Правила на уровне промпта носят рекомендательный характер. Модель, которую попросили записывать только те рёбра, в которых она уверена, всё равно запишет ребро, когда контекст подсказывает, что это нужно, и нет механизма отклонить запись. Политика на уровне схемы обеспечивается путём записи: утверждение, которое не соответствует объявленному писателю для этого типа ребра, отклоняется до того, как достигнет графа.

Это не требует центрального органа для каждой записи. Это требует, чтобы полномочия были объявлены и проверяемы. Агенту можно предоставить широкую область записи для задачи, но предоставление — это запись, а не инструкция в системном промпте.

Разрешение конфликтов: противоречивые рёбра — это норма

Два агента, утверждающие противоречивые рёбра, — это нормальное событие, а не ошибка. Агенты работают с частичными представлениями, в разное время, с разными доказательствами. Граф, который рассматривает противоречие как исключение, либо остановится, либо молча перезапишет, и оба варианта неверны.

Приоритет должен быть определён заранее, для каждого типа ребра. Три рабочих варианта:

  • Last-write-wins с временными метками. Просто и предсказуемо, но отдаёт приоритет свежести над доказательствами. Агент, который записывает устаревшее убеждение позже, чем лучше информированный, выигрывает случайно.
  • Слияние с учётом уверенности. Каждое утверждение несёт уверенность и источник. Правило слияния объединяет их. Это более выразительно, но требует, чтобы уверенность была калибрована, а некалиброванная оценка уверенности — это просто число, которое заставляет слияние выглядеть обоснованным.
  • Карантин до запуска резолвера. Конфликтующие рёбра удерживаются вне читаемого графа, и шаг разрешения — выделенный агент, проверка человеком или детерминированное правило — решает, какое выживет.

Для фактов, на основе которых будут действовать другие агенты, карантин обычно правильный. Цена — задержка: граф временно неполон для этого ребра, и любой агент, которому нужен факт, должен ждать или продолжать с явным неизвестным. Это реальный компромисс. Last-write-wins сохраняет граф постоянно читаемым ценой occasional распространения неверного убеждения. Карантин сохраняет граф заслуживающим доверия ценой доступности. Выбор должен следовать последствиям действия на основе неверClose-up of moss-covered brutalist concrete structure with geometric designa/server-rack-closeup-5ed2bb-8c3175.jpg)

Карантин также нуждается в условии выхода. Конфликт, который никогда не разрешается, — это постоянная дыра. Резолвер должен быть определённым шагом с определённым триггером — запланированная сверка, порог по количеству заблокированных нижестоящих чтений или эскалация, когда конфликт сохраняется через границу запуска.

Согласованность чтения для нижестоящих шагов

Агенту, который читает граф в середине запуска, нужен снимок, а не живое представление. Если граф меняется между двумя чтениями в рамках одной траектории агента, траектория не воспроизводима: решения агента зависят от состояния, которого больше не существует и которое нельзя восстановить.

Механизм — версионирование графа. Каждая запись увеличивает счётчик версий, и чтение обслуживается относительно конкретной версии. Запуск записывает версию, из которой он читал, в свою траекторию, вместе с вызовами инструментов и выводами модели. Воспроизведение запуска против той же версии даёт те же входные данные, что является минимальным требованием для отладки отказа мультиагентной системы.

Это взаимодействует с карантином. Ребро в карантине отсутствует в снимке, поэтому агент, читающий эту версию, видит факт как неизвестный, а не как оспариваемый. Приемлемо ли это, зависит от того, может ли агент продолжать с неизвестным. Если нет, запуск должен блокироваться на разрешении, а не читать версию, которая опускает нужный ему факт.

Версионирование также делает хранение управляемым. Устаревшие рёбра — это вопрос политики хранения той же формы, что и хранение памяти: как долго ребро остаётся читаемым и что запускает его вывод из обращения? Ребро, которое было вытеснено, не удаляется сразу — оно может понадобиться для объяснения прошлого запуска. Практическое правило — выводить рёбра из текущей читаемой версии, сохраняя их адресуемыми по версии для аудита. Сборка мусора тогда работает с версиями, а не с отдельными рёбрами, что сохраняет целостность аудиторского следа.

Что это означает для дизайна

Общий граф знаний для мультиагентной системы — это не выбор хранилища. Это набор политик о полномочиях, конфликтах и согласованности, которые случайно выражены в графе. Слой хранения — это лёгкая часть.

Работа по дизайну — в схеме: какие типы рёбер существуют, кто может их записывать, что происходит, когда два писателя не согласны, и какую версию видит читатель. Эти решения определяют, будет ли граф общим состоянием, о котором агенты могут рассуждать, или общим источником слухов, из которого агенты извлекают.

Честный компромисс в том, что граф, управляемый политиками, медленнее для записи и медленнее для чтения, чем векторное хранилище. Записи проверяются на полномочия, конфликты могут помещаться в карантин, а чтения привязаны к версиям. Эти накладные расходы покупают воспроизводимость и защитимое понятие согласия. Для систем, где агенты действуют на основе общих фактов, это обычно правильный компромисс. Для систем, где агентам нужно только вспоминать похожий текст, это излишне.

Поделиться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.