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

Графы знаний как контекст агента: соединение — это сложная часть

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

Close-up of a modern prosthetic arm displaying advanced technology and design.

Что даёт граф по сравнению с векторным хранилищем

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

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

Второе — это происхождение. Когда утверждение хранится как ребро, ребро может нести собственные метаданные: какое наблюдение его породило, когда, каким агентом, по какой версии схемы. Это значит, что агент может сказать не просто «компонент устарел», а «компонент устарел согласно этому наблюдению, зафиксированному в это время». Происхождение путешествует вместе с ребром, а не реконструируется постфактум из оценок извлечения, которые плохо отражают обоснование.

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

Чего это стоит

Detailed view of a coffee roaster control panel showing buttons and beans.

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

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

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

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

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

Рабочее разделение труда

Паттерн, который выдерживает проверку на практике, разделяет то, чт

Detail view of aluminum cans with condensation in a manufacturing setting.

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

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

Относитесь к свежести графа как к SLO с измеримой границей устаревания. Если задача разрешения отстаёт, читатели должны знать. Раскройте границу устаревания агентам, которые читают граф, чтобы читатель мог решить, доверять ли обходу или вернуться к сырому извлечению. Граф, который тихо отстаёт на три дня, хуже графа, который об этом объявляет.

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

Что инструментировать

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

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

ПоделитьсяXLinkedInПостоянная ссылка5 мин чтения

Связанное чтение

На какие вопросы это отвечает

Why does flat vector retrieval fail on multi-hop questions?

Because the answer is a path rather than a passage. No single chunk contains the relationship between entities, so similarity search returns plausible neighbours instead of the traversal that connects them.

What is the main ongoing cost of a shared knowledge graph for agents?

Entity resolution. New writes constantly create duplicate or near-duplicate nodes, so deduplication is a continuous background job rather than a one-time migration, and the graph drifts as soon as it stops.

How should concurrent agent writes to a graph be resolved?

With a per-predicate merge policy: supersession with retained history for single-valued predicates, union for set-valued ones, append for time-series, and a review queue for anything ambiguous. Last-write-wins discards observations silently.

Should raw text be stored in the knowledge graph?

No. Keep entities, relations and provenance in the graph, and keep raw text in object storage referenced by identifier. This keeps traversal cheap while preserving the source material.