В чём фокус
Бот с базой знаний отвечает клиенту уверенно и неверно. Первое желание — поставить модель подороже. Но модель пересказывает те куски текста, которые ей подал поиск по вашей базе. Достал не те куски — она перескажет не то. Ниже три проверки, которые показывают, где ломается, и делаются руками за десять минут.
Куда на самом деле идёт вопрос клиента
Вопрос сначала попадает не к модели, а в поиск по вашим файлам. Файлы заранее порезаны на куски, поиск выбирает из них несколько самых похожих на вопрос и передаёт модели. Модель видит только эти куски и отвечает по ним.
Отсюда два места поломки, и модель в них не участвует:
- База порезана плохо. Кусок оборвался посреди таблицы, и вторая половина прайса осталась в соседнем куске, который поиск не достал.
- Поиск достал не то. Он ищет по смыслу, то есть «похожее». Для вопроса «как оформить возврат» это хорошо. Для вопроса про конкретный артикул плохо: похожих артикулов много, а нужен один.
Более сильная модель в обоих случаях так же гладко изложит неправильные куски.
Что понадобится
- Доступ к базе знаний бота в том виде, в каком её видит поиск: список кусков текста, а не исходные файлы
- Сам бот в тестовом чате
- Десять минут и ваш настоящий прайс под рукой, чтобы сверять ответы
Три проверки
Прочитайте десять кусков «на холодную»
Откройте базу и возьмите десять случайных фрагментов подряд. Каждый должен быть понятен сам по себе, без соседей. Если кусок начинается с середины фразы или обрывается на половине таблицы, бот получит именно такой обрывок и остальное допридумает.
Спросите точный артикул
Не «расскажи про доставку», а номер заказа или код товара из прайса, например условный
WX-4200. Бот должен назвать цену именно этой позиции. Если он отвечает про похожий товар, поиск работает только по смыслу и точные совпадения теряет.Спросите то, чего в базе нет
Товар, которого вы не продаёте, или услугу, которой у вас нет. Правильный ответ один: «не знаю» или «уточню у менеджера». Уверенный и подробный ответ означает, что бот и раньше не проверял базу, а угадывал.
Что значит каждый результат
| Проверка | Что увидели | Что чинить |
|---|---|---|
| Куски «на холодную» | Обрывки таблиц, фразы без начала | Нарезку базы: кусок не должен обрывать таблицу или фразу |
| Точный артикул | Ответ про похожий товар | Поиск: добавить точное совпадение по словам рядом с поиском по смыслу |
| То, чего нет | Уверенная выдумка | Инструкцию бота: разрешить и потребовать ответ «не знаю», когда в найденном нет ответа |
Порядок починки тот же, что порядок проверок. Нарезка идёт первой: пока куски обрываются, настройка поиска и инструкции чинит следствие.
Чтобы не споткнуться
На общих вопросах бот выглядит хорошо почти всегда. Ломается он на точном: цена, срок, номер, артикул. Берите вопросы из настоящей переписки с клиентами.
Для клиента «уточню у менеджера» обходится в минуту ожидания. Уверенно названная неверная цена обходится в спор и возврат.
База меняется вместе с прайсом. Каждая новая загрузка файлов может вернуть обрывки, поэтому десять случайных кусков стоит читать после каждого обновления.
Частые вопросы
- А если у меня нет доступа к кускам, только к файлам?
- Тогда первую проверку заменяют вторая и третья: по ним видно то же самое, только косвенно. И стоит спросить у того, кто собирал бота, как именно порезана база.
- Может ли дело всё-таки быть в модели?
- Может, но проверять это стоит последним. Если куски цельные, артикул находится, а на отсутствующее бот говорит «не знаю», и ответы всё равно неверные — тогда да, смотрите модель и инструкцию.
- Сколько кусков получает модель на один вопрос?
- Зависит от настройки, обычно несколько штук. Число стоит узнать у сборщика: если кусок один, любая ошибка поиска сразу становится ошибкой ответа.
Источники
- arXiv — Seven Failure Points When Engineering a Retrieval Augmented Generation SystemИсследование о том, где ломаются системы «поиск по базе плюс модель»: семь точек отказа