RAG система на основе графовых баз данных

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

Большие языковые модели (LLMs) стали незаменимыми инструментами для обработки, хранения и обобщения знаний в больших масштабах. Их способность анализировать сложные данные делает их мощным компонентом системы поддержки принятия решений. Однако, чтобы в полной мере раскрыть этот потенциал, необходимо тщательно продумать архитектуру таких систем – в частности, обеспечить релевантность и структурированные связи между данными.

Задача

Современные приложения, ориентированные на данные, часто сталкиваются со значительным разрывом между структурированным миром баз данных и неструктурированной человеческой речью. Наша цель заключалась в создании системы, способной интеллектуально обрабатывать входящие документы, выявлять связи между сущностями и отвечать на запросы пользователей с помощью RAG пайплайна (генерация, дополненная поиском).

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

Обзор решения

Чтобы преодолеть эту проблему, мы разработали гибридную систему, которая сочетает возможности Neo4j – графовая база данных, оптимизированная для запросов и их хранения в структуре связей, и Claude Sonnet от Anthropic – языковая модель, которая особенно хорошо подходит для обработки структурированного контента, подобного XML.

Ключевой подход состоит в избежании прямой генерации Cypher-запросов с помощью LLM, что часто приводило к синтаксическим ошибкам или неконтролируемому дублированию сущностей. Вместо этого мы использовали сильные стороны Claude: генерирование структурированных XML-подобных представлений знаний, которые затем детерминированно парсились и вставлялись в графовую базу данных с помощью специальной логики.

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

Технические детали

Наша архитектура состоит из трех основных частей:

  1. Графовая база данных (Neo4j). Связи между объектами хранятся в Neo4j, используя ее способность определять именованные, направленные ребра между объектами. Такая структура позволяет моделировать кластеры связанных данных и осуществлять контекстные запросы. Однако непосредственное генерирование Cypher-запросов с помощью LLM оказалось ненадежным – особенно по мере роста объема базы знаний. Вместо этого мы внедрили промежуточный XML-подобный формат в качестве выхода LLM, который проще создавать для Claude Sonnet и который более детерминирован для анализа.
  2. Пайплайн предварительной обработки. Тексты, полученные от пользователей, могут существенно отличаться по длине, стилю и формату по сравнению с короткими структурированными записями, которые хранятся в графе. Чтобы заполнить этот пробел, мы ввели процесс “символьной нормализации”: использование подсказок языковой модели для выделения ключевых сущностей, уменьшения многословности и приведения как пользовательских запросов, так и внутренних данных к общему упрощенному формату. Эти символические представления являются короткими, канонизированными фразами, которые можно непосредственно встраивать и сравнивать, используя векторное сходство.
  3. Системная интеграция с RAG. Встраивания (embeddings) символьных полей используются в RAG-пайплайне для получения наиболее релевантных данных, связанных с графами. Это позволяет получать результаты, которые похожи не только по содержанию, но и по контексту и структуре связаны с другими элементами знаний. Сочетая встраивание сходства с фильтрацией на основе графов, мы достигаем более качественных ответов, лучшей интерпретируемости результатов, и сохранения целостной структуры данных.

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

Стек технологий

Neo4j

Neo4j

claude

Claude

langchain

Langchain