Ситуация знакома всем, кто эксплуатировал RAG: документ загружен, сведения в нём есть, а система отвечает «не знаю» или выдаёт что-то смежное. Проверяешь руками — всё на месте.
Причина почти никогда не в модели. Между документом и ответом стоит цепочка преобразований, и на каждом звене сведения могут стать ненаходимыми. Ниже — девять причин в том порядке, в котором их разумно проверять: от корпуса к запросу.
Если ошибается бот, а не поиск как таковой, начните с общей диагностики по всей цепочке — «Чат-бот отвечает неправильно». Здесь разбирается только звено поиска, но вглубь.
1. Фрагмента нет в индексе
Банально и встречается чаще всего. Документ загружен — не значит проиндексирован.
Что бывает: обработка упала на этом файле и ошибка не отслеживалась; формат не поддержан и текст не извлёкся; документ добавили после индексации, а переиндексация не запускалась.
Проверка: найдите фрагмент прямо в хранилище по куску текста. Нет — дальше искать нечего.
2. Текст не извлёкся
Файл обработан, но текста в нём не оказалось. Классика — PDF из сканов: без распознавания это картинки, и извлекается пустота или обрывки. Разбор — «OCR и PDF».
Сюда же: текст в изображениях внутри документа, содержимое в колонтитулах, таблицы, превратившиеся в кашу.
Проверка: посмотрите извлечённый текст глазами. Не метаданные — сам текст.
3. Сведения разрезаны между фрагментами
Правило в одном куске, исключение в другом. Ни один не похож на вопрос целиком, поэтому оба проигрывают.
Самая частая причина после первой и самая коварная: система при этом что-то находит и отвечает, просто неполно. Разбор — «Чанкинг документов».
Признак: ответы неполные, а не пустые. Правило есть, оговорки нет.
4. Фрагмент несамодостаточен
Фрагмент существует, но не содержит слов, по которым его можно найти. Классический случай: раздел называется «Условия возврата», а внутри — «Срок составляет 14 дней с момента получения». Слово «возврат» осталось в заголовке и во фрагмент не попало.
Вопрос «как вернуть товар» такой фрагмент не найдёт: общих слов нет, смысловая близость слабая.
Лечится обогащением: к каждому фрагменту приписывается путь по заголовкам и название документа.
5. В вопросе обозначение, а не смысл
Артикулы, коды, номера договоров, названия моделей. Векторный поиск их не различает — для него это символы без значения.
Признак: вопросы обычным языком работают, вопросы с обозначениями проваливаются. Лечится добавлением словесного поиска — «Гибридный поиск».
Отдельная тонкость: даже словесный поиск может промахнуться, если правила разбиения текста на слова рвут обозначение по дефису или слэшу. «ТМ-40/6» легко превращается в «ТМ», «40», «6» — и перестаёт быть уникальным.
6. Разная лексика в вопросе и в документе
Клиенты говорят «предоплата», в регламенте «авансовый платёж». Сотрудники — «отпускные», в документе «компенсация за неиспользованный отпуск».
Смысловой поиск частично это закрывает, но не всегда: чем специфичнее термин, тем хуже модель понимает связь.
Лечится словарём синонимов при индексации или расширением запроса переформулировками.
7. Модель векторизации не понимает вашу терминологию
Универсальная модель не видела ваших профессиональных обозначений при обучении и различает их плохо.
Признак: проваливается целый класс вопросов по одной теме, а остальные работают.
Проверяется сравнением моделей на своём наборе — «Эмбеддинги для русского». Сюда же относится частая техническая ошибка: модель требует служебных пометок для вопроса и документа, а их не проставили — качество падает молча.
8. Фрагмент отфильтрован
Он нашёлся, но был отброшен: не подошёл по правам доступа, по дате, по разделу. Иногда фильтр настроен строже, чем задумано.
Проверка: выполните тот же поиск без фильтров. Появился — дело в них. Про корректную фильтрацию по правам — «Разграничение доступа в RAG».
9. Вопрос не тот, что кажется
Последнее звено. В диалоге второй вопрос часто неполон: «а для юрлиц?» без предыдущей реплики не ищется никак.
Если вопрос не переписывается в самодостаточный перед поиском, система будет проваливать все уточняющие вопросы — «Архитектура RAG по шагам».
Порядок проверки
Схема на пять минут, если есть журнал с записью найденных фрагментов.
| Шаг | Вопрос | Если нет |
|---|---|---|
| 1 | Есть ли фрагмент в хранилище? | причины 1, 2 |
| 2 | Понятен ли он в отрыве от документа? | причины 3, 4 |
| 3 | Находится ли он словесным поиском? | причины 5, 6 |
| 4 | Находится ли смысловым? | причины 6, 7 |
| 5 | Находится ли без фильтров? | причина 8 |
| 6 | Что именно ушло в поиск как запрос? | причина 9 |
Ключевое условие — журнал, в котором видно найденные фрагменты и их оценки. Без него шаг 1 уже недоступен, и диагностика превращается в перебор настроек.
Разбор: «система не знает того, что написано в инструкции»
Задача. База знаний сервисной службы: инструкции по обслуживанию оборудования, около 600 документов.
Симптом. Инженеры жаловались: система не находит порядок действий при конкретных неисправностях, хотя инструкции загружены.
Шаг 1. Нашли фрагменты в хранилище по куску текста. Есть.
Шаг 2. Прочитали. Вот здесь стало интересно. Инструкции были свёрстаны так:
> Ошибка E-24
> 1. Проверить питание.
> 2. Отключить нагрузку.
> 3. Перезапустить контроллер.
Нарезка отрезала заголовок от шагов. Получались фрагменты вида «1. Проверить питание. 2. Отключить нагрузку.» — без единого упоминания, о какой ошибке речь.
Такой фрагмент не найдётся никогда: в нём нет ни кода ошибки, ни названия оборудования, ни слова «неисправность».
Шаг 3. Проверили словесным поиском по «E-24». Нашёлся заголовок — отдельным фрагментом, без шагов. То есть система могла найти либо заголовок без инструкции, либо инструкцию без заголовка.
Что сделали.
Перенарезали по структуре: заголовок и его содержимое — один фрагмент.
Приписали к каждому фрагменту путь по заголовкам — модель оборудования и раздел.
Поправили разбиение на слова, чтобы «E-24» не распадалось на «E» и «24».
Добавили словесный поиск: коды ошибок — ровно тот класс, где смысловой бесполезен.
Результат. Класс вопросов «что делать при ошибке такой-то» стал работать. Проверили на 40 реальных обращениях: до правок нужный фрагмент попадал в первую пятёрку в 9 случаях, после — в 36.
Что стоит забрать. Причина оказалась не в поиске и не в модели, а в том, как документ был разрезан. Проверка «понятен ли фрагмент в отрыве от документа» находит такие вещи за минуты — и это самый недооценённый шаг диагностики.
Частые вопросы
Почему RAG не находит документ, который точно загружен?
Между документом и поиском стоит цепочка преобразований: извлечение текста, нарезка, векторизация, индексация. Сведения могут стать ненаходимыми на любом звене — например, если фрагмент оторван от заголовка и не содержит слов, по которым его ищут. Начинать проверку нужно с того, есть ли фрагмент в хранилище и понятен ли он в отрыве от документа.
Система отвечает неполно: правило есть, исключения нет. Почему?
Почти всегда потому, что правило и исключение попали в разные фрагменты, а поиск нашёл только первый — он текстуально ближе к формулировке вопроса. Лечится нарезкой по структуре документа, чтобы правило и относящиеся к нему оговорки оставались вместе.
Почему не находятся артикулы и номера?
Смысловой поиск сравнивает значения, а у обозначения значения нет: «ТМ-40/6» и «ТМ-46/0» для него почти одинаковы. Нужен словесный поиск по точным совпадениям. Дополнительно стоит проверить правила разбиения на слова: дефисы и слэши часто разрывают обозначение на части.
Проваливается целая тема, а остальные работают. В чём дело?
Похоже на то, что модель векторизации плохо различает терминологию этой области — она не видела таких текстов при обучении. Проверяется сравнением нескольких моделей на наборе вопросов именно по проблемной теме.
С чего начинать диагностику?
С журнала, где видно, какие фрагменты нашлись на конкретный вопрос и с какими оценками. Без него причину определить нельзя: вы видите неверный ответ, но не видите, что было передано модели. Если такого журнала нет, его добавление — первоочередная задача.
Может ли быть виновата модель, которая пишет ответ?
Может, но это самая редкая из причин. Прежде чем её подозревать, убедитесь, что нужный фрагмент был найден и передан. Если он передан, а ответ всё равно неверный, — тогда дело в генерации, и разбираться надо с числом передаваемых фрагментов и формулировкой инструкции.
Что дальше
Основные причины лежат в подготовке корпуса: «Чанкинг документов» и «OCR и PDF». Классы вопросов, которые не берёт векторный поиск, закрывает «Гибридный поиск». Чтобы отличать улучшение от ухудшения, нужны измерения — «Метрики RAG».
Разбор существующей системы с поиском причины провалов — отдельная работа в рамках разработки и внедрения ИИ.