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-системы ниже.
Векторный поиск: как это работает?¶
Что такое векторы?¶
Вектор — это математическое представление смысла текста в виде чисел.
Аналогия: Как координаты на карте. Тексты с похожим смыслом находятся "близко" друг к другу в пространстве векторов.
Пример: - "Договор аренды" и "Арендное соглашение" — близкие векторы (похожий смысл) - "Договор аренды" и "Уголовное преступление" — далекие векторы (разный смысл)
Как работает поиск?¶
-
Индексация: Все ваши документы преобразуются в векторы и сохраняются в векторной базе данных
-
Поиск: Ваш вопрос тоже преобразуется в вектор, и система ищет документы с похожими векторами
-
Ранжирование: Документы сортируются по релевантности (близости векторов)
-
Выбор: Берутся наиболее релевантные документы (обычно 3-5)
Embedding: что это и как работает?¶
Что такое embedding?¶
Embedding (встраивание, эмбеддинг) — это процесс преобразования текста в числовой вектор, который математически представляет смысл текста.
Простыми словами: Embedding превращает слова и предложения в числа, которые сохраняют информацию о смысле текста.
Аналогия: Как GPS-координаты для текста. Тексты с похожим смыслом получают "координаты" близко друг к другу в многомерном пространстве.
Как работает embedding?¶
Процесс создания embedding¶
-
Текст на входе: "Договор аренды недвижимости"
-
Модель embedding: Обрабатывает текст через нейронную сеть
-
Вектор на выходе: Массив чисел, например:
[0.23, -0.45, 0.67, ..., 0.12](обычно 384, 512, 768 или 1536 чисел) -
Сохранение: Вектор сохраняется в векторной базе данных вместе с исходным текстом
Почему embedding важен для RAG?¶
Без embedding: Система ищет по точному совпадению слов.
С embedding: Система понимает смысл и находит документы с похожим смыслом, даже если слова разные.
Пример: - Ваш вопрос: "Как расторгнуть договор аренды?" - Система найдет документы со словами: "расторжение", "прекращение", "аннулирование", "разрыв договора" — все это близко по смыслу
Размерность embedding¶
Размерность — это количество чисел в векторе.
Популярные размерности: - 384: Меньше размер, быстрее поиск, но может быть менее точным - 512: Хороший баланс между скоростью и качеством - 768: Высокое качество, используется во многих моделях - 1536: Очень высокое качество (например, OpenAI text-embedding-3-large)
Выбор: Для юридических документов обычно используют 768 или 1536 для лучшего качества поиска.
Как измеряется похожесть векторов?¶
Метрики похожести:
- Косинусное сходство (Cosine Similarity) — самый популярный
- Измеряет угол между векторами
- Диапазон: от -1 до 1
-
Чем ближе к 1, тем более похожи тексты
-
Евклидово расстояние (Euclidean Distance)
- Измеряет прямую "расстояние" между векторами
-
Чем меньше расстояние, тем более похожи тексты
-
Скалярное произведение (Dot Product)
- Умножение векторов
- Чем больше значение, тем более похожи тексты
Для RAG: Обычно используется косинусное сходство, так как оно лучше работает с текстами разной длины.
Модели для embedding¶
Что такое embedding-модель?¶
Embedding-модель — это специальная нейронная сеть, обученная преобразовывать текст в векторы, сохраняющие смысловую информацию.
Отличие от обычных LLM: - LLM: Генерирует текст - Embedding-модель: Преобразует текст в числа (векторы)
Критерии выбора embedding-модели¶
При выборе модели для юридических документов учитывайте:
- Поддержка русского языка: Модель должна быть обучена на русских текстах
- Размерность вектора: Больше размерность = лучше качество, но медленнее поиск
- Контекстное окно: Максимальная длина текста, который можно обработать
- Скорость: Как быстро модель создает embedding
- Локальность: Можно ли запустить локально (важно для конфиденциальности)
Популярные embedding-модели¶
OpenAI text-embedding-3¶
Особенности: - Очень высокое качество - Размерности: 512, 1536 - Контекстное окно: 8192 токена - Платная (но недорогая) - Требует API-ключ
Для юристов: Отличный выбор, если можно использовать облачный сервис.
Модели: - text-embedding-3-small: 1536 размерность, быстрая - text-embedding-3-large: 3072 размерность, максимальное качество
sentence-transformers¶
Что это: Библиотека с множеством open-source моделей для embedding.
Особенности: - Бесплатные модели - Можно запустить локально - Много моделей для разных языков - Хорошая документация
Популярные модели для русского языка:
- paraphrase-multilingual-MiniLM-L12-v2
- Размерность: 384
- Поддержка: 50+ языков, включая русский
-
Быстрая, хороша для начала
-
sentence-transformers/LaBSE
- Размерность: 768
- Поддержка: 109 языков
-
Хорошее качество для многоязычных задач
-
intfloat/multilingual-e5-large
- Размерность: 1024
- Очень хорошее качество
-
Поддержка русского языка
-
cointegrated/rubert-tiny2
- Размерность: 312
- Специально для русского языка
-
Очень быстрая
-
ai-forever/sbert_large_nlu_ru
- Размерность: 1024
- Специально для русского языка
- Высокое качество
Для юристов: 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 — протокол, который позволяет моделям безопасно взаимодействовать с внешними инструментами.