Обсудить проект
← Все статьи

Подбор LLM для клиентского ИИ-агента: журнал экспериментов

Подбор LLM для клиентского ИИ-агента: полный журнал экспериментов

Период: 20 июня – 21 июля 2026 Объект: продовый RAG ИИ-агент крупного клиента (lk.boostbot, ~150–250 ответов клиентам в день)


1. Контекст и задача

Бот работает на архитектуре RAG: вопрос клиента → поиск по базе знаний (FAISS, эмбеддинги OpenAI) → топ-7 фрагментов + промт → LLM → ответ. Исходная модель — gpt-4o через прокси routerai.ru.

Стартовая точка: расход ~1000 руб/день только на один бот. Задача: снизить стоимость минимум в 2 раза без потери качества ответов клиентам.

Важное ограничение: бот отвечает живым клиентам про деньги (тарифы), возраст детей, график работы. Цена фактической ошибки высокая: клиент приезжает зря, приходит с ребенком, которого не пустят, закладывает неверный бюджет.

2. Методика

Эволюционировала по ходу — фиксируем честно:

  1. Первый тест — синтетический (8 придуманных вопросов). Быстро поняли, что этого мало.
  2. Дальше — только реальные вопросы клиентов из базы диалогов, батчами по 10–40, в конце — марафон на 200 вопросах за 3 дня.
  3. Одинаковые условия: каждой модели скармливался тот же самый контекст (промт + те же RAG-фрагменты + история диалога), что получала продовая модель в реальном диалоге. Сравнение — с реальным продовым ответом gpt-4o из базы.
  4. Судья — gpt-4o-mini: оценивал каждый ответ по верности (0–10), полноте (0–10), выносил вердикт «лучше/хуже/равно» и флаг «критичная просадка». Дешево (~$0.0003 за сравнение), масштабируемо.
  5. Ручная перепроверка топ-кейсов — обязательна: судья сам ошибается (см. раздел 9).

Цены моделей: где routerai возвращал фактическую стоимость — брали ее; где нет — считали по прайсам вендоров (помечено как оценка). Курс в пересчетах — 76–90 руб/$.

3. Хронология экспериментов с моделями

3.1. Синтетический тест: 8 вопросов × 4 модели (20.06)

Модель Стоимость 8 ответов × дешевле gpt-4o Латентность Наблюдения
gpt-4o (baseline) $0.2524 3.2 с эталон
gpt-4o-mini $0.0150 16.8× 2.8 с качество близко, местами короче
claude-haiku-4.5 $0.1134 2.2× 6.6 с самый «умный» (сам добавил «с 1 июля новый прайс», нашел обе услуги-тезки), но эмодзи вопреки промту
deepseek-v3.2 $0.0156 16.2× 5.1 с хорош, но иногда слишком краток

Все 4 модели прошли edge-case («какая погода в Москве» → корректный отказ). Вывод на тот момент: mini и deepseek — кандидаты. Вывод оказался преждевременным — синтетика льстит.

3.2. Реальные вопросы, батч 1 (10 вопросов, 20.06)

gpt-4o-mini ($0.0167, 16.7×) vs deepseek-v3.2 ($0.0176, 15.8×) vs prod.

  • deepseek дважды ответил ЛУЧШЕ прода: на «А для детей?» нашел больше услуг + бассейн, на вопрос про соц. тариф добавил будущую цену с 1 июля.
  • gpt-4o-mini: паразитная фраза «Уточните пожалуйста, о чем именно идет речь?» в 3 ответах из 10 (артефакт правила из промта, который слабые модели применяют слишком агрессивно).
  • Обнаружен side-баг нашего пайплайна: rephrase-шаг иногда превращает вопрос в готовый ответ («Спасибо» → «Пожалуйста! Если у вас возникнут еще вопросы...»).

3.3. Реальные вопросы, батч 2 (вопросы 11–20, 20.06)

  • deepseek-v3.2, вопрос «Спасибо»: сгенерировал полную «визитку» — адрес, телефон, подпись команды клиента — которых не было в контексте. Первая серьезная галлюцинация.
  • gpt-4o-mini, «Сколько услуг в нем?»: ответил «6 услуг для взрослых» — неверный счет (по базе на тот момент 3 в крытой части).
  • deepseek обрезался лимитом токенов в 5 ответах из 10 (многословный), лепил эмодзи и заголовки вопреки промту.

3.4. Реальные вопросы, батч 3 (вопросы 21–30, + claude-haiku, 20.06)

Модель Стоимость 10 Латентность Ключевой провал
gpt-4o-mini $0.0064 (~16×) 1.7 с сказал «зимний период» 20 июня — сезонная ошибка
deepseek-v3.2 $0.0067 (~15×) 7.2 с на «Как добраться» сгенерировал фиктивные автобусы №155–260, затем римские цифры I–CC, пока не кончились 1200 токенов (21.6 секунды)
claude-haiku-4.5 $0.053 (~2×) 5.7 с эмодзи в каждом ответе, переспросы, вопрос про боулинг — единственный, кто нашел цены

На нюансированной паре вопросов про боулинг (входит/не входит в билет) все три модели дали три разных ответа. deepseek-v3.2 исключен из кандидатов за галлюцинации.

3.5. V2: лечим формат промтом (30 вопросов: haiku + gpt-4.1-mini + gpt-4.1-nano, 20.06)

Добавили в промт жесткий блок «СТРОГИЕ ОГРАНИЧЕНИЯ ФОРМАТА: НЕ используй emoji... НЕ используй заголовки #...».

Результат: эмодзи 0/30 у всех трех моделей (у haiku до этого было почти 30/30). Формат-дисциплина промтом лечится полностью.

Модель Стоимость 30 × дешевле Латентность «Уточните»-паразит Проблемы
claude-haiku-4.5 (no-emoji) $0.0886 5.1× 3.5 с 18/30 переспросы вместо ответов
gpt-4.1-mini $0.0274 16.4× 1.2 с 11/30 путал социальный/детский тариф, тянул устаревшую дату прайса
gpt-4.1-nano $0.0069 65× 1.2 с 11/30 37% вопросов игнорирует; на одном — сезонная ошибка

Рейтинг на тот момент: gpt-4.1-mini — кандидат №1.

3.6. V3: gpt-4.1-mini с чищеным промтом (20 вопросов, 20.06)

Убрали из промта правило «односложный вопрос → уточни» (источник паразита).

  • «Уточните»: 0/20 (было 23%) — правило-паразит побеждено.
  • Кэширование OpenAI: 94–99% попадание в кэш статичной части промта (см. раздел 7).
  • Стоимость: $0.0073 за 20 ответов.
  • НО: 5 фактических ошибок из 20 — выдал 800 руб. вместо актуального прайса, трижды «в базе нет информации» там, где она была, назвал дату «до 31.12.2026» вместо «до 30.06» (в базе два прайса на разные периоды — модель выбрала не тот), посчитал «10 услуг», перечислив 9.
  • Вывод: 25% фактических ошибок — в прод нельзя.

3.7. MiniMax: ценовой сюрприз прокси (3 модели, 20 вопросов)

Ожидали дешевую альтернативу. Получили обратное — через routerai MiniMax оказался ДОРОЖЕ gpt-4o:

Модель Стоимость 20 ответов vs gpt-4o ($0.42)
minimax-01 $2.53 в 6 раз дороже
minimax-m2 $3.63 в 8.6 раза дороже
minimax-m2-her $5.09 в 12 раз дороже

Качество m2 при этом приличное (1 критичная просадка из 20). Урок: тарифы прокси-агрегатора на конкретную модель надо проверять ДО тестирования — они могут радикально отличаться от цен вендора.

3.8. GPT-5.2 и GPT-5-mini, попытка 1: без reasoning_effort (22 вопроса)

  • Латентность 11.6–11.9 секунды — обе модели «думают» по умолчанию (внутренний reasoning).
  • gpt-5-mini: 5–8 ПУСТЫХ ответов из 22 (весь лимит токенов уходил на размышления, на ответ не оставалось).
  • При этом gpt-5.2 показал класс: на обрывки «Ау???» и «Ск» дал полные полезные ответы там, где прод переспрашивал.

3.9. GPT-5.2 и GPT-5-mini, попытка 2: reasoning_effort=low (40 вопросов)

Модель Пустых ответов Латентность avg / p95 Стоимость 40 × дешевле
gpt-5.2 0 5.8 с / 13 с $0.324 2.5×
gpt-5-mini 0 5.8 с / 13 с $0.086 9.4×

Параметр reasoning_effort=low полностью убрал пустые ответы. Но:

  • gpt-5-mini «галлюцинировал» две услуги, которых не было в базе (см. поправку в разделе 9 — история с двойным дном), и путал текущий прайс с будущим.
  • gpt-5.2 умнее всех обращался с датами (замечал, что летний прайс еще не вступил в силу), но на расчетном вопросе («номер на 2 взрослых + ребенок») ушел в «уточните».
  • 5.8 секунды против 1.6 у прода — заметно для клиента.

4. Финальный марафон: 200 реальных вопросов подряд (5 июля)

Каждая модель получила одни и те же 200 последних реальных вопросов клиентов с тем же контекстом. Судья тот же. Это главная таблица всей серии:

Модель Критичные просадки Галлюцинации Отказы/пустые Верность (prod 9.2–9.7) Полнота (prod 7.8–8.7) Латентность Стоимость 200 × дешевле
gpt-4o (prod, эталон) 0 0 0 1.6 с ~$4.05 (оценка)
gpt-4o-mini 77 (38.5%) 9 15 8.00 6.61 ~2.5 с ~$0.16 ~25×
gpt-5.4-mini 60 (30%) 4 7 8.42 7.21 8.8 с $0.395 ~10×
deepseek-v4-pro 49 (24%) 3 24 (пустые!) 7.96 7.57 12.9 с $0.907 ~4.5×
Grok 4.3 (x-ai) 55 (28%) 3 7 8.71 7.25 5.2 с ~$1.8 (факт. тариф)* ~2.2×*
Gemini 3 Flash Preview 128 (64%) 2 108 (!) 4.08 3.61 6.0 с $0.247 ~16×
qwen3.7-plus снята с теста 46 с/ответ

* Строка Grok исправлена задним числом: в первой редакции стояло «$0.496 и ~8×» — расчет по заниженной оценочной цене. После переключения в прод сверили фактический биллинг routerai (поле usage.cost в ответе API): реальная стоимость тех же 200 ответов ≈ $1.8, экономия ~2.2× (подробности — раздел 9, поправка 6). Стоимость остальных моделей в таблице — расчетная по прайс-листам вендоров; фактические тарифы прокси могут отличаться (проверено замером только для Grok и MiniMax).

Комментарии по каждой:

gpt-4o-mini — худший набор галлюцинаций из «рабочих» моделей: на «Спасибо большое» выдал адрес клиента; заявил «сейчас зимний период» 5 июля; «у клиента 20 услуг» (выдумал число); «Дневной+ не включает шведский стол» (включает); назвал цену номера 4500 руб. вместо 6500; в одном ответе жил в «27 октября» с прайсом «до 31.10.2023» (данные из обучения вместо контекста).

gpt-5.4-mini — лучше 4o-mini по всем осям, но унаследовал «адрес на Спасибо» и «в Семейный не входит питание». Латентность 8.8 с.

deepseek-v4-pro — лучшее качество содержимого среди дешевых (24% просадок, в 88 случаях из 200 судья счел его ответ ЛУЧШЕ прода), НО: 24 пустых ответа на простейшие вопросы («Адрес можете прислать?» → пустая строка) и 12.9 секунды на ответ. Не готов для чата.

Grok 4.3 — лучший баланс: мало галлюцинаций (3), мало отказов (7), самая высокая верность среди дешевых (8.71), терпимая латентность (5.2 с), экономия ~2× по фактическому тарифу (см. поправку 6 в разделе 9). Его галлюцинации: «терминалы есть на входе» (нет), «питание в Семейный не включено» (включено — см. раздел 9 про причину), спорная трактовка сезона услуг.

Gemini 3 Flash Preview — антирекорд: 108 из 200 ответов ПУСТЫЕ, включая «Сколько стоит?», «Есть ли кафе?». Предположительно safety-фильтры или несовместимость с длинным русскоязычным промтом через прокси. Для нашего кейса непригодна полностью.

qwen3.7-plus — 46 секунд на один ответ при реальном размере контекста (5000 токенов на входе, 1445 токенов внутренних размышлений). Снята после первого же замера.

Решение: бот переключен на Grok 4.3. На момент решения экономия оценивалась в ~12 000 руб/мес; фактическая после сверки биллинга — ~3–6 тыс руб/мес, расход ~250–350 руб/день вместо ~450 (разбор расхождения — раздел 9, поправка 6). Плата: +3.6 секунды к ответу и ~28% ответов чуть менее полные (но фактически верные).

5. Сводные наблюдения по классам моделей

  • Флагман (gpt-4o): 0 критичных ошибок на 200 вопросах. Дорого, но это эталон надежности.
  • Мини-модели OpenAI (4o-mini, 4.1-mini, 5-mini, 5.4-mini): дешевле в 10–25 раз, стабильный набор болезней — галлюцинации на «вежливых» репликах, путаница между несколькими прайсами, ложные отказы. Каждое поколение чуть лучше предыдущего (38.5% → 30% критичных просадок за ~год поколений).
  • Reasoning-модели (gpt-5.x, deepseek-v4, qwen3.7): качество на уровне или выше, но латентность 6–46 секунд убивает чат-UX. Обязателен reasoning_effort=low, иначе пустые ответы.
  • Китайские модели через прокси: deepseek v3.2 — галлюцинации списков; v4-pro — качество выросло радикально, но пустые ответы; MiniMax — ценовая ловушка прокси; qwen — латентность.
  • Grok 4.3: темная лошадка, взявшая баланс. Но см. раздел 8 — «дешевая» модель потребовала обвязки.

6. Параллельные эксперименты: экономия без смены модели

До и параллельно с подбором модели крутили ручки RAG-пайплайна (все тесты — на тех же реальных вопросах с судьей):

Эксперимент Экономия Качество Вердикт
top_k 10 → 5 (меньше фрагментов в контекст) −58% 3/20 критичных (ложное «с 3 лет взрослый билет») отклонено
top_k 10 → 7 −27% 1/20 критичных принято
chunk_size 1500 → 1000 токенов −36.5% качество ВЫРОСЛО (верность 9.2 vs 8.7 — точнее единица поиска) принято
chunk_size 1000 → 700 еще −9% 9/20 критичных (ответы-перечисления разваливаются) отклонено
Rerank (top-10 → LLM-отбор → top-3) −57% 6/20 критичных; фундаментальный предел: если нужный чанк не попал в кандидаты — реранкер бессилен отклонено
Rerank v2 (top-5 + улучшенный промт) −7% не лучше отклонено
Router (классификатор → mini для простых → проверка → fallback на gpt-4o) −18% (вместо ожидаемых −55%) 73% «простых» вопросов провалили проверку и ушли в fallback; латентность до 16 с отклонено
Pre-summary (сжатие чанков в 2.2 раза при индексации) −57% input 37% критичных просадок — сжатие съедает условия и оговорки отклонено
Короткие сообщения (≤3 слов) через mini ~−10% общего расхода 38% критичных: «Скидки для СВО?» → mini соврал «нет скидок»; на «Спасибо большое» выдал требование справки об инвалидности отклонено

Ключевой промежуточный итог: только не-модельными ручками (top_k=7, chunk=1000, чистка промта с 7.5К до 3.4К знаков, точечные QA-дополнения) расход упал с ~1000 до ~450 руб/день (−55%) БЕЗ потери качества — еще до смены модели.

Отдельный вывод для статьи: «короткий вопрос ≠ простой вопрос». Гипотеза «сообщения из 2–3 слов пусть обрабатывает дешевая модель» разбилась о данные: короткие вопросы часто контекстно-зависимые и провоцируют худшие галлюцинации.

7. Инфраструктурные находки

  1. Кэширование промта OpenAI работает через прокси прозрачно: повторные запросы с одинаковой статичной частью промта дают 94–99% cache hit (вход дешевеет вдвое на закэшированной части). Проверка: два одинаковых вызова, у второго cached_tokens: 1280 из 1413. Важен порядок сборки промта: статичное — в начало, RAG-фрагменты — в конец.
  2. reasoning_effort=low обязателен для GPT-5-семейства в чат-сценариях: без него — 12 секунд и пустые ответы, с ним — 0 пустых.
  3. Цены прокси ≠ цены вендора, а расчет ≠ биллинг (кейс MiniMax: в 6–12 раз дороже gpt-4o вместо ожидаемой экономии; кейс Grok: фактический тариф в 3.5–4 раза выше нашей прикидки). routerai возвращает фактическую стоимость каждого вызова в поле usage.cost ответа API — итоговую экономику сводить по нему, а не по прайс-листам.
  4. Судья-LLM дешев (~$0.0003/сравнение) и в целом адекватен, но требует ручной перепроверки топ-кейсов и аккуратного промта (см. раздел 9, пункт про транслит).
  5. Смена эмбеддинг-модели (text-embedding-3-small → 3-large, в 6.5 раза дороже за токен) заметного прироста качества поиска на наших тестах не дала; расходы на эмбеддинги — копейки на фоне генерации (соотношение стоимости ~1:6000 на запрос).

8. Проверка боем: что случилось после переключения на Grok 4.3

Честная часть, без которой статья будет неполной. За первые ~2 недели на Grok случились два инцидента с ложными фактами:

  1. «Завтра у нас выходной» (18.07, суббота): клиент спросил «Вы завтра работаете?» — бот ответил, что выходной, хотя клиент работает ежедневно. Разбор показал: виновата не только модель — база знаний к тому моменту заросла мусорными QA-парами (владелец бота массово сохранял обрывки вопросов с ответами-заглушками), они вытеснили из поискового контекста фрагмент с графиком, а Grok доклеил бытовую ассоциацию «воскресенье = выходной». gpt-4o на этот же вопрос отвечал правильно 5 раз до этого — он устойчивее к замусоренному контексту.
  2. «С 12 лет — без родителей» (20.07): в контексте были ОБА правила («до 12 лет — под постоянным контролем» и «до 18 лет без сопровождения не допускаются») — Grok инвертировал первое и проигнорировал второе. Чистая ошибка рассуждения: дешевая модель делает логические инверсии там, где флагман удерживается.

Чем ответили (архитектурная обвязка вместо возврата на дорогую модель):

  • Цифро-контроль (digit guard): детерминированная проверка — каждое число в ответе (цены, даты, возрасты) обязано присутствовать во входном контексте или быть арифметически выводимым. Без LLM, ноль затрат.
  • Словесный guard: маркеры недоступности («выходной», «закрыт», «не работает») в ответе без подтверждения в контексте → флаг.
  • Квота retrieval: максимум 3 QA-пары из 7 фрагментов контекста, документам гарантированы 4 места — мусорные пары физически не могут вытеснить прайс и график.
  • Чистка «двойных стандартов» в базе знаний: аудит нашел 10 мест, где формулировки провоцируют ложные выводы (пары порогов 12/18 лет, услуги-тезки в двух зонах с разными возрастами, семейство тарифов «Плюс», которое нигде не расшифровано, условия без явного И/ИЛИ, конфликтующие цены парковки).

Тезис для статьи: дешевая модель — это не «замена в одну строку конфига». Это переезд, при котором слабые места данных и пайплайна, которые флагман молча компенсировал своим интеллектом, вылезают наружу. Экономия реальна, но она покупается инженерной обвязкой и чистотой базы знаний.

9. Поправки задним числом (важно для честности)

При финальной сверке нашли ошибки в собственных выводах — оставляем их в документе намеренно:

  1. «Галлюцинация» двух услуг — не галлюцинация. В июльских тестах мы записали gpt-5-mini в галлюцинаторы за упоминание двух услуг и даже вписали в промт судьи «таких услуг нет». Позже выяснилось: эти услуги реально существуют на территории клиента — их просто не было в той версии базы знаний. Модель, вероятно, знала о клиенте из обучения больше, чем наша база на тот момент.
  2. Клеймо «возможная галлюцинация» на claude-haiku за «вход для гостей отеля бесплатный» — тоже снято: этот факт был в базе знаний.
  3. Часть «галлюцинаций цен» кормили мы сами: в промте бота были захардкожены устаревшие цены (наследие ранних версий). Модели честно цитировали протухший промт, а мы считали это выдумкой. После выноса всех цен из промта в прайс-документ класс ошибок исчез.
  4. Судья на транслите — испорченные оценки: в одном из rerank-тестов промт судьи случайно написали транслитом — судья стал строже придираться к мелочам, и тест показал 14/20 «критичных» просадок при реальных ~3. Перепроверка вручную обязательна.
  5. Ошибки «в базе нет информации» у дешевых моделей часто были следствием нашего rephrase-шага, который сужал вопрос контекстом прошлых реплик («Можно ли докупить питание?» превращался в «...при социальном тарифе для многодетных семей»).
  6. Итоговая цифра экономии Grok была завышена расчетом по прикидочной цене. В таблице марафона стоимость Grok считалась по оценке $0.30/$1.50 за 1М токенов — фактический тариф routerai (замерен по полю usage.cost) оказался в 3.5–4 раза выше (~$1.1 вход / ~$5.5 выход за 1М с наценкой прокси). Вдобавок Grok — reasoning-модель: даже на «скажи ок» тратит ~210 внутренних токенов размышлений, тарифицируемых как выход, а в проде на каждое сообщение добавляется rephrase-вызов той же моделью. Итог: реальный расход после переключения — ~250–350 руб/день вместо расчетных ~50–55; экономия на генерации ~2× к флагману, по дневному счету — минус 25–45% к оптимизированному gpt-4o (а не «в 8 раз»). Урок повторил MiniMax-кейс: сверяйте фактический биллинг, а не расчетные цены — мы наступили на эти грабли дважды за одну серию.

10. Главные выводы серии

  1. Тестировать только на своих реальных вопросах. Синтетический тест дал «все кандидаты хороши», реальные 200 вопросов — разброс от 24% до 64% критичных просадок.
  2. Латентность — самостоятельная метрика. Качественная модель с 13 секундами ответа (deepseek-v4-pro) проигрывает средней с 5 секундами: клиент чата не ждет.
  3. Флагман прощает грязные данные, дешевая модель — нет. Половина «ошибок моделей» при разборе оказалась двусмысленностями и мусором в базе знаний.
  4. Формат лечится промтом, факты — нет. Эмодзи и заголовки убрали одной инструкцией (30/30 → 0/30). Галлюцинации инструкциями не убираются — только данными и детерминированными проверками.
  5. Экономику дают и не-модельные ручки: −55% расхода получили до всякой смены модели (размер чанков, количество фрагментов, чистка промта, кэш).
  6. Прокси-агрегатор — проверяй цены и параметры: MiniMax дороже флагмана в 6–12 раз; фактический тариф Grok — в 3.5–4 раза выше прикидки; GPT-5 без reasoning_effort=low неюзабелен. Экономику сводить по фактическому биллингу (usage.cost), не по прайс-листам.
  7. LLM-судья работает, но не слепо: дешево масштабирует сравнение, однако сам вносит ошибки — топ-кейсы перепроверять руками.
  8. Итог в цифрах: расход ~1000 → ~450 руб/день оптимизацией пайплайна (−55%), далее переключение gpt-4o → Grok 4.3 — фактически ~250–350 руб/день (еще −25–45% по реальному биллингу) с компенсирующей обвязкой (guards, квоты retrieval, чистка базы). Суммарно ×3–4 к стартовой точке. Главную экономию дала оптимизация пайплайна, а не смена модели. Качество держим мониторингом инцидентов; порог возврата на флагман определен заранее.

Нужен разбор похожей задачи?

Обсудить проект