У меня включён AI-перевод с 14 языками, включая португальский (pt). При создании нового поста все языки переводятся автоматически, кроме португальского — он просто отсутствует в списке переводов. Другие локали (ru, de, fr, es, it, nl, pl, uk, fi, sv, da, nb_NO) генерируются корректно.
Версия Discourse: 2026.1.3 Плагин AI: последняя версия Модель перевода: Mistral Large/Small
Шаги для воспроизведения:
Включите AI-перевод с португальским (pt) в списке локалей
Создайте новый пост на английском языке
Проверьте переводы — PT отсутствует
Ожидаемый результат: перевод на PT генерируется автоматически
Фактический результат: PT не генерируется, его нужно добавлять вручную
Не могли бы вы, пожалуйста, посмотреть на это? Локаль португальского языка (pt) постоянно пропускается при автоматическом переводе с помощью ИИ. Все остальные 13 языков переводятся корректно. Это критическая проблема для нашего сообщества, так как мы обслуживаем португалоязычных пользователей на Мадейре, Португалия.
Да, на первом скриншоте показана настройка «Поддерживаемые локали для локализации контента» с 14 языками, включая PT.
Пост на втором скриншоте был написан на английском языке. Язык по умолчанию на сайте также английский (en). Все 14 языков включены, в том числе PT, однако перевод на PT постоянно пропускается, тогда как остальные 13 языков генерируются корректно.
Хм, интересно. Это сайт, который мы хостим? Если да, я бы хотел посмотреть конфигурацию и понять, что происходит. Можете отправить мне личное сообщение с URL сайта?
Здесь, на meta, португальский язык включен, и всё работает отлично.
Возвращаюсь к публичной теме, возникшей в ходе краткого разговора в личных сообщениях:
Это интересный результат.
В разделе ИИ > Переводы > Настройки перевода есть несколько соответствующих параметров, но они не совсем то, что вам нужно. Я не думаю, что запланированная задача отправляет 14 одновременных запросов на перевод.
Интересно, сталкивался ли @nat с этим в процессе разработки и тестирования функции.
Хм, насколько мне известно, нет. Я помню, что некоторые сайты поддерживали более 10 языков, но ранее не сталкивался с этой проблемой.
Указывают ли /logs на что-либо? У нас есть скрытая настройка подробного ведения журналов ai_translation_verbose_logs, которую можно включить на некоторое время.
Обновление: проблема не специфична для португальского языка. При трёх локалях (EN, RU, PT) любая локаль может быть случайно пропущена — иногда RU, иногда PT. Кроме того, заголовок и тело сообщения переводятся независимо и непоследовательно: заголовок может быть переведён, а тело пропущено, или наоборот. Тестирование проводилось с Mistral Small, Mistral Large и GPT gpt mini. Проблема сохраняется во всех моделях.
Все публикации публикуются на английском языке (локаль сайта по умолчанию — английский). Перевод на другие локали осуществляется непоследовательно и случайно, независимо от содержания или длины публикации.
Я не могу понять, что вызывает это и почему это происходит.
В этом случае Мойн недавно сообщил мне о проблеме на meta, где заголовок был переведён, но текст сообщения пропущен, потому что он был слишком большим.
Существует настройка сайта «Лимит на количество постов», но я сомневаюсь, что это причина данной проблемы — в противном случае перевод не работал бы для всех языков, а лишь спорадически для одного или двух.
Ещё один параметр, который можно проверить, — это окно контекста вашей LLM в настройках LLM.
Кстати, я категорически не рекомендую использовать GPT mini для переводов. Многие клиенты сообщали, что качество перевода очень низкое, и наши ранние тесты это подтвердили.
Failed to translate tag 31 to pt: {"object":"error","message":"Internal server error","type":"unreachable_backend","param":null,"code":"1100","raw_status_code":503}
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:206:in 'block (2 levels) in DiscourseAi::Completions::Endpoints::Base#perform_completion!'
Также встречаются ошибки «failed to translate topic» и «failed to translate post» с аналогичными сбоями на стороне бэкенда.
Я не углублялся в код, но меня интересует, почему у заданий DetectTranslatePost и DetectTranslateTopic указано sidekiq_options retry: false?
Моя проблема всё ещё не решена.
Это критически важно для меня и моего форума.
Многоязычность должна работать безупречно.
Языки по-прежнему пропускаются случайным образом, независимо от локальной модели.
Баг: Когда любой провайдер LLM (Mistral, OpenAI) возвращает ошибку 503, модуль DiscourseAi::Translation молча пропускает перевод без повторных попыток.
Пример лога:
DiscourseAi::Completions::Endpoints::Mistral: status: 503
{“type”:“unreachable_backend”,“code”:“1100”}
DiscourseAi::Translation: Не удалось перевести тему X на русский язык
Корневая причина: В модуле DiscourseAi::Completions::Endpoints отсутствует логика повторных попыток для временных ошибок сервера. Это не специфично для конкретного провайдера — аналогичное поведение ранее наблюдалось и с OpenAI.
Ожидаемое поведение: Выполнять повторные попытки с экспоненциальной задержкой при получении ответов 503/504 перед тем, как помечать перевод как неудачный.
Предлагаемое решение: Добавить логику повторных попыток в модуле DiscourseAi::Completions::Endpoints для всех провайдеров единообразно.
Это влияет на любые экземпляры Discourse, использующие AI-перевод с поддержкой нескольких языков.
Вам необходимо устранить корневую проблему, то есть ситуацию, когда бэкенд возвращает ошибку 503. Может показаться простым заставить Discourse бесконечно повторять одну и ту же попытку перевода, но имейте в виду, что каждый запрос к LLM влечёт за собой затраты на токены, и нам необходимо действовать осмотрительно, чтобы не исчерпать их. Как только вы исправите проблему с LLM, вы сможете вручную запланировать перевод темы и проверить, решится ли она.
Пожалуйста, скорректируйте свои ожидания. Вы используете бесплатное программное обеспечение, и мы помогаем вам максимально возможными способами.
Спасибо за ответ. Хочу уточнить: я использую не самую дешёвую модель LLM, чтобы сэкономить деньги. Я использую её, чтобы протестировать, как работает функция перевода на практике. Выбор модели не является сутью вопроса.
Суть в том, что когда Mistral возвращает ошибку 503, Discourse AI молча отбрасывает перевод без какого-либо уведомления администратора, без очереди повторных попыток и без возможности узнать, какие темы были пропущены. Именно об этой проблеме пользовательского опыта я и говорю — не о стоимости токенов.
Я понимаю, что это проект с открытым исходным кодом, и вы делаете всё возможное. Я это ценю. Но фраза «скорректируйте свои ожидания» немного демотивирует того, кто активно тестирует, сообщает об ошибках и пытается помочь улучшить продукт.
Я продолжу следить за этой темой и с нетерпением жду исправления.
Поскольку вы используете версию ESR, вам потребуется гораздо больше терпения, чем просто ждать возвращения людей на работу после выходных. Выпуски ESR происходят только два раза в год.
Кстати, это не так. Раньше было, но на прошлой неделе они перешли на 4.0-latest, чтобы получить другие исправления ошибок.
(И в ESR действительно обратно портируют некоторые исправления ошибок).