Бот уверенно и неверно отвечает про факт, который есть в корпусе — как локализовать причину?
Ассистент поддержки отвечает «срок хранения — 30 дней», хотя в документации указано 90. Предложение с 90 днями лежит в корпусе как чанк doc-4471#c12.
Ограничения: инструментировать и переигрывать запрос можно, но переобучать генератор и перерезать корпус на чанки во время расследования нельзя.
query : "how long is data retained?"
gold chunk : doc-4471#c12 indexed=yes embedded=yes
dense top-50 : rank 7 bm25 top-50 : rank 3
after rerank : rank 22
prompt (top-5): doc-1180#c03, doc-4471#c02, doc-9002#c41, doc-1180#c07, doc-3355#c19
Назовите упорядоченные проверки, локализующие причину, и укажите, какая строка её уже решает.
Пройти стадии по порядку и спросить, где выпадает нужный чанк. Убедиться, что он проиндексирован и эмбеддится, затем проверить его ранг в поиске, затем ранг после переранжирования, затем дошёл ли он до промпта. Только если чанк дошёл до промпта, виновата генерация.
- ✗Называть любой уверенный неверный ответ галлюцинацией, не проверив, что лежало в промпте
- ✗Считать наличие чанка в корпусе доказательством, что он дошёл до контекста генератора
- ✗Пропускать стадию переранжирования при бисекции, из-за чего регресс порядка остаётся невидимым
- →Как логировать каждую стадию, чтобы такая бисекция занимала минуты, а не день?
- →Как выглядел бы тот же трейс, если бы действительно была виновата модель embedding?
Строка after rerank : rank 22 уже решает вопрос. Чанк проиндексирован, эмбеддится и хорошо находится обоими ретриверами (dense 7, bm25 3), но переранжировщик опускает его на 22-е место, поэтому в промпт попадают только первые пять — и нужного среди них нет. Генератор ответил уверенно по тому, что ему дали; выдумки здесь нет.
Порядок проверок — от входа к выходу, а не наоборот:
- Есть ли чанк в индексе и посчитан ли для него embedding (
indexed=yes embedded=yes). - Ранг чанка в каждом ретривере по отдельности — dense и BM25.
- Ранг после переранжирования; сравнить его с рангом до.
- Точный текст промпта: какие именно чанки в него попали.
- Только после этого — сама генерация.
stage rank in_prompt
dense 7 -
bm25 3 -
after rerank 22 no <-- fault localised here
Дальше чинят переранжировщик: проверяют, не обучен ли он на другом домене, не обрезан ли вход чанка по длине и не идёт ли короткое определение вниз из-за длины. Правка промпта или снижение температуры тут не помогут — факта в контексте просто нет.