ИИ-консультант на узбекском и русском: как настроить двуязычного бота
Двуязычный бот — это не «включить перевод». Основные проблемы начинаются на узбекской кириллице, транслитерации и цене токенов, а не на самом переводе.
Три письменности, а не два языка
Реально вы обслуживаете четыре варианта ввода: русский, узбекская латиница, узбекская кириллица и смешанный текст. Старшее поколение и часть госсектора пишут кириллицей, молодёжь — латиницей, а в одном сообщении может встретиться и то и другое.
Заводить отдельные ветки диалога под каждую письменность не нужно. Достаточно нормализовать ввод: привести узбекскую кириллицу к латинице перед матчингом по каталогу и словарям, оставив исходный текст для передачи в модель.
Отвечать бот должен в той письменности, в которой к нему обратились. Ответ латиницей на кириллическое сообщение читается как машинный и снижает доверие, особенно в госструктурах и у аудитории 40+.
Определение языка на практике
Автоопределение по частотным словам ломается на коротких сообщениях: «salom», «narxi qancha», «сколько» — двух слов недостаточно для надёжного вывода. Не стройте логику на отдельной библиотеке детекции.
Рабочий подход: в системном промпте прямо предписать отвечать на языке и в письменности последнего пользовательского сообщения, а язык интерфейсных кнопок хранить в профиле пользователя, спросив один раз при старте.
Хранимый выбор должен переопределяться поведением: если пользователь три сообщения подряд пишет на русском, а в профиле стоит узбекский, переключайте автоматически и сообщайте об этом одной строкой.
Качество узбекского у моделей
Крупные модели уверенно понимают узбекский, но генерируют его заметно слабее, чем русский или английский: встречаются кальки с русского, неестественный порядок слов, ошибки в падежных окончаниях.
Отсюда правило: всё, что можно зафиксировать шаблоном, фиксируйте шаблоном. Приветствия, описания услуг, условия доставки, кнопки, юридические формулировки — это статические тексты, вычитанные носителем, а не генерация на лету.
Свободную генерацию на узбекском оставляйте для непредсказуемых веток диалога и обязательно прогоняйте выборку логов через носителя языка хотя бы раз в две недели на старте.
Цена токенов на узбекском
Узбекский текст, особенно кириллицей, токенизируется значительно хуже английского: то же сообщение может стоить в два-три раза больше токенов. При латинице разрыв меньше, но он есть.
На практике это означает, что нельзя тащить весь длинный системный промпт на трёх языках в каждый запрос. Держите один компактный промпт на английском с инструкцией отвечать на нужном языке — это дешевле и работает не хуже.
Ограничивайте историю диалога: последние шесть-восемь сообщений плюс сжатая сводка. Без этого расход на длинных консультациях растёт нелинейно.
Что тестировать перед запуском
Соберите набор реальных фраз в обеих письменностях, включая опечатки и смешанный ввод, и прогоняйте на нём бота после каждого изменения промпта. Двадцати-тридцати кейсов достаточно, чтобы ловить регрессии.
Отдельно проверьте числа и цены: модели любят переформатировать суммы, теряя разряды. Суммы в сумах должны подставляться шаблоном из вашей базы, а не воспроизводиться моделью по памяти.
Проверьте поведение на смеси: сообщение, где половина на русском, половина на узбекском. Это самый частый реальный кейс и одновременно тот, который чаще всего ломает наивную реализацию.