Разработка RAG-систем

Раздел
Решения по технологии
Чтение
9 мин
Обновлено

RAG (Retrieval-Augmented Generation) собирает ответ из фрагментов материалов самой компании и ставит ссылку на источник. Границу задаёт корпус, утверждённый до запуска; подходящего фрагмента нет — система об этом сообщает. Разворачивают такую систему в контуре заказчика; на пилоте за 2⁠–⁠6 недель видно, собирается ли конвейер на ваших материалах.

#

Что происходит между вопросом и ответом: фрагменты, поиск, уверенность

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

Нарезка на фрагменты и что ломается при плохой нарезке

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

  • разрез прошёл посередине условия — половина уйдёт в ответ, вторая останется в соседнем;
  • фрагмент слишком велик — к нужному предложению прилипнет чужое, модель ответит по соседнему абзацу;
  • фрагмент слишком мал — теряется, к чему он относился: пункт без раздела выглядит самостоятельным требованием;
  • фрагмент не помнит своего места — ссылку на источник ставить не из чего.

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

Три способа отбора и переранжирование

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

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

Порог уверенности и три маршрута

У каждого отобранного фрагмента есть числовая оценка: насколько найденное отвечает на вопрос. От неё зависит маршрут ответа:

  • высокая оценка — ответ уходит спрашивающему сразу, со ссылкой на источник;
  • средняя оценка — человек получает варианты с источниками и выбирает сам;
  • низкая оценка — RAG-система задаёт уточняющий вопрос или сообщает, что ответа нет; догадку вместо ответа она не отдаёт.

Порог настраивают: где ошибка дорого стоит, его поднимают и система чаще переспрашивает; где ошибку правят дёшево — опускают. Порог пересматривают, когда меняется состав материалов.

Ссылка на источник

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

#

Что попадает в индекс и что возвращается в ответ

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

ИсточникЧто делает системаРезультат
Документы в действующей редакцииРежет на фрагменты, хранит раздел и редакциюОтвет со ссылкой на фрагмент
1С: номенклатура, остатки, ценыСинхронизирует справочники по расписаниюДействующее значение в ответе
Фото, сканы с печатью, PDF без текстового слояВосстанавливает текст с его местомФрагменты в индексе, нечитаемое — в уточняющий вопрос
Excel со своими колонкамиСопоставляет колонки с вашими названиями полейСтроки в индексе

Опыт с 1С у Dzeta AI подтверждён каталожным поиском у дистрибьютора. Остальные хранилища разбираем на аудите: на пилоте хватает выгрузок.

Живой индекс: обновление и снятие документа

Материалы меняются — меняется индекс. Документ обновили: переиндексируются затронутые фрагменты, остальное на месте. Документ отменили: его текст в ответы больше не попадает. С 1С синхронизация идёт по расписанию, снятые позиции исчезают из поиска сами.

На чём это собирается

Каркас конвейера — LangChain и LlamaIndex. Векторы лежат в Qdrant, Weaviate или Chroma, а когда отдельное хранилище незачем — в pgvector рядом с базой. Точный текст ищет Elasticsearch, на короткий запрос HyDE сначала строит вероятный ответ и ищет уже по нему, поверх кандидатов работает переранжирование. Ответ пишет языковая модель — GPT-4o, Claude, YandexGPT, GigaChat или Llama 3 в собственном контуре; поведение самой модели меняют fine-tuning и LoRA.

#

Как принимают работу: пороги качества задают заранее

Что считать хорошим ответом, договариваются до начала разработки: заказчик и Dzeta AI собирают набор вопросов и задают по нему два порога — на точность ответа и на время ответа. Дальше это условие приёмки: код сдаётся, когда пороги достигнуты. Метрики ниже показывают, из чего складывается точность и где именно конвейер даёт сбой. Документные задачи проверяем на 10⁠–⁠20 документах заказчика.

МетрикаЧто измеряетКак выглядит провал
FaithfulnessДержится ли ответ найденного источникаМодель дописала от себя то, чего в источнике нет
Answer relevancyОтвечает ли ответ на заданный вопросТекст верен по источнику и проходит мимо вопроса
Context precisionСколько лишнего попало в отобранные фрагментыОтбор тащит шум, нужное тонет среди соседнего
Context recallНе потерялось ли нужное при отбореПодходящий фрагмент до модели не дошёл

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

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

Модель в RAG-системе — сменная часть: индекс, правила отбора, переранжирование и порог живут отдельно. Новая версия модели или переезд в свой контур — замена одного звена: вопросы прогоняют заново, конвейер остаётся как был. Отдельная тема — подключение языковой модели к рабочему контуру.

#

Кейсы Dzeta AI: где этот конвейер уже собран

У Dzeta AI 50+ реализованных проектов в 8 отраслях. Отбор кандидатов, переранжирование и уровни уверенности этой страницы видны в трёх из них.

Оптовый дистрибьютор инженерных систем держит в индексе 389 тысяч позиций: 60 филиалов на едином каталоге, более 300 менеджеров ежедневно. Каждая позиция проиндексирована тремя способами, кандидаты ранжируются заново, три уровня уверенности разводят заявку по маршрутам, каталог синхронизируется с 1С. Отраслевая сторона — как устроен приём заявок у дистрибьютора.

IzzyBooking, международный агрегатор бронирования, сводит к одному виду данные более чем от 100 поставщиков. Запрос обычным языком он разбирает на параметры (даты, бюджет, формат) и ранжирует предложения в реальном времени. Поиск IzzyBooking в 3 раза точнее решений с фильтрами и ключевыми словами; проект собрали за 3 месяца, в производстве он с 2025 года.

Ассистент эксперта в Telegram показывает, как работает граница корпуса: источником служат только материалы, которые эксперт заверил заранее, и придумывать сверх них ассистенту нечем. Из собранных ответов он складывает разбор из 15 блоков. Клиентскую сторону разбирает диалог с клиентом, который система ведёт сама.

#

Как внедряют RAG-систему: аудит, пилот, приёмка

Этап внедренияСрок и стоимостьЧто получает заказчик
Аудит3⁠–⁠5 рабочих днейКарту потерь в часах и деньгах и план внедрения. Интервью и разбор материалов по NDA, стоимость — после созвона.
Пилот2⁠–⁠6 недель, от 290 000 ₽Конвейер на своих материалах и первый измеримый результат на реальных вопросах.
ПриёмкаПо итогам пилотаПрогон по критериям, согласованным до старта, с разбором расхождений.
Полное внедрение4⁠–⁠12 недель, стоимость — после пилотаСистему в продуктиве: регламент обновления, доступы, журналирование, мониторинг.

Начинают с малого: пилот на ограниченном наборе материалов обходится дешевле спора о том, соберётся ли конвейер на ваших данных.

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

Где работает система и кто видит материалы

В контуре заказчика RAG-систему разворачивают на открытых моделях: документы, вопросы и ответы остаются внутри компании, персональные данные её не покидают (152-ФЗ «О персональных данных»), подтверждения пишутся в журнал.

#

Когда RAG не нужен

RAG подходит, когда у компании есть написанный текст с владельцем и действующей редакцией, а вопросы по нему повторяются. Без такого текста конвейер поиска и генерации станет дорогим способом сделать не то. Видно это на аудите:

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

Вопросы о разработке RAG-систем

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

RAG подставляет фрагменты ваших материалов в момент ответа, дообучение меняет поведение самой модели. Корпус при этом остаётся снаружи: документ обновили — система отвечает по новой редакции, переобучение для этого не нужно. Дообучение решает свою задачу: тон, формат, устойчивую разметку, и корпус оно не заменяет. В стеке Dzeta AI есть и то и другое, выбор делают на аудите под конкретную задачу.

Как сделать, чтобы ИИ отвечал только по документам компании и не выдумывал?

Корпус утверждают до запуска, и за его пределы RAG-система не выходит. У каждого отобранного фрагмента есть оценка уверенности; при низкой система задаёт уточняющий вопрос или сообщает, что ответа нет. К ответу приложен фрагмент, из которого он собран, — по нему проверяют формулировку.

Как проверяют качество ответов RAG-системы?

Метрики и пороги по ним фиксируют до начала разработки на наборе вопросов заказчика, по ним систему и принимают. Считают четыре вещи: держится ли ответ источника, отвечает ли он на заданный вопрос, сколько лишнего попало в отобранные фрагменты и не потерялось ли нужное. Документные задачи Dzeta AI проверяет на 10⁠–⁠20 реальных документах заказчика. Пороги задают на ваших данных: значение, снятое на чужом наборе вопросов, о вашем не говорит ничего.

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

Пилот стоит от 290 000 ₽ и занимает 2⁠–⁠6 недель, полное внедрение — 4⁠–⁠12 недель, его стоимость считают по результатам пилота. Аудит идёт 3⁠–⁠5 рабочих дней, сумму называем после короткого созвона. Итог зависит от объёма материалов и их состояния: свести редакции и разобрать файлы без текстового слоя — заметная часть работы.

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

Да, RAG-систему разворачивают в контуре заказчика на открытых моделях. Документы и вопросы остаются внутри компании, персональные данные её не покидают (152-ФЗ «О персональных данных»), подтверждения пишутся в журнал, в ChatGPT и другие внешние сервисы данные не уходят, если заказчик этого не хочет. Модель при этом сменная: её заменяют без переделки индекса, правил отбора и порогов.

Что происходит, когда документ обновился или его отменили?

Затронутые фрагменты RAG-система переиндексирует, остальной индекс остаётся на месте. Отменённый документ уходит из индекса, и в ответы его текст больше не попадает. Синхронизация с 1С идёт по расписанию: новые и снятые позиции попадают в поиск без ручной работы. Кто выкладывает новую редакцию и в какой момент — часть регламента обновления, его описывают при внедрении.

Расскажите, что нужно улучшить

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

Заявка попадёт напрямую нашей команде.

Задача
Или напишите напрямую
contact@dzeta.ai