База знаний

RAG-система: из каких частей состоит и как ее собрать для компании

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

Из каких частей состоит RAG-система?

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

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

Часть

Что делает

Главное решение

Загрузка

Достает текст и структуру из файлов

Что делать со сканами и таблицами

Чанкинг

Режет документ на фрагменты

По символам или по разделам документа

Эмбеддинги

Превращает фрагмент и вопрос в векторы

Какая модель и какой размер вектора

Векторный индекс

Хранит векторы и ищет близкие

Отдельная база или PostgreSQL

Ранжирование

Пересортирует найденное по точности

Нужен ли второй проход моделью-ранжировщиком

Генерация

Пишет ответ по фрагментам

Что делать, если фрагментов нет

Права доступа

Отсекает чужие документы при поиске

Где проверять права: в индексе или после

Журнал

Сохраняет вопрос, фрагменты и ответ

Что хранить и как оценивать качество

Фреймворки собирают эти части в одну цепочку. LangChain, LlamaIndex и Haystack — открытые фреймворки с готовыми компонентами для этих шагов, а у LangChain есть официальный набор LangChain Skills с разделом про RAG.

Как загрузить документы в RAG-базу?

Загрузка достает из файла текст, порядок чтения и таблицы. Фрагмент с перепутанными колонками таблицы модель потом перескажет с ошибкой.

Для этого шага есть открытая библиотека Docling. Ее начала команда IBM Research в Цюрихе, распространяется она по лицензии MIT. Docling читает PDF, DOCX, PPTX, XLSX, HTML, письма EML и MSG, распознает структуру страницы, таблицы и порядок чтения. Для сканов в ней есть распознавание текста. Подключить ее к агенту можно через Docling MCP.

На этом шаге принимают три решения. Сканы распознают и выборочно сверяют с оригиналом. Таблицы сохраняют вместе с заголовками колонок. В метаданные каждого файла записывают отдел, дату вступления в силу и уровень доступа. Метаданные понадобятся позже, на шаге прав.

Как резать документы на чанки?

Чанк — фрагмент документа, который поиск находит и отдает модели целиком. Слишком мелкий чанк теряет контекст, слишком крупный приносит модели лишний текст.

LangChain советует начинать с рекурсивного разделителя RecursiveCharacterTextSplitter. Он старается сохранить абзац целиком, длинный абзац делит по предложениям, а предложение в крайнем случае по словам. Для документов с разметкой у фреймворка есть разделители по заголовкам Markdown и тегам HTML.

Регламенты и договоры удобнее резать по структуре документа, один пункт или раздел с номером на чанк. Тогда в ответе можно сослаться на «пункт 4.2», и сотрудник найдет его в оригинале. Размер чанка я проверяю на 20–30 реальных вопросах отдела и меняю, если ответ собирается из обрывков. Число вопросов здесь мой рабочий ориентир.

Какую модель эмбеддингов выбрать?

Модель эмбеддингов переводит текст в вектор, набор чисел со смыслом текста. Ее выбирают один раз для всего индекса. Векторы разных моделей между собой не сравнивают, поэтому смена модели означает пересчет всей базы.

У Yandex AI Studio модели парные. Модель для документов кодирует фрагменты базы, модель для запросов кодирует короткий вопрос сотрудника. Модель первой версии выдает вектор длиной 256 чисел, модель второй версии для документов поддерживает 128, 256, 512 и 768.

У OpenAI модель text-embedding-3-small выдает 1536 чисел, text-embedding-3-large выдает 3072. На вход обе берут до 8192 токенов. Параметр dimensions укорачивает вектор, если хранилище не принимает длинные.

Длина вектора влияет на выбор хранилища. Это видно на следующем шаге, где у PostgreSQL есть свой предел. Параметры моделей проверены по документации Yandex AI Studio и OpenAI на 23 октября 2026 года.

Где хранить векторы и какую базу выбрать?

Векторная база данных для RAG хранит векторы фрагментов и быстро находит ближайшие к вектору вопроса. Для этого pgvector и Qdrant строят граф HNSW. Его описали Ю. А. Мальков и Д. А. Яшунин в статье 2016 года. Граф ищет приближенно и теряет часть точности ради скорости, а степень потери задают параметры индекса.

Хранилища делятся на три группы. Расширение pgvector добавляет векторы в PostgreSQL. Открытые базы Qdrant, Chroma и Milvus ставят на свой сервер или берут в облаке. Третья группа — готовый поиск в облаке поставщика модели, как в Yandex AI Studio.

pgvector в PostgreSQL

Расширение удобно, если PostgreSQL в компании уже есть. Без индекса pgvector ищет точно, перебором. Индексы HNSW и IVFFlat ускоряют поиск, но для типа vector принимают не больше 2000 измерений. Вектор text-embedding-3-large в 3072 числа придется хранить в типе halfvec с пределом 4000 или укоротить.

Отдельная векторная база

Qdrant фильтрует поиск по метаданным фрагмента и объединяет результаты векторного и словарного поиска методом RRF, по позициям документов в обоих списках. У Qdrant есть официальный Qdrant MCP Server. Chroma распространяется по лицензии Apache 2.0, работает локально, на своем сервере или в облаке и умеет поиск по словам без векторов, для нее есть Chroma MCP Server. Milvus разграничивает права на трех уровнях: экземпляр, база и коллекция; агенту его открывает MCP-сервер для Milvus.

Мой выбор для первого отдела — pgvector, если PostgreSQL уже работает, и Qdrant, если нет. Отдельная база оправдана, когда фрагментов миллионы и нужна сложная фильтрация. Версия pgvector на 23 октября 2026 года — 0.8.7.

Зачем нужно ранжирование результатов?

Векторный поиск быстрый, но грубый. Вопрос и документ он кодирует по отдельности и может вернуть близкий по теме, но бесполезный для ответа фрагмент.

Ранжирование добавляет второй проход. По документации библиотеки Sentence Transformers быстрый поиск отбирает около 100 кандидатов, затем модель-ранжировщик читает вопрос и каждый фрагмент вместе и ставит оценку. Ранжировщик точнее, но читает каждую пару вопроса и фрагмента отдельно, поэтому миллионы документов ему не по силам, потому что каждая пара вопроса и фрагмента требует отдельного прогона модели.

Готовые ранжировщики продают как сервис. Модель jina-reranker-v3.5 у Jina AI многоязычная, и подключить ее к агенту можно через Jina AI MCP. Пользу второго прохода измерила Anthropic в материале о Contextual Retrieval. Вместе с пояснениями к фрагментам и поиском BM25 ранжирование снизило долю неудачных поисков на 67%. Параметры сервисов проверены 23 октября 2026 года.

Ранжирование имеет смысл добавлять после первых проверок, когда журнал покажет, что нужный фрагмент находится, но стоит в выдаче ниже бесполезных.

Как модель пишет ответ по фрагментам?

Генерация получает вопрос, отобранные фрагменты и инструкцию. Инструкция задает три правила. Модель отвечает только по фрагментам, прикладывает ссылку на документ и пункт, а если фрагментов не хватило, пишет «в документах ответа нет».

Третье правило важнее остальных. Без него модель дописывает ответ из своей памяти, и выдумка выглядит так же уверенно, как правда. Почему так происходит и как такие ответы ловить, я разобрал в статье «Галлюцинации нейросети: почему ИИ выдумывает и как это проверить».

Модель для ответа выбирают отдельно от модели эмбеддингов. Если в документах есть персональные данные, место работы модели решают вместе со шагом прав.

Как разграничить доступ в RAG-системе?

Поиск должен отдавать сотруднику только те фрагменты, которые он может открыть в исходной системе. OWASP в списке рисков LLM08:2025 называет утечку через общую векторную базу отдельной угрозой и советует хранилища, которые проверяют права в момент поиска.

Права передают через метаданные. Каждый фрагмент несет метку отдела или группы, и поиск идет с фильтром по группам сотрудника. Qdrant советует создавать индексы по полям фильтра до загрузки данных.

У pgvector есть ловушка. Фильтр WHERE срабатывает после поиска по индексу, и при настройках по умолчанию условие, которому отвечает 10% строк, вернет в среднем около четырех строк. С версии 0.8.0 расширение умеет итеративный поиск, который сканирует индекс дальше, пока не наберет нужное число строк.

Для хранения в облаке действует закон 152-ФЗ. Часть 5 статьи 18 требует вести первичную базу персональных данных граждан России на территории страны. Статья 12 регулирует передачу данных за рубеж, в том числе зарубежному поставщику модели. Схему хранения индекса и место работы модели фиксируют до загрузки первого файла.

Что записывать в журнал и как оценивать?

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

Те же записи нужны для оценки качества. Метод RAGAS, который описали Шахул Эс и соавторы в 2023 году, оценивает соответствие ответа фрагментам, соответствие ответа вопросу и отношение найденных фрагментов к вопросу. Эталонные ответы людей метод не требует. Ответы на спорные вопросы все равно сверяет ответственный за тему сотрудник.

Если агент вызывает внешние системы, журнал дополняют записями о вызовах. Какие поля нужны там, я описал в статье «MCP-сервер простыми словами: как ИИ подключается к вашим системам».

Когда нужен граф вместо векторов?

Графовый RAG, или GraphRAG, отвечает на вопросы обо всем массиве документов. Обычный поиск находит отдельные фрагменты и не справляется с вопросом «какие темы чаще всего встречаются в претензиях за год».

Метод описали Даррен Эдж и соавторы из Microsoft Research в апреле 2024 года. Модель извлекает из документов сущности и связи, собирает их в граф и делит граф на сообщества. Для каждого сообщества модель заранее пишет краткое содержание, и ответ на общий вопрос собирается из этих содержаний. Авторы проверяли метод на наборах данных около миллиона токенов.

Открытая реализация GraphRAG от Microsoft предупреждает, что индексация может обойтись дорого, и советует начинать с малого. Граф можно хранить в графовой базе Neo4j и открыть агенту через Neo4j Labs MCP Servers. Для вопросов по конкретному регламенту граф избыточен, его добавляют под аналитические вопросы.

Где граница между системой и человеком?

RAG-система ищет фрагменты, пишет ответ и прикладывает ссылку. Она видит только загруженные документы и только в пределах прав сотрудника. Документы она не меняет и решений не принимает.

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

Для пилота я бы взял один отдел, 50–100 документов, права только на чтение и две недели журнала. Это ориентир из моей практики, не норма. Как собрать такую базу и кто за нее отвечает, я описал в статье «ИИ-база знаний компании: как собрать ее из документов». С перечнем документов отдела можно прийти на разбор ИИ-базы знаний под ваши регламенты, а другие материалы собраны в рубрике «База знаний».

Частые вопросы

Чем RAG-система отличается от обычной RAG-модели?

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

Можно ли собрать RAG-систему без облака?

Да. Docling, pgvector, Qdrant, Chroma и Milvus ставятся на собственный сервер компании. Эмбеддинги и ответы тогда дают открытые модели, развернутые там же. Облачный сервис проще запустить, но при персональных данных в документах его проверяют по части 5 статьи 18 и статье 12 закона 152-ФЗ.

Нужна ли векторная база данных для RAG?

Отдельный продукт нужен не всегда. Если PostgreSQL в компании уже работает, расширение pgvector хранит векторы рядом с остальными данными и поддерживает индексы HNSW и IVFFlat. Отдельная база вроде Qdrant или Milvus нужна при миллионах фрагментов, сложной фильтрации по метаданным и нагрузке, которую не хочется смешивать с учетной системой.

Когда выбирать GraphRAG вместо обычного RAG?

Когда сотрудники спрашивают о закономерностях во всем массиве документов, например о повторяющихся темах претензий или общих рисках по договорам. На вопрос о конкретном пункте регламента обычный поиск отвечает быстрее и дешевле. Граф сначала строят на части документов и сравнивают его ответы с обычным поиском на одних и тех же вопросах.

Источники

  1. Docling, документация (IBM Research Zurich, лицензия MIT) (откроется в новой вкладке)
  2. LangChain. Text splitters, документация (откроется в новой вкладке)
  3. Yandex AI Studio. Эмбеддинги, документация (откроется в новой вкладке)
  4. OpenAI. Vector embeddings, документация API (откроется в новой вкладке)
  5. Malkov, Yashunin. Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs (2016) (откроется в новой вкладке)
  6. pgvector, репозиторий и документация (версия 0.8.7) (откроется в новой вкладке)
  7. Qdrant. Filtering, документация (откроется в новой вкладке)
  8. Qdrant. Hybrid and multi-stage queries, документация (откроется в новой вкладке)
  9. Chroma, документация (откроется в новой вкладке)
  10. Milvus. Role-based access control, документация (откроется в новой вкладке)
  11. Sentence Transformers. Retrieve & Re-Rank (откроется в новой вкладке)
  12. Jina AI. Reranker (откроется в новой вкладке)
  13. Anthropic. Introducing Contextual Retrieval (19 сентября 2024) (откроется в новой вкладке)
  14. OWASP Top 10 for LLM Applications 2025. LLM08:2025 Vector and Embedding Weaknesses (откроется в новой вкладке)
  15. Es et al. Ragas: Automated Evaluation of Retrieval Augmented Generation (2023) (откроется в новой вкладке)
  16. Edge et al. From Local to Global: A Graph RAG Approach to Query-Focused Summarization (24 апреля 2024) (откроется в новой вкладке)
  17. Microsoft GraphRAG, репозиторий (откроется в новой вкладке)
  18. Microsoft GraphRAG, документация (откроется в новой вкладке)
  19. Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных» (откроется в новой вкладке)

Разберем вашу задачу

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

Обсудить задачуУслуга: ИИ-база знаний компании
Все статьи в рубрике «База знаний»

База знаний8 мин чтения

Эмбеддинг простыми словами: как ИИ находит смысл в тексте

Эмбеддинг — это вектор, то есть список из сотен или тысяч чисел, которым модель описывает смысл слова, фразы или документа. У близких по смыслу текстов близкие векторы. На этом стоит поиск по смыслу: система находит похожий пункт договора или вопрос в базе знаний, даже если слова в них разные.

База знаний8 мин чтения

Галлюцинации нейросети: почему ИИ выдумывает и как это проверить

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

База знаний6 мин чтения

ИИ-база знаний компании: как собрать ее из документов

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