Перейти к содержанию

RAG: поиск и генерация на основе ваших документов

В этом разделе мы разберем RAG (Retrieval-Augmented Generation) — технологию, которая позволяет ИИ-моделям работать с вашими собственными документами и базами знаний.

Что такое RAG? Простое объяснение

Аналогия: ИИ с собственной библиотекой

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

RAG — это тот же юрист, но с доступом к вашей личной библиотеке: 1. Вы задаете вопрос 2. Юрист ищет релевантные документы в библиотеке 3. Изучает найденные документы 4. Отвечает на основе найденной информации

Результат: Ответы точные, основанные на ваших реальных документах, а не на общих знаниях модели.


Техническое определение

RAG (Retrieval-Augmented Generation) — это техника, которая: 1. Retrieval (поиск): Ищет релевантные документы в вашей базе 2. Augmented (усиление): Добавляет найденные документы в контекст модели 3. Generation (генерация): Модель генерирует ответ на основе найденных документов


Зачем нужен RAG?

Проблемы обычных моделей

1. Ограниченные знания

Модели обучаются на данных до определенной даты. Они не знают: - Ваших внутренних документов - Актуальных изменений в законодательстве - Специфики вашей организации - Конкретных договоров и дел

Пример: Модель может не знать о новом законе, принятом месяц назад, или о вашем внутреннем регламенте.


2. Галлюцинации

Модели могут "придумывать" информацию, которая выглядит правдоподобно, но неверна.

Пример: Модель может указать несуществующую статью закона или неправильную дату решения.

RAG решает: Модель отвечает на основе реальных документов, которые вы предоставили.


3. Контекстное окно

Даже большие модели имеют ограничение на длину обрабатываемого текста.

Проблема: Нельзя загрузить всю базу документов сразу.

RAG решает: Ищет только релевантные части документов и загружает их.


Преимущества RAG

Точность: Ответы основаны на ваших реальных документах ✅ Актуальность: Можете обновлять базу документов ✅ Специфичность: Модель знает вашу специфику ✅ Прозрачность: Можно проверить источники ответов ✅ Безопасность: Данные остаются в вашей инфраструктуре


Как работает RAG?

Детальное описание процесса работы RAG-системы с диаграммами и всеми этапами представлено в разделе Архитектура RAG-системы ниже.


Векторный поиск: как это работает?

Что такое векторы?

Вектор — это математическое представление смысла текста в виде чисел.

Аналогия: Как координаты на карте. Тексты с похожим смыслом находятся "близко" друг к другу в пространстве векторов.

Пример: - "Договор аренды" и "Арендное соглашение" — близкие векторы (похожий смысл) - "Договор аренды" и "Уголовное преступление" — далекие векторы (разный смысл)


Как работает поиск?

  1. Индексация: Все ваши документы преобразуются в векторы и сохраняются в векторной базе данных

  2. Поиск: Ваш вопрос тоже преобразуется в вектор, и система ищет документы с похожими векторами

  3. Ранжирование: Документы сортируются по релевантности (близости векторов)

  4. Выбор: Берутся наиболее релевантные документы (обычно 3-5)


Embedding: что это и как работает?

Что такое embedding?

Embedding (встраивание, эмбеддинг) — это процесс преобразования текста в числовой вектор, который математически представляет смысл текста.

Простыми словами: Embedding превращает слова и предложения в числа, которые сохраняют информацию о смысле текста.

Аналогия: Как GPS-координаты для текста. Тексты с похожим смыслом получают "координаты" близко друг к другу в многомерном пространстве.


Как работает embedding?

Процесс создания embedding

  1. Текст на входе: "Договор аренды недвижимости"

  2. Модель embedding: Обрабатывает текст через нейронную сеть

  3. Вектор на выходе: Массив чисел, например: [0.23, -0.45, 0.67, ..., 0.12] (обычно 384, 512, 768 или 1536 чисел)

  4. Сохранение: Вектор сохраняется в векторной базе данных вместе с исходным текстом


Почему embedding важен для RAG?

Без embedding: Система ищет по точному совпадению слов.
С embedding: Система понимает смысл и находит документы с похожим смыслом, даже если слова разные.

Пример: - Ваш вопрос: "Как расторгнуть договор аренды?" - Система найдет документы со словами: "расторжение", "прекращение", "аннулирование", "разрыв договора" — все это близко по смыслу


Размерность embedding

Размерность — это количество чисел в векторе.

Популярные размерности: - 384: Меньше размер, быстрее поиск, но может быть менее точным - 512: Хороший баланс между скоростью и качеством - 768: Высокое качество, используется во многих моделях - 1536: Очень высокое качество (например, OpenAI text-embedding-3-large)

Выбор: Для юридических документов обычно используют 768 или 1536 для лучшего качества поиска.


Как измеряется похожесть векторов?

Метрики похожести:

  1. Косинусное сходство (Cosine Similarity) — самый популярный
  2. Измеряет угол между векторами
  3. Диапазон: от -1 до 1
  4. Чем ближе к 1, тем более похожи тексты

  5. Евклидово расстояние (Euclidean Distance)

  6. Измеряет прямую "расстояние" между векторами
  7. Чем меньше расстояние, тем более похожи тексты

  8. Скалярное произведение (Dot Product)

  9. Умножение векторов
  10. Чем больше значение, тем более похожи тексты

Для RAG: Обычно используется косинусное сходство, так как оно лучше работает с текстами разной длины.


Модели для embedding

Что такое embedding-модель?

Embedding-модель — это специальная нейронная сеть, обученная преобразовывать текст в векторы, сохраняющие смысловую информацию.

Отличие от обычных LLM: - LLM: Генерирует текст - Embedding-модель: Преобразует текст в числа (векторы)


Критерии выбора embedding-модели

При выборе модели для юридических документов учитывайте:

  1. Поддержка русского языка: Модель должна быть обучена на русских текстах
  2. Размерность вектора: Больше размерность = лучше качество, но медленнее поиск
  3. Контекстное окно: Максимальная длина текста, который можно обработать
  4. Скорость: Как быстро модель создает embedding
  5. Локальность: Можно ли запустить локально (важно для конфиденциальности)

Популярные embedding-модели

OpenAI text-embedding-3

Особенности: - Очень высокое качество - Размерности: 512, 1536 - Контекстное окно: 8192 токена - Платная (но недорогая) - Требует API-ключ

Для юристов: Отличный выбор, если можно использовать облачный сервис.

Модели: - text-embedding-3-small: 1536 размерность, быстрая - text-embedding-3-large: 3072 размерность, максимальное качество


sentence-transformers

Что это: Библиотека с множеством open-source моделей для embedding.

Особенности: - Бесплатные модели - Можно запустить локально - Много моделей для разных языков - Хорошая документация

Популярные модели для русского языка:

  1. paraphrase-multilingual-MiniLM-L12-v2
  2. Размерность: 384
  3. Поддержка: 50+ языков, включая русский
  4. Быстрая, хороша для начала

  5. sentence-transformers/LaBSE

  6. Размерность: 768
  7. Поддержка: 109 языков
  8. Хорошее качество для многоязычных задач

  9. intfloat/multilingual-e5-large

  10. Размерность: 1024
  11. Очень хорошее качество
  12. Поддержка русского языка

  13. cointegrated/rubert-tiny2

  14. Размерность: 312
  15. Специально для русского языка
  16. Очень быстрая

  17. ai-forever/sbert_large_nlu_ru

  18. Размерность: 1024
  19. Специально для русского языка
  20. Высокое качество

Для юристов: ai-forever/sbert_large_nlu_ru или intfloat/multilingual-e5-large — лучший выбор для русских юридических документов.


Cohere Embed

Особенности: - Высокое качество - Размерность: 1024 - Контекстное окно: 512 токенов - Платная - Требует API-ключ

Для юристов: Хорошая альтернатива OpenAI, если нужна поддержка русского языка.


BGE (BAAI General Embedding)

Особенности: - Open-source модели - Очень высокое качество - Поддержка русского языка - Можно запустить локально

Модели: - BAAI/bge-large-en-v1.5: Для английского - BAAI/bge-m3: Многоязычная, включая русский

Для юристов: Отличный выбор для локального развертывания.


Jina Embeddings

Особенности: - Open-source - Поддержка длинных текстов (до 8192 токенов) - Хорошее качество - Можно запустить локально

Для юристов: Хорошо для длинных юридических документов.


Сравнение моделей для русского языка

Модель Размерность Локальная Качество Скорость
OpenAI text-embedding-3 1536 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
ai-forever/sbert_large_nlu_ru 1024 ⭐⭐⭐⭐⭐ ⭐⭐⭐
intfloat/multilingual-e5-large 1024 ⭐⭐⭐⭐ ⭐⭐⭐

Рекомендации по выбору модели

Для начала

Используйте paraphrase-multilingual-MiniLM-L12-v2 — быстрая, бесплатная, работает локально.

Для продакшена

Используйте ai-forever/sbert_large_nlu_ru или intfloat/multilingual-e5-large — лучшее качество для русского языка.

Для конфиденциальности

Используйте локальные модели (sentence-transformers, BGE) — данные не покидают вашу инфраструктуру.

Для максимального качества

Используйте OpenAI text-embedding-3, если можно использовать облачный сервис.


Векторные базы данных

Что это?

Векторная база данных — это специальная база данных, которая хранит документы в виде векторов и позволяет быстро находить похожие по смыслу тексты.

Отличие от обычной БД: - Обычная БД ищет по точному совпадению слов - Векторная БД ищет по смыслу

Пример: - Обычный поиск: "договор аренды" найдет только документы с этими словами - Векторный поиск: "договор аренды" найдет также "арендное соглашение", "соглашение об аренде" и т.д.


Популярные векторные БД

Qdrant

Особенности: - Очень быстрая работа - Хорошая масштабируемость - Поддержка фильтров - Можно запустить локально или в облаке

Для юристов: Хороший выбор для работы с большими базами документов.


Pinecone

Особенности: - Управляемый сервис (не нужно настраивать) - Очень быстрая работа - Хорошая документация - Платный (но есть бесплатный tier)

Для юристов: Удобно, если не хотите настраивать инфраструктуру.


Weaviate

Особенности: - Open-source - Поддержка графов - Хорошая интеграция с ML-моделями - Можно запустить локально

Для юристов: Хороший выбор для сложных сценариев.


Chroma

Особенности: - Очень простая в использовании - Легко интегрируется - Хорошо для начала работы - Можно запустить локально

Для юристов: Идеально для начала экспериментов.


Milvus

Особенности: - Очень масштабируемая - Подходит для больших объемов - Сложнее в настройке - Профессиональное решение

Для юристов: Для больших организаций с большими базами документов.


Графовые базы данных

Когда использовать графы?

Векторные БД хороши для поиска по смыслу, но графовые БД лучше для работы со связями.

Аналогия: - Векторная БД: как каталог в библиотеке (поиск по темам) - Графовая БД: как схема связей (кто с кем связан)


Примеры использования графов в юриспруденции

1. Анализ связей между сторонами

Задача: Найти все связи между компаниями в группе договоров.

Граф показывает: - Какие компании связаны договорами - Кто является бенефициаром - Аффилированные лица


2. Анализ судебной практики

Задача: Найти связанные дела и прецеденты.

Граф показывает: - Какие дела ссылаются друг на друга - Какие суды выносили похожие решения - Эволюцию правовых позиций


3. Compliance и проверки

Задача: Проверить соответствие требованиям регуляторов.

Граф показывает: - Связи между требованиями - Зависимости между правилами - Цепочки соответствия


Популярные графовые БД

  • Neo4j: Самая популярная, хорошая документация
  • ArangoDB: Поддерживает и графы, и документы
  • Amazon Neptune: Управляемый сервис от AWS

Примеры RAG-систем

LightRAG

Что это: Готовая RAG-система с поддержкой графов.

Особенности: - Автоматически строит граф знаний из документов - Комбинирует векторный поиск и графы - Хорошо работает с длинными документами

Для юристов: Хорошо для анализа сложных документов со множеством связей.


GraphRAG

Что это: RAG-система от Microsoft с акцентом на графы.

Особенности: - Автоматически извлекает сущности и связи - Строит граф знаний - Хорошо для анализа больших корпусов документов

Для юристов: Для анализа больших баз документов (например, вся судебная практика по отрасли).


LangChain + векторная БД

Что это: Фреймворк для построения RAG-систем.

Особенности: - Гибкость в настройке - Много готовых компонентов - Хорошая документация

Для юристов: Для разработки собственных RAG-систем.


Практические примеры использования RAG

Пример 1: База знаний по внутренним регламентам

Задача: Сотрудники задают вопросы о внутренних правилах компании.

Решение RAG: 1. Загружаете все внутренние регламенты в векторную БД 2. Сотрудник задает вопрос: "Как оформить командировку?" 3. Система находит релевантные разделы регламентов 4. Модель отвечает на основе найденных документов

Преимущества: - Точные ответы на основе реальных регламентов - Можно обновлять базу при изменении правил - Не нужно искать вручную


Пример 2: Анализ договорной базы

Задача: Быстро находить похожие договоры и анализировать их.

Решение RAG: 1. Загружаете все договоры в векторную БД 2. Задаете вопрос: "Найди все договоры аренды с условием досрочного расторжения" 3. Система находит релевантные договоры 4. Модель анализирует найденные договоры и дает ответ

Преимущества: - Быстрый поиск по смыслу, а не по ключевым словам - Анализ на основе реальных договоров - Можно найти похожие случаи


Пример 3: Работа с судебной практикой

Задача: Находить релевантные судебные решения для конкретного дела.

Решение RAG: 1. Загружаете базу судебных решений в векторную БД 2. Описываете ситуацию: "Расторжение договора аренды по инициативе арендодателя" 3. Система находит похожие дела 4. Модель анализирует найденные решения и дает рекомендации

Преимущества: - Поиск по смыслу, а не по формальным признакам - Анализ на основе реальной практики - Можно найти неочевидные связи


Пример 4: Due Diligence

Задача: Анализ большого объема документов при проверке компании.

Решение RAG: 1. Загружаете все документы проверяемой компании 2. Задаете вопросы: "Какие есть риски в договорах?", "Есть ли нарушения в отчетности?" 3. Система находит релевантные документы 4. Модель анализирует и дает структурированный отчет

Преимущества: - Быстрый анализ больших объемов - Структурированные ответы - Можно задавать уточняющие вопросы


Архитектура RAG-системы

Компоненты

graph TB
    A[Документы] --> B[Разбиение на чанки]
    B --> C[Векторизация]
    C --> D[Векторная БД]
    E[Вопрос пользователя] --> F[Векторизация вопроса]
    F --> G[Поиск в БД]
    G --> D
    G --> H[Релевантные документы]
    H --> I[LLM с контекстом]
    I --> J[Ответ]

    style A fill:#e1f5ff
    style D fill:#fff4e1
    style I fill:#ffe1f5
    style J fill:#c8e6c9

Компоненты: 1. Загрузка документов: Получение документов из различных источников 2. Разбиение на чанки: Разделение длинных документов на части 3. Векторизация: Преобразование текста в векторы 4. Векторная БД: Хранение векторов 5. Поиск: Поиск релевантных документов 6. LLM: Генерация ответа на основе найденных документов


Детальный процесс RAG с embedding

Ниже представлена детальная диаграмма реального RAG-процесса, показывающая все этапы работы с embedding:

graph TD
    subgraph "Этап 1: Подготовка документов (Offline)"
        A1[Исходные документы<br/>PDF, DOCX, TXT] --> A2[Извлечение текста<br/>OCR, парсинг]
        A2 --> A3[Предобработка текста<br/>Очистка, нормализация]
        A3 --> A4[Разбиение на чанки<br/>Chunking с перекрытием]
        A4 --> A5[Метаданные<br/>Источник, дата, тип]
    end

    subgraph "Этап 2: Создание embedding (Offline)"
        A5 --> B1[Embedding-модель<br/>sentence-transformers, OpenAI]
        B1 --> B2[Вектор embedding<br/>384-1536 чисел]
        B2 --> B3[Сохранение в БД<br/>Вектор + текст + метаданные]
    end

    subgraph "Этап 3: Запрос пользователя (Online)"
        C1[Вопрос пользователя<br/>Как расторгнуть договор?] --> C2[Предобработка вопроса<br/>Нормализация, очистка]
        C2 --> C3[Embedding-модель<br/>Та же модель, что для документов]
        C3 --> C4[Вектор вопроса<br/>384-1536 чисел]
    end

    subgraph "Этап 4: Поиск релевантных документов (Online)"
        C4 --> D1[Поиск в векторной БД<br/>Qdrant, Pinecone, Chroma]
        B3 --> D1
        D1 --> D2[Вычисление похожести<br/>Косинусное сходство]
        D2 --> D3[Ранжирование результатов<br/>Сортировка по релевантности]
        D3 --> D4[Выбор топ-K документов<br/>Обычно 3-5 чанков]
    end

    subgraph "Этап 5: Формирование контекста (Online)"
        D4 --> E1[Извлечение текстов<br/>Чанки из БД]
        E1 --> E2[Добавление метаданных<br/>Источники, даты]
        E2 --> E3[Формирование промпта<br/>Вопрос + контекст + инструкции]
    end

    subgraph "Этап 6: Генерация ответа (Online)"
        E3 --> F1[LLM модель<br/>GPT-4, Claude, локальная модель]
        F1 --> F2[Генерация ответа<br/>На основе контекста]
        F2 --> F3[Постобработка<br/>Форматирование, проверка]
    end

    subgraph "Этап 7: Возврат результата (Online)"
        F3 --> G1[Ответ пользователю<br/>Текст с источниками]
        G1 --> G2[Метаданные<br/>Источники, релевантность, дата]
    end

    style A1 fill:#e1f5ff
    style B1 fill:#fff4e1
    style C3 fill:#fff4e1
    style D1 fill:#ffe1f5
    style F1 fill:#c8e6c9
    style G1 fill:#c8e6c9

Детальное описание этапов:

Этап 1: Подготовка документов (Offline)

  • Извлечение текста: Из PDF, DOCX, TXT и других форматов
  • Предобработка: Удаление лишних символов, нормализация
  • Разбиение на чанки: Разделение на части (обычно 500-1000 токенов) с перекрытием
  • Метаданные: Сохранение информации об источнике, дате, типе документа

Этап 2: Создание embedding (Offline)

  • Embedding-модель: Преобразует каждый чанк в вектор
  • Вектор: Массив чисел (384-1536 элементов)
  • Сохранение: Вектор сохраняется вместе с текстом и метаданными в векторную БД

Этап 3: Запрос пользователя (Online)

  • Вопрос: Пользователь задает вопрос
  • Предобработка: Нормализация вопроса
  • Embedding: Вопрос преобразуется в вектор той же моделью

Этап 4: Поиск релевантных документов (Online)

  • Поиск: Вектор вопроса сравнивается с векторами в БД
  • Похожесть: Вычисляется косинусное сходство или другая метрика
  • Ранжирование: Документы сортируются по релевантности
  • Выбор: Берутся топ-K наиболее релевантных чанков (обычно 3-5)

Этап 5: Формирование контекста (Online)

  • Извлечение: Тексты найденных чанков извлекаются из БД
  • Метаданные: Добавляется информация об источниках
  • Промпт: Формируется промпт для LLM: вопрос + контекст + инструкции

Этап 6: Генерация ответа (Online)

  • LLM: Модель генерирует ответ на основе промпта
  • Постобработка: Ответ форматируется и проверяется

Этап 7: Возврат результата (Online)

  • Ответ: Пользователь получает ответ с указанием источников
  • Метаданные: Информация о релевантности, источниках, дате

Ключевые моменты архитектуры

Offline vs Online: - Offline этапы (1-2): Выполняются один раз при загрузке документов - Online этапы (3-7): Выполняются при каждом запросе пользователя

Важность embedding-модели: - Одна и та же модель используется для документов и вопросов - Качество embedding напрямую влияет на качество поиска - Выбор модели — критически важное решение

Производительность: - Embedding документов: можно делать асинхронно, батчами - Поиск в БД: обычно очень быстрый (миллисекунды) - Генерация ответа: самая медленная часть (секунды)


Важные моменты при работе с RAG

1. Качество разбиения на чанки

Проблема: Как разбить документ на части?

Подходы: - По размеру: Фиксированный размер (например, 500 токенов) - По смыслу: Разбиение по параграфам, разделам - Перекрытие: Чанки перекрываются, чтобы не терять контекст

Рекомендация: Для юридических документов лучше разбивать по смыслу (разделы, статьи).


2. Выбор модели для векторизации (embedding)

Что это: Модель, которая преобразует текст в векторы (embedding).

Подробности: Детальное описание всех моделей, критерии выбора и рекомендации представлены в разделе Модели для embedding выше.

Ключевой момент: Для русских юридических документов используйте модели, специально обученные на русском языке (например, ai-forever/sbert_large_nlu_ru или intfloat/multilingual-e5-large).


3. Количество релевантных документов

Вопрос: Сколько документов добавлять в контекст?

Рекомендации: - 3-5 документов: Обычно достаточно - Больше документов: Может перегрузить контекст - Меньше документов: Может не хватить информации

Тестируйте: Оптимальное количество зависит от ваших документов и задач.


4. Обновление базы

Важно: RAG-система знает только то, что в базе. При обновлении документов нужно обновлять базу.

Решения: - Периодическое обновление - Инкрементальное обновление (только новые/измененные документы) - Real-time обновление (для критически важных документов)


Рекомендации для юридической практики

Совет 1: Начните с простого

Не пытайтесь сразу построить сложную систему. Начните с небольшой базы документов и простой векторной БД (например, Chroma).

Совет 2: Качество данных критично

RAG работает только с тем, что в базе. Убедитесь, что документы качественные и актуальные.

Совет 3: Тестируйте на реальных вопросах

Тестируйте систему на реальных вопросах ваших юристов, а не на общих примерах.

Совет 4: Учитывайте конфиденциальность

Юридические документы конфиденциальны. Используйте локальные решения или сервисы с гарантиями безопасности.

Совет 5: Комбинируйте подходы

Векторный поиск + графы могут дать лучшие результаты для сложных задач.


Резюме

  • RAG позволяет моделям работать с вашими собственными документами
  • Векторные БД ищут документы по смыслу, а не по ключевым словам
  • Графовые БД полезны для анализа связей
  • Качество данных критически важно для хорошего результата
  • RAG — ключевая технология для практического применения ИИ в юриспруденции

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

В следующем разделе мы разберем MCP — протокол, который позволяет моделям безопасно взаимодействовать с внешними инструментами.