RU EN

Telegram-бот для изучения языка: опыт бота-переводчика с грузинского

Мы сделали Kartuli, Telegram-бот, с которым проще объясниться в Грузии. Вы пишете фразу по-русски и получаете грузинский перевод, подсказку, как его прочитать, и озвучку. Задумка простая, но на деле почти каждая часть потребовала отдельного решения. Ниже то, с чем мы столкнулись. Это пригодится, если вы заказываете бота для изучения языка, бота-разговорник для туристов или любого бота, который отвечает через нейросеть.

Перевод ещё не значит, что вас поймут

Машинный перевод выдаёт правильный грузинский текст, только прочитать его человек не может: у грузинского свой алфавит, мхедрули. Получается, перевод формально есть, а сказать фразу вслух вы всё равно не в состоянии.

Поэтому ответ бота строится вокруг произношения. Под переводом идёт транскрипция по-русски, слово разбито на слоги, как в учебнике, а не одной сплошной строкой. Кнопка «Озвучить» проигрывает фразу синтезированным грузинским голосом. Сценарий короткий: перевёл, послушал, повторил.

Со слогами пришлось повозиться больше, чем казалось. Сначала подсказка склеивала соседние слова, и фраза из трёх слов читалась как одно длинное. Потом в скобки слогов попадали запятые и вопросительные знаки. Каждая такая мелочь сбивает человека, который пытается прочитать фразу с экрана в магазине, так что под каждую написали отдельный тест.

Сначала словарь, нейросеть потом

Самые частые фразы для поездки известны заранее: поздороваться, поблагодарить, спросить цену, попросить счёт. Для них в боте есть встроенный словарь. Такие фразы переводятся мгновенно, без сети и без обращения к платной модели, а перевод в словаре проверен вручную.

Всё, чего нет в словаре, уходит в нейросеть Gemini. У запроса жёсткий таймаут, 15 секунд. Если модель не ответила или ключ не настроен, бот честно пишет об ошибке, а не делает вид, что всё в порядке.

Такая связка выгодна заказчику по трём причинам. Ходовые ответы не зависят от внешнего сервиса. Расходы на модель растут только на редких фразах. А качество самых важных ответов не меняется, когда модель обновляют.

Ответ модели надо проверять

Нейросеть иногда отвечает не тем, что просили. Вместо грузинского приходит латиница, перевод вперемешку с пояснением на русском или обрезанная фраза. Если показать такое пользователю, а потом ещё и озвучить, он выучит ерунду.

Поэтому в боте простое правило: ответ модели принимается, только если все буквы в нём грузинские. Неполный или смешанный перевод бот отбрасывает и сообщает об ошибке. Для обратного направления, с грузинского на русский, проверка зеркальная.

То же стоит делать в любом боте, который пересказывает ответ нейросети клиенту: заранее описать, как выглядит правильный ответ, и проверять его кодом до отправки. Это пара строк, которые закрывают целый класс жалоб.

Озвучку лучше кешировать

Озвучку делает Edge TTS. Голос выбирали так: прогнали варианты на одних и тех же пяти фразах и сравнили. Синтез занимает время, и если каждое нажатие кнопки будет отправлять новый запрос, бот начнёт тормозить именно тогда, когда человек стоит у кассы.

Поэтому звук сохраняется. Фраза из избранного проигрывается из сохранённого файла. Для алфавита, 33 букв с названием и примером, звук создаётся один раз и потом берётся с диска.

Отдельно пришлось привязать кнопку «Озвучить» к её сообщению. Иначе, если пролистать переписку назад и нажать кнопку под старой фразой, могла зазвучать последняя. В переписке на десяток фраз это сразу бросается в глаза.

Голос и фото вместо текста

В поездке не всегда удобно печатать. Поэтому бот понимает ещё два вида ввода.

Голосовое сообщение или кружок по-русски длиной до 30 секунд бот распознаёт и отвечает той же карточкой перевода. Аудио удаляется сразу после распознавания.

Фото вывески или меню бот разбирает так: достаёт с картинки грузинский текст, переводит его на русский и подсказывает произношение. Фотография обрабатывается в памяти и не сохраняется.

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

Есть ещё встроенный режим. В любом чате можно набрать имя бота и фразу, и перевод с произношением вставится прямо в переписку. Так можно отправить грузинскую фразу собеседнику, не переключаясь между приложениями.

Обновление зависимостей может уронить бота

Самый поучительный сбой в этом проекте был не в логике бота. На раннем этапе перевод шёл через бесплатную библиотеку для Google Translate. При установке она потянула за собой старую версию сетевой библиотеки httpx, а та обращалась к модулю `cgi`, которого больше нет в Python 3.13. В итоге бот вообще не запускался, и в коде бота не было ни одной ошибки.

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

Мелочи, которые делают бота удобным

  • Неизвестная команда получает подсказку, а не молчание. Человек не должен гадать, сломался бот или нет.
  • Избранные фразы разложены по категориям, и у каждого пользователя свой список.
  • Для алфавита есть таблица всех букв на одном экране и карточка буквы с чтением и примером.
  • Токен бота не попадает в журналы. Адрес запроса к Telegram содержит токен, и обычное логирование незаметно его записывает.

Что спросить у подрядчика

Если вы заказываете похожего бота, по этому списку удобно проверить исполнителя:

1. Какие ответы бот отдаёт без нейросети, а какие через неё? 2. Как бот проверяет ответ модели, прежде чем показать его пользователю? 3. Что увидит пользователь, если модель не ответила? 4. Кешируется ли озвучка и другие тяжёлые ответы? 5. Что хранится из голосовых сообщений и фото пользователей? 6. Кто и как узнает, что бот перестал запускаться?

Если подрядчик отвечает на эти вопросы сразу и конкретно, значит, он уже набивал эти шишки. Kartuli можно открыть и попробовать самому: ссылка на бота есть на странице кейса. Если нужен свой бот, переводчик, разговорник или помощник для клиентов, напишите в Telegram, обсудим задачу. Подробнее об услуге можно прочитать на странице Telegram-бот под ключ.

Нужно похожее?

Сделаем Telegram-бота под вашу задачу: приём заявок и записей, каталог или меню, ответы на частые вопросы, уведомления вам в чат, простая админ-панель для просмотра и выгрузки заявок.

Telegram-бот под ключ — от 25 000 ₽, срок от 10 дней.

← Все статьи

Контакты

Напишите нам — обсудим задачу и предложим план в течение суток.

dmitry.zhdanov@craftpodium.com

Telegram: @signmark