Графы знаний vs векторный поиск в RAG для юриспруденции: настройка LightRAG 2026 | AiManual
AiManual Logo Ai / Manual.
20 Мар 2026 Гайд

Как графы знаний решают проблему RAG в юриспруденции: сравнение с векторным поиском и настройка LightRAG

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

Если вы пытались построить RAG-систему для юридических документов, вы знаете эту боль. Запрос про "срок исковой давности по договору подряда" возвращает кучу текстовых фрагментов. Они вроде бы релевантные. Но когда GPT-4o или Claude 3.7 пытается собрать ответ, получается каша из несвязанных положений. Модель пропускает критическую связь между "нарушением сроков" и "возмещением убытков". Или путает гражданский процесс с арбитражным. Пользователь - юрист с пятнадцатилетним стажем - смотрит на ответ как на детский лепет.

Теперь, в 2026 году, это стало совершенно очевидным. Векторный RAG, с его упрощенным представлением текста как облака точек в многомерном пространстве, просто не справляется с той сложной, структурированной и взаимосвязанной логикой, которая составляет суть права. Вы спрашиваете "Что будет, если я не уведомлю арендодателя за месяц о расторжении договора?" и получаете в ответ обрывки статей про сроки, уведомления и договоры аренды, но не понимаете, как эти части соединяются. Это все равно что пытаться собрать пазл, рассматривая только цвет каждого фрагмента, а не его форму и положение на картинке.

Юридическая область - это область связей, а не сходств. "Срок исковой давности" связан с "иском", "ответчиком", "основаниями для перерыва". Гражданский кодекс ссылается на Гражданский процессуальный кодекс. Правовая норма имеет сложную структуру: гипотеза, диспозиция, санкция. Просто искать "семантически похожие" фрагменты текста - это не просто неточно, это методологически неверно.

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

Но в 2026 году у нас есть оружие получше. Инструмент, который понимает связи по своей природе. Это граф знаний.

Граф знаний против векторов: Анатомия провала в юриспруденции

Давайте разберем, почему векторы проигрывают в этом домене, а графы выигрывают. Представьте себе статью 309 ГК РФ "Исполнение обязательств". В классическом RAG ее разбивают на чанки (например, по абзацам), каждый чанк превращают в эмбеддинг и кладут в векторную базу.

Запрос пользователя: "Какие последствия неисполнения денежного обязательства?" превращается в эмбеддинг запроса. Система ищет N ближайших соседей. Что она найдет? Возможно, куски текста, где упоминаются "денежное обязательство", "неисполнение", "последствия". Но она может пропустить критически важный абзац про проценты за пользование чужими денежными средствами (ст. 395 ГК РФ), потому что в нем нет точного совпадения слов. Или найдет его, но не поймет, что это именно тот механизм, который применяется в данной ситуации. Семантическая близость эмбеддингов не отражает логической правоприменимой связи.

А теперь представьте граф знаний, построенный на тех же данных. Сущности: "Денежное обязательство", "Неисполнение", "Проценты по ст. 395 ГК РФ", "Убытки". Связи: "Денежное обязательство" —[влечет за собой в случае неисполнения]→ "Проценты по ст. 395 ГК РФ". "Денежное обязательство" —[влечет за собой в случае неисполнения]→ "Возмещение убытков". "Проценты по ст. 395 ГК РФ" —[регулируются]→ "Статья 395 ГК РФ".

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

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

Но строить графы знаний вручную — адский труд. К счастью, на 2026 год мы имеем продвинутые методы автоматического извлечения сущностей и связей из текста с помощью LLM. Мы уже не зависим от шаблонных NER-моделей. Современные LLM, такие как Claude 3.5 Sonnet или GPT-4o (или их аналоги 2026 года), способны с хорошей точностью выделять юридические понятия и отношения между ними, следуя заданной онтологии.

LightRAG: Гибридный движок, который не заставляет выбирать

Вот где появляется LightRAG. Это не просто еще один фреймворк. Это признание того, что ни один метод поиска не является серебряной пулей. LightRAG (актуальная версия на март 2026 — 0.5.x) предлагает модульную, гибридную архитектуру, где граф знаний и векторный поиск работают вместе, а не конкурируют.

Ядро LightRAG — это идея "сборщика доказательств" (evidence collector). Для каждого запроса система запускает несколько параллельных стратегий поиска:

  • Векторный поиск по эмбеддингам текстовых фрагментов (чтобы ловить семантическую схожесть).
  • Поиск по ключевым словам (BM25 или что-то подобное) для точных терминов.
  • Графовый поиск — обход графа знаний от сущностей, найденных в запросе.

Результаты от всех этих стратегий поступают в модуль ранжирования (reranker), который оценивает их релевантность и важность для конечного ответа. Важнейший нюанс: графовый поиск приносит не только текстовые узлы, но и структуру связей. Эту структуру можно включить в контекст для LLM в виде текстового описания пути ("Концепция A связана с Концепцией B отношением 'является исключением для'"). Это дает модели карту местности, а не просто кучу камней.

Критерий Векторный RAG Графовый RAG (в LightRAG)
Понимание связей Слабое. Видит только семантическую близость. Сильное. Явно моделирует связи (ссылки, исключения, условия).
Многоаспектные запросы Находит фрагменты по каждому аспекту отдельно, не объединяет. Может находить узлы, соединяющие несколько аспектов через связи.
Контекстуализация Чанки вырваны из общего контекста документа. Граф сохраняет логическую структуру документа/предметной области.
Борьба с галлюцинациями Низкая. Модель интерполирует между несвязанными фрагментами. Высокая. Модель следует явным связям, что снижает "выдумывание".
Сложность внедрения Низкая. Есть куча готовых туториалов. Средняя/высокая. Требуется построение и поддержание графа.

Как я упоминал в статье про RAG 2026, гибридный подход — это уже не опция, а necessity. LightRAG просто формализует этот подход в удобном фреймворке.

Пошаговая настройка LightRAG для юридического домена

Теперь перейдем к практике. Давайте настроим LightRAG для работы с набором гражданско-правовых договоров. Цель: система должна точно отвечать на вопросы о правах, обязанностях, последствиях нарушений, ссылаясь на конкретные пункты.

1 Подготовка данных и онтологии

Первое и самое важное — определите, что будет узлами и ребрами в вашем графе. Для юриспруденции это может быть:

  • Узлы (сущности): Стороны договора (Арендодатель, Арендатор), Предмет договора, Цена, Срок, Права, Обязанности, Ответственность (Неустойка, Возмещение убытков), Условия расторжения.
  • Ребра (отношения): has_right (Сторона имеет Право), has_obligation, in_case_of_breach_leads_to (Нарушение ведет к Ответственности), is_defined_in (Пункт договора), references (Ссылается на статью закона).

Без четкой онтологии вы получите мусорный граф. Напишите схему в YAML или JSON.

2 Извлечение знаний в граф с помощью LLM

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

# Упрощенный пример промпта для извлечения знаний
extraction_prompt = """
Ты — юрист-аналитик. Извлеки из предоставленного текста договора аренды следующие сущности и отношения.
Верни ответ В ТОЧНОМ ФОРМАТЕ JSON без пояснений.

Сущности для извлечения: [Арендодатель, Арендатор, Арендная плата, Срок аренды, Обязанность по ремонту, Неустойка за просрочку оплаты].
Отношения: ["имеет обязанность", "имеет право", "устанавливает размер", "определяет срок", "предусматривает санкцию за"].

Текст договора: {document_text}

Формат ответа:
{
  "entities": [{"id": "e1", "type": "Арендодатель", "text": "ООО 'Луч'", "source_paragraph": "п. 1.1"}],
  "relations": [{"from": "e1", "to": "e3", "type": "имеет право", "source": "п. 4.2"}]
}
"""

Этот этап самый затратный по вызовам к LLM, но он выполняется один раз при индексации. Для больших объемов используйте батчи и модели с большим контекстом, такие как Claude 3.5 Sonnet (200K токенов) или аналоги 2026 года.

3 Настройка LightRAG: Сборщики и Ранжировщик

Установите LightRAG и настройте конфигурационный файл. Ключевые секции:

# lightrag_config.yaml
search:
  strategies:
    - name: "vector_search"
      type: "dense" # Векторный поиск
      encoder: "BAAI/bge-m3" # Современный мультиязычный энкодер на 2026 год
      top_k: 5

    - name: "keyword_search"
      type: "sparse" # Поиск по ключевым словам (BM25)
      top_k: 5

    - name: "graph_search"
      type: "graph"
      graph_db_uri: "bolt://localhost:7687" # Подключение к Neo4j
      max_hops: 3 # Сколько шагов по графу делать
      top_k: 10

reranker:
  model: "BAAI/bge-reranker-v2-m3" # Специальная модель для ранжирования, актуальная на 2026
  top_n: 7 # Сколько фрагментов передать в LLM после ранжирования

generation:
  llm: "openai:gpt-4o" # Или другая актуальная модель
  temperature: 0.1 # Низкая температура для фактологичности

Графовый поиск требует базу данных графов, например, Neo4j. Убедитесь, что вы загрузили туда граф, построенный на шаге 2.

4 Кастомизация промпта для юридического контекста

Промпт для LLM должен явно требовать следования связям из графа и цитирования источников.

legal_system_prompt = """
Ты — помощник юриста. Отвечай ТОЛЬКО на основе предоставленного контекста. Контекст включает:
1. Текстовые фрагменты из документов.
2. Связи между юридическими понятиями, представленные как [Сущность A] -> [Связь] -> [Сущность B].

ИСПОЛЬЗУЙ эти связи, чтобы строить логичный ответ. Если в связях указано, что право X возникает при условии Y, так и говори.
НЕ ПРИДУМЫВАЙ связей, которых нет в контексте.
ОБЯЗАТЕЛЬНО указывай источник информации (например, "п. 3.5 Договора" или "Граф: Арендатор -> имеет обязанность -> Вносить плату").
Если информация противоречива или недостаточна, так и скажи, не додумывая.

Вопрос: {question}
Контекст: {retrieved_context}
"""

Ошибки, которые сведут всю работу на нет (и как их избежать)

  1. Слишком примитивная онтология. Если вы определили только сущности "Документ" и "Статья", граф будет бесполезен. Детализируйте отношения. Вместо "связано" используйте "регулирует", "запрещает", "является основанием для".
  2. Слепая вера в LLM при извлечении. Всегда проводите выборочную валидацию. Настройте пайплайн так, чтобы непонятные или противоречивые извлечения попадали на проверку юристу. Автоматизация — это хорошо, но в праве цена ошибки высока.
  3. Игнорирование гибридности. Не отключайте векторный и keyword поиск в LightRAG! Графы могут пропустить важный фрагмент, который не попал в граф, но семантически релевантен. Как я писал в своей статье про гибридный поиск, именно комбинация методов дает стабильный результат.
  4. Забыть про обновление графа. Право меняется. Договоры добавляются. Настройте процесс инкрементального обновления графа, а не перестраивайте его с нуля каждый раз.
  5. Не тестировать на реальных кейсах. Не проверяйте на общих вопросах. Возьмите реальные запросы от юристов: "Если арендатор сделал неотделимые улучшения без согласия арендодателя, кто имеет на них право при расторжении?" Такой вопрос сразу покажет, может ли система пройти по цепочке: "неотделимые улучшения" -> "требуют согласия" -> "последствия отсутствия согласия" -> "права сторон при расторжении".

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

Что дальше? Графы как основа для юридического "рассуждения"

Настройка LightRAG — это только начало. Настоящая сила графов знаний раскрывается, когда вы начинаете использовать их не только для поиска, но и для проверки ответов.

Представьте себе модуль, который после генерации ответа LLM прогоняет утверждения из этого ответа по графу. Утверждение "Арендатор обязан делать капитальный ремонт" проверяется: есть ли в графе связь [Арендатор] -> [has_obligation] -> [Капитальный ремонт]? Если нет — система помечает ответ как потенциально недостоверный и может либо переспросить пользователя, либо вернуть ответ с оговоркой. Это следующий шаг, о котором я рассказывал в контексте систем типа RADAR, но теперь с использованием семантической структуры графа, а не статистики.

К 2026 году мы уже видим, как графы знаний из вспомогательной технологии превращаются в основу для систем, способных на элементы правового рассуждения. Это не замена юристу. Это мощнейший инструмент, который превращает хаотичную груду документов в структурированную, наглядную и, что самое главное, "понятную" для ИИ базу знаний. Векторный поиск дал нам "что похоже". Графовый поиск в LightRAG дает "что с чем связано и как". В юриспруденции второе неизмеримо важнее.

Следующий фронт — это конфликты источников. Как LightRAG справляется, когда договор ссылается на устаревшую редакцию закона? Об этом — в следующем разборе.

Подписаться на канал