RAG на живом каталоге
В каталоге нет синего К-17. Проверили, не придумает ли его RAG
Четыре вымышленных товара, опасное совпадение цвета и два реальных запроса через TokenTool. Смотрим, разделит ли модель соседние кресла и сумеет ли отказать покупателю.

Мы положили в тестовый каталог серое кресло К-17 за 14 990 рублей и синее К-18 за 17 490. Затем спросили про синее К-17. Хорошее место, чтобы случайно склеить цвет одного товара с ценой другого и бодро отправить выдумку покупателю.
Не склеило. Потом мы спросили про белый стол С-90, которого в каталоге нет вообще. Модель отказалась называть цену и доставку. На этот раз литературный кружок не собрался.
01
Один каталог, два вопроса, ни одного синего К-17
В отдельной базе TokenTool лежал один синтетический файл: четыре товара, точные артикулы, цвета, цены, остатки и сроки. Клиентских данных нет. Базу подключили к отдельному пресету на GLM 5.2 и запретили смешивать характеристики разных артикулов.
Первый вопрос специально составлен с ловушкой: нужная модель существует, нужный цвет тоже существует, но вместе — нет. Второй вопрос не имеет в каталоге ни одного совпадающего товара.
Вопрос покупателя
Есть ли синее кресло К-17? Сколько оно стоит и когда будет доставка?
Синего К-17 нет. К-17 выпускается только в графитовом сером цвете, стоит 14 990 рублей и передаётся в доставку за 4–6 рабочих дней. Отдельной альтернативой модель назвала синий К-18 за 17 490 рублей — с его собственным артикулом и сроком.
Контрольный вопрос
Есть ли белый стол С-90? Назовите цену, остаток и срок доставки.
Стола С-90 в каталоге нет, поэтому модель отказалась называть цену, остаток и срок. Вместо новой мебели из воздуха она предложила спросить о товарах, которые действительно есть в файле.
Это два прогона, а не сертификат вечной правды. Они подтверждают конкретный путь в текущем интерфейсе: документ обработан, нужные фрагменты найдены, источник показан, факты не смешаны. Следующая версия каталога всё равно потребует нового теста.
02
Откуда берётся отсебятина
Языковая модель продолжает текст. Она хорошо знает, как обычно выглядит ответ продавца, описание кресла и обещание доставки. Но ваш склад она утром не пересчитывала. Если в вопросе не хватает фактов, модель всё равно старается собрать складную фразу.
Просьба «отвечай строго по каталогу» полезна, только каталог сначала надо показать. Иначе это почти как потребовать от нового сотрудника не ошибаться, забрать у него прайс и закрыть склад на ключ.
Нашла товар: показала товар. Не нашла: передала вопрос человеку. Третий вариант магазину не нужен.
03
RAG на человеческом языке
RAG расшифровывается как Retrieval-Augmented Generation. Название солидное, смысл бытовой: перед ответом система ищет подходящие куски в ваших источниках и кладёт их модели на стол.
Модель не переучивают заново. Ей просто дают короткую справку именно для текущего вопроса. Спросили про синее кресло. Система ищет кресла, цвет, цену и остаток. Нашла серое, но не синее. Значит, правильный ответ: синего в каталоге нет. Всё. Новый предмет мебели из воздуха производить не требуется.
Ваши данные
Каталог, инструкции, договоры или база знаний.
Поиск
Система достаёт только фрагменты по вопросу.
Ответ
Модель отвечает по найденному или честно отказывает.

04
Что положить в базу знаний
Красивый PDF на сто страниц годится для презентации поставщику. Для поиска он часто неудобен: название товара на одной странице, характеристики на другой, цена мелким шрифтом в сноске. Потом все удивляются, почему AI нашёл половину ответа. Он нашёл ровно то, что ему аккуратно закопали.
В карточке товара полезно держать рядом:
- название, артикул и привычные покупателю синонимы;
- характеристики, совместимость и ограничения;
- цену, остаток и дату последнего обновления;
- ссылку на карточку или другой источник, который можно открыть;
- понятный признак: товар снят, временно отсутствует или доступен под заказ.
Самые подвижные данные лучше обновлять отдельно. Описание кресла живёт годами. Остаток может протухнуть за час. Склеивать их навечно в один документ удобно примерно до первого проданного дважды экземпляра.
05
Можно ли заставить AI отвечать строго по каталогу
В промпте можно десять раз написать «СТРОГО ПО КАТАЛОГУ». Остаток на складе от этого не появится. Нужны поиск по источнику, понятный отказ и проверка самых важных данных.
Поиск должен принести правильный товар. Модели запрещают дополнять отсутствующие характеристики. В ответе показывают источник. Если подтверждения нет, система отказывает или зовёт человека. Цену и остаток перепроверяют перед показом покупателю.
Плохой ответ
«Да, синее кресло есть. Доставим завтра».
Звучит приятно. Подтвердить нечем.
Нормальный ответ
«Синего К-17 в каталоге нет. Есть серый. Вот карточка».
Меньше обаяния. Больше пользы.
06
Где RAG всё равно облажается
Если в каталоге старая цена, модель аккуратно повторит старую цену. Если товар назван «мягкий модуль», а покупатель ищет пуф, поиск может пройти мимо. Если в базу свалили договоры всех клиентов, вопрос безопасности уже не про качество ответа.
RAG не чинит плохие данные. Он делает связь ответа с данными заметнее. Плохой каталог плюс RAG даёт плохой ответ со ссылкой. Прогресс, конечно, но немного не тот.
Поэтому проверяют не красоту текста, а простые вещи: найден ли нужный источник, не добавилось ли лишнего, умеет ли система отказаться и видит ли пользователь, откуда взялся ответ.
07
Где это полезно
Магазин
Подбирать товары по параметрам и не придумывать отсутствующие варианты.
Поддержка
Отвечать по инструкциям, тарифам и правилам возврата с указанием источника.
Внутренний помощник
Искать по регламентам и документам, которые никто не хочет листать вручную.
Голосовой ассистент
Сначала находить факт в базе, потом произносить его вслух. Порядок тут важен.
Как это устроено в TokenTool
Простой путь: создать базу знаний, загрузить документы и подключить её к пресету или проекту. В Playground можно посмотреть, какие источники подтянулись к ответу. Это полезнее, чем оценивать систему по одному особенно удачному сообщению.
Если у приложения уже есть собственный поиск, его можно оставить. Тогда приложение само выбирает нужные фрагменты, а TokenTool используется для обращения к текстовой модели. Публичный embeddings API из этого автоматически не появляется. Две схемы разные, смешивать их ради красоты диаграммы не надо.