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