RAG-система на заказ: разработка пайплайна поиска и ответов по вашим документам

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

Лёгкий пилот — от 150 000 ₽, 2–8 недельpgvector, Qdrant или Weaviate: выбор по вашим требованиямИсходный код и индексы остаются на ваших серверах

С чем приходят

Когда RAG нужно разрабатывать, а не подключать

Прототип отвечает мимо

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

Права на документы разные

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

Данные нельзя отправлять наружу

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

Поиск нужен как часть продукта

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

Что строим

Две формы RAG-системы: кто спрашивает и что мы сдаём

Форма определяет требования к правам, задержке и журналу. Если нужен готовый ассистент для сотрудников без доработок, смотрите страницу ИИ-ассистента по документам.

Форма
Кто спрашивает
Что сдаём
Где обычно ломается
ФормаАссистент для сотрудниковвопрос — ответ со ссылкой
Кто спрашиваетСотрудники отделов: регламенты, инструкции, техническая документация
Что сдаёмИндекс по источникам, права по отделам, окно вопросов или бот в мессенджере, журнал
Где обычно ломаетсяДокументы без текста (сканы), противоречащие редакции, права по отделам не доходят до поиска
ФормаПоиск внутри продуктадля клиентов вашего сервиса
Кто спрашиваетПользователи вашей SaaS-платформы или кабинета
Что сдаёмПрограммный интерфейс поиска и ответов, раздельные индексы клиентов, лимиты по тарифу
Где обычно ломаетсяДанные клиента А попадают в ответ клиенту Б, затраты на запросы не ограничены тарифом
Стадии

Шесть стадий RAG-пайплайна и что сдаём на каждой

Пошаговое объяснение, как это устроено, — в статье «Как устроен RAG-пайплайн». Здесь то, за что мы отвечаем и что вы получите.

Стадия
Что делаем
Что сдаём
Где ломается
СтадияЗагрузка и разбордокументы в текст
Что делаемПодключаем файловые хранилища, вики, почту, учётные системы; разбираем форматы, распознаём сканы
Что сдаёмКонвейер загрузки с отчётом, что принято и что отклонено и почему
Где ломаетсяТаблицы превращаются в кашу, колонтитулы попадают в текст, сканы без распознавания молча пропускаются
СтадияРазбиениена фрагменты
Что делаемРежем по смыслу: разделы, пункты, строки таблиц, с сохранением заголовков и номера редакции
Что сдаёмПравила разбиения по типам документов и проверка на примерах
Где ломаетсяФрагмент обрывается на середине условия; ответ верный по пункту, но противоположен по исключению
СтадияИндексэмбеддинги и векторная база
Что делаемВыбираем модель эмбеддингов и хранилище, настраиваем метаданные: источник, редакция, права, дата
Что сдаёмИндекс и скрипт пересборки, версия модели эмбеддингов записана
Где ломаетсяСмена модели эмбеддингов без пересборки всего индекса: поиск начинает возвращать случайное
СтадияПоиски ранжирование
Что делаемВекторный поиск вместе с поиском по словам, фильтры по правам, переранжирование найденного
Что сдаёмНастройки поиска и результаты проверки на эталонных вопросах
Где ломаетсяАртикулы, номера и редкие термины поиск по смыслу не находит, а поиск по словам находит
СтадияОтветформулирование
Что делаемШаблон запроса: отвечать только по найденному, давать ссылку, говорить «в базе нет»
Что сдаёмШаблоны запросов в репозитории с версиями, проверки формата ответа
Где ломаетсяМодель дополняет ответ знаниями из памяти, ссылка есть, но фрагмент её не подтверждает
СтадияОценкаи наблюдение
Что делаемЭталонная выборка, метрики поиска и ответа, журнал, прогон при каждом изменении
Что сдаёмОтчёт о качестве по версиям, скрипт проверки, мониторинг
Где ломаетсяИзменили разбиение или модель, качество упало, и никто не заметил до жалобы
Разбор

Разбиение на фрагменты: почему оно важнее выбора базы данных

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

Что учитывает разбиение

  • Структуру документа. Раздел, пункт, подпункт идут вместе с заголовками верхнего уровня: фраза «срок десять дней» без названия раздела ничего не значит.
  • Таблицы. Строку таблицы хранят вместе с шапкой, иначе в индексе остаются числа без названий столбцов.
  • Редакции. Номер и дата редакции записываются в метаданные, а устаревшие помечаются, чтобы поиск мог их исключать.
  • Размер и перекрытие. Короткие фрагменты точнее находятся, но не дают контекста; длинные дают контекст, но размывают поиск. Размер подбираем по эталонной выборке, а не берём из руководства.

Если одного фрагмента мало, находим короткий, а в запрос к модели передаём его вместе с соседями или целым разделом: условие и исключение в регламентах и договорах часто стоят в соседних абзацах.

Хранилище

Какую векторную базу берём: pgvector, Qdrant, Weaviate или облачный сервис

Общий вывод: выбор определяют объём, права, способ эксплуатации и данные, а не рейтинги. Подробнее — в статье «Как выбрать векторную базу для RAG».

Вариант
Когда подходит
Что учесть
Наш подход
Вариантpgvectorрасширение PostgreSQL
Когда подходитУ вас уже есть PostgreSQL, объём умеренный, права удобно хранить рядом с данными и выбирать одним запросом
Что учестьБольшие объёмы и частые обновления дают нагрузку на ту же базу, поиск по словам настраивается отдельно
Наш подходНачальный вариант для первых систем: меньше компонентов, привычные резервные копии
ВариантQdrantотдельная векторная база
Когда подходитМного векторов, нужны быстрые фильтры по метаданным и независимое масштабирование, развёртывание у вас
Что учестьЕщё один компонент: мониторинг, копии, обновления; согласованность с основной базой поддерживаем сами
Наш подходБерём, когда объём или нагрузка выходят за разумное для PostgreSQL
ВариантWeaviateотдельная база со встроенными модулями
Когда подходитНужны гибридный поиск и готовые модули из коробки, команда готова к более сложной эксплуатации
Что учестьБольше возможностей, больше настроек и зависимостей; проверяем нужную версию на ваших данных
Наш подходРассматриваем, если встроенные модули действительно экономят работу
ВариантОблачные сервисынапример Pinecone
Когда подходитПрототипы на открытых данных, когда нет требований к размещению
Что учестьДанные и индекс лежат у внешнего провайдера; для данных ограниченного доступа чаще не подходят по требованиям заказчика
Наш подходНе используем для закрытых данных; для открытых допускаем по вашему решению
Доступ

Права, обновления и удаление: то, что отличает систему от демо

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

  • Права применяются до поиска. Фильтр по правам спрашивающего входит в сам запрос к базе. Если отфильтровать результат после поиска, из десяти найденных фрагментов могут остаться два, и ответ будет бедным, а в журнале всё равно останутся чужие фрагменты. Фильтр вместе с поиском избавляет от обоих эффектов.
  • Обновление идёт по изменению. Новая редакция регламента заменяет старую в индексе, а не добавляется рядом. Источник сообщает об изменениях или конвейер сравнивает версии по расписанию, и мы договариваемся заранее, какой из способов подходит вашему хранилищу.
  • Удаление реально удаляет. Документ, снятый с публикации или отозванный по требованию, удаляется из индекса вместе со всеми фрагментами. Это проверяется отдельным прогоном, потому что в индексе остаются следы документа, которые не видны в исходном хранилище.

Приёмка прав — отдельная: из-под каждой роли пробуем получить закрытый документ прямым вопросом, переформулировкой и вопросом, который его косвенно пересказывает. Результат записывается в отчёт. Для SaaS-продукта с отдельными индексами клиентов к этому добавляется тест изоляции, как в статье про мультиарендность.

Качество

Как измеряем качество поиска и ответов

Общая методика оценки — на странице разработки LLM-приложений и в статье об архитектуре LLM-приложения.

У RAG-системы два независимых места ошибки, и измеряем их по отдельности, иначе непонятно, что чинить.

  1. Поиск. Для каждого вопроса выборки известно, в каких документах лежит ответ. Смотрим, попал ли нужный фрагмент в число найденных. Если нет, дело в разбиении, эмбеддингах или фильтрах.
  2. Ответ. Нужный фрагмент найден, но модель ответила неверно, не сослалась на источник или добавила лишнее. Это проблема шаблона запроса или самой модели.
  3. Отказ. В выборку входят вопросы, на которые в базе ответа нет. Система должна сказать «не нашла», а не выдумать. Этот показатель считаем отдельно, потому что по нему видно главное: можно ли доверять системе.

Выборку собираем вместе с вами из реальных вопросов сотрудников или клиентов, а не придумываем. Часть вопросов не показываем при настройке и используем только в конце. После любого изменения (разбиение, модель эмбеддингов, шаблон запроса, новая модель) выборка прогоняется заново, и результаты сравниваются с предыдущими. Так замена модели не превращается в тихое ухудшение.

Что делаем

Из чего состоит работа и сколько она стоит

Цены совпадают с тарифами. Остановиться можно после любой ступени: сделанное остаётся у вас по акту, вместе с исходниками.

Обследование: источники и один сценарий

Что лежит в источниках, в каком состоянии, кто и что спрашивает, какие права. На выходе правила разбиения, выбор хранилища, эталонная выборка и вилка бюджета. Вычитается из первого этапа, если продолжаете с нами.

200 000 ₽ · 2–3 недели

Обследование: несколько систем и ролей

Много источников, сложные права, подключение к продукту или к учётным системам: схема обменов и матрица прав.

350 000 ₽ · 3–4 недели

Лёгкий пилот

Один набор документов, одна форма системы, замер по эталонной выборке, работа у части сотрудников. Отчёт о качестве и решение о продолжении.

150 000–400 000 ₽ · 2–8 недель

Тяжёлый пилот

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

400 000–1 200 000 ₽ · 2–3 месяца

Вывод в эксплуатацию

Нагрузка, мониторинг, регламент обновления индекса, резервные копии и проверка восстановления. Этапами, у каждого своя приёмка.

от 1 500 000 ₽ этапами по 300 000–700 000 ₽ · от 3 месяцев

Сопровождение

Контроль качества по выборке, обновление индекса, проверка после смены модели; плановые доработки с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.

20 000 / 60 000 / 120 000 ₽ в месяц
Процесс

Как идёт работа

2–4 недели — Обследование

Просматриваем реальные документы, собираем вопросы, фиксируем права, выбираем хранилище. Выясняем, какие документы не годятся в нынешнем виде.

Перед разработкой — Эталонная выборка

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

От 2 недель — Пилот

Загрузка, разбиение, индекс, поиск и ответ на тестовом стенде. Раз в две недели показываем результаты по выборке.

1–2 недели — Проверка прав и отказов

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

3–7 дней — Запуск на части пользователей

Включаем один отдел или одного клиента, смотрим журнал, вопросы без ответа и жалобы.

Дальше — Эксплуатация

Обновление индекса, контроль качества по выборке, новые источники по этапам.

Цена

Что двигает цену внутри вилки

Состояние документов

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

Число источников и ролей

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

Размещение модели

Модель и эмбеддинги на ваших серверах требуют оборудования и обслуживания; внешний программный интерфейс проще, но подходит не для всех данных.

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Исходный код в вашем репозитории с первого коммита.
  • Индексы и данные на ваших серверах, скрипт пересборки индекса.
  • Эталонная выборка, скрипт её прогона и отчёты по версиям.
  • Шаблоны запросов с историей изменений.
  • Право остановиться после любой ступени: сделанное остаётся у вас по акту.

Мы этого не делаем

  • Не обещаем число точных ответов заранее: качество измеряется на вашей выборке.
  • Не размещаем индекс у себя и не передаём ваши данные облачным сервисам без вашего решения.
  • Не наводим порядок в документах за вас: покажем, что мешает, но правят содержание ваши сотрудники.
  • Не проводим аттестацию, лицензии ФСТЭК у нас нет.
  • Не берём работы дешевле 150 000 ₽ и не дежурим круглосуточно.
Граница

RAG, дообучение или готовый ассистент: где проходит граница

Если нужен ответ по документам с источником, а знания меняются, это RAG. Если нужно изменить манеру или формат ответа модели либо научить её классифицировать по вашим категориям, рассматривают дообучение, и выбор разобран в статье «RAG или дообучение LLM». Что такое RAG, если термин вам незнаком, — в статье «Что такое RAG».

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

Инструменты

На чём собираем

Поиск и данные
  • PostgreSQL с pgvector, Qdrant или Weaviate, выбор по требованиям
  • Эмбеддинги и переранжирование моделями с открытыми весами, запущенными у вас
  • Поиск по словам (полнотекстовый в PostgreSQL или поисковый движок) рядом с векторным
  • S3-совместимое хранилище для исходных файлов
Модель, обвязка и развёртывание
  • Языковая модель с открытыми весами на ваших серверах или внешний интерфейс для открытых данных
  • Python, FastAPI, очереди для загрузки документов
  • Docker, Nginx, GitLab CI
  • Журнал запросов без текстов и скрипт проверки качества в репозитории
Материалы

Материалы по теме

Статья

Как выбрать векторную базу для RAG

Критерии выбора между pgvector, Qdrant, Weaviate и облачными сервисами: объём, права, поиск по словам, эксплуатация.

  • Критерии
  • Таблица решений
  • Как проверить на своих данных
Читать →
Статья

RAG или дообучение LLM

Правило «знания или поведение», права доступа и сравнение вариантов на одной выборке.

  • Правило выбора
  • Права
  • Дерево решений
Читать →
Статья

Векторные базы данных простыми словами

Что такое эмбеддинг и зачем отдельная база для смыслового поиска.

  • Эмбеддинги
  • Как это работает
  • Когда нужна
Читать →
Заявка

Разберём ваши документы и вопросы

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

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: RAG-система на заказ

Сколько стоит разработка RAG-системы?

Начинается с обследования: 200 000 ₽ за один набор источников и сценарий (2–3 недели) или 350 000 ₽ при нескольких системах и ролях (3–4 недели). Лёгкий пилот — 150 000–400 000 ₽ за 2–8 недель, тяжёлый — 400 000–1 200 000 ₽ за 2–3 месяца, вывод в эксплуатацию — от 1 500 000 ₽ этапами по 300 000–700 000 ₽. Сопровождение — 20 000, 60 000 или 120 000 ₽ в месяц. Обследование вычитается из первого этапа, если продолжаете с нами.

Какую векторную базу вы выбираете?

Зависит от объёма, прав и способа эксплуатации. Если у вас уже есть PostgreSQL и объём умеренный, обычно начинаем с pgvector. Qdrant или Weaviate берём, когда нужны большие объёмы или независимое масштабирование. Облачные сервисы вроде Pinecone для закрытых данных чаще не подходят по требованиям заказчика.

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

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

Как вы не даёте системе выдумывать ответы?

Шаблон запроса требует отвечать только по найденным фрагментам и приводить источник, а при отсутствии ответа говорить «в базе нет». Это проверяется на отдельной части выборки с вопросами без ответа. Полностью исключить ошибки нельзя, поэтому для ответственных случаев делаем черновик с подтверждением человеком.

Как обновляется индекс?

Новая редакция заменяет старую, удалённый документ удаляется вместе с фрагментами. Способ зависит от источника: по событию изменения или по расписанию. Скрипт пересборки индекса лежит в репозитории, и смена модели эмбеддингов не требует ручной работы.

Кому принадлежат код и индекс?

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

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.