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

Задача

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

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


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

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

Neo4j

Claude
