Перевести веб-сайт на десять, двадцать или сорок языков с помощью одного ИИ можно быстро. Сложнее вопрос, можно ли доверять результату. Одна языковая модель время от времени придумывает слова, переводит названия продуктов или изменяет число, и сама этого не замечает. Поэтому мы написали для Odoo 19 модуль, в котором несколько ИИ и служб перевода работают над одним и тем же текстом, анонимно оценивают результаты друг друга и договариваются о формулировке, звучащей одновременно точно и естественно. Всё, что не однозначно, передаётся человеку для решения.
Модуль называется ai_translation_consensus и доступен на GitHub как свободное программное обеспечение под лицензией AGPL-3:
github.com/Alex0176/odoo-ai-translation-consensus
Содержание статьи
Идея: перекрёстная проверка вместо доверия
Модуль умеет две вещи:
- Переводить: дополнять отсутствующие (или устаревшие) переводы каждого переводимого поля в Odoo, то есть записей блога, веб-страниц, меню, продуктов и всего остального, что Odoo хранит на нескольких языках. При этом ИИ видят не только отдельное предложение, но и соседние блоки и фрагмент всей страницы. Так отдельные слова понимаются в правильном контексте.
- Вычитывать: проверять текст на его собственном языке и предлагать лучшие формулировки или исправления. Оригинал при этом всегда является одним из кандидатов. Если побеждает оригинал, ничего не меняется.
Основа — взаимная проверка. Каждый ИИ хорошо оценивает чужие тексты, даже если сам иногда ошибается. Модуль использует это: несколько поставщиков пишут по одной версии, а затем те же поставщики оценивают все версии, не зная, от кого они. Свою собственную версию поставщик не оценивает.
Как возникает предложение
- Перевод. Каждый переводчик параллельно пишет свою версию.
- Жёсткие проверки. Без ИИ проверяется, остались ли неизменными HTML-теги, сущности, заполнители вроде
%sили{}, числа и ссылки. Версия, нарушающая это, никогда не может победить, даже если она звучит очень гладко. - Оценка. Остальные версии перемешиваются и анонимизируются. Каждый проверяющий выставляет каждой оценку за точность и за естественность (от 1 до 10), называет фаворита и может предложить улучшение.
- Согласование. Рейтинг версии равен 0,5 × средняя оценка + 5 × доля голосов за фаворита. Согласованием считается случай, когда лучшая версия набирает не менее 60 % голосов за фаворита и среднюю оценку не ниже 7,0.
- Второй раунд. Если согласия нет, лучшие версии вместе с предложениями проверяющих по улучшению ещё раз отправляются на оценку.
- Человек. Если и после этого однозначности нет, предложение ожидает решения.
Если есть только чистые службы перевода без функции проверки (например, DeepL), результат считается согласованным лишь тогда, когда как минимум две службы выдали абсолютно одинаковый текст. При вычитке результаты должны оставаться заметно похожими на оригинал (сходство не менее 0,6, те же числа). Небольшие бесплатные модели иногда отвечают на пакет со смещёнными или посторонними текстами. Такие ответы отбрасываются, а не ставятся на голосование. Глоссарий фиксирует названия брендов и устойчивые термины.
Поставщики: с ключом и без ключа
Бесплатные и платные службы могут участвовать в одном и том же голосовании. Модуль содержит предустановки для многих поставщиков; после установки все они выключены.
| Тип | Переводит | Проверяет / корректирует | Примеры |
|---|---|---|---|
| Интерфейс, совместимый с OpenAI | да | да | OpenAI, Mistral, DeepSeek, xAI, Groq, Together, OpenRouter, Cerebras, Qwen, Moonshot, GitHub Models, Hugging Face, Ollama, LM Studio, vLLM, llama.cpp |
| Совместимый с OpenAI, без ключа | да | да | Ollama на собственном сервере, Pollinations |
| Anthropic | да | да | Claude |
| Google Gemini, Cohere | да | да | |
| Локальная команда | да | да | claude -p или любая программа, которая читает из stdin и выводит ответ |
| Службы перевода | да | нет | DeepL, Google Translate, Azure Translator, LibreTranslate, MyMemory, Lingva |
Вы вводите ключ (или имя переменной окружения, которая его содержит), нажимаете Проверить соединение и включаете поставщика. Названия моделей в предустановках — отправные точки; тому, кто их использует, следует сверить их с актуальным списком поставщика. С двумя или более поставщиками есть настоящая перекрёстная проверка, с одним никто не проверяет его работу. Мастер указывает на это.
Целый веб-сайт сразу
Стартовый мастер (меню ИИ-перевод → Начать здесь) объясняет шаги и создаёт первое правило. Если установлен модуль website, автоматически подключается связующий модуль ai_translation_consensus_website. Он добавляет область «Весь веб-сайт со всем, что на нём есть»: вы выбираете веб-сайт и получаете предложение содержимого. Модуль просматривает все модели с переводимыми полями, относящиеся к веб-сайту (страницы, меню, блоги, продукты, мероприятия, форумы, курсы и другое), и предлагает по одному правилу на каждый вид содержимого, с языками веб-сайта в качестве целевых.
- То, что не установлено (форумы, курсы, галереи), не отображается и будет добавлено позже, как только будет установлено.
- Модели магазина предлагаются только в том случае, если у веб-сайта есть магазин. Учитываются только опубликованные записи.
- Контакты, компании, платёжные системы, прайс-листы, способы доставки, программы лояльности и фильтры сниппетов модуль намеренно не предлагает.
- Адресные названия страниц (
seo_name) не переводятся. - Ненужные виды можно удалить перед созданием.
Создание и поиск ничего не стоят: правило лишь перечисляет, каким текстам нужна работа. Поставщики вызываются, а расходы возникают только при обработке.
Панель, расходы и автоматический запуск
Панель показывает для каждого правила, сколько текстов готово, ожидает подтверждения или человека, поставлено в очередь или завершилось ошибкой. Кроме того, отображаются разбивка по языкам и поставщикам, прежние и ещё ожидаемые расходы, оценка оставшегося времени и переключатель запланированной обработки.
Цифры на этой иллюстрации — примеры данных и ничего не говорят о реальных расходах.
- Расходы рассчитываются на основании того, что фактически сообщают поставщики: токены (OpenAI, Anthropic, Gemini, Cohere) или символы (DeepL, Google, Azure). Токены показываются всегда, деньги — только если вы указали у поставщика цену за миллион токенов (или символов). Предустановки не содержат цен, потому что они меняются. Службы, не сообщающие токены, оцениваются по длине текста и помечаются как оценка.
- Прогноз: средние расходы и затраты рабочего времени на один текст, умноженные на число поставленных в очередь текстов. Это оценка, которая становится точнее по мере обработки первых пакетов.
- Автоматический запуск: правила с параметром Запускать самостоятельно при изменении записи при каждом запуске запланированного действия ищут только записи, изменённые с момента последнего поиска. Если запланированное действие включено, отредактированный веб-сайт будет переведён заново без каких-либо ручных действий.
- Уведомление о завершении: когда последний открытый текст правила обработан, в канале AI Translation один раз появляется сообщение «Все языки переведены» (при вычитке — «Все тексты проверены»).
Утверждение людьми
По умолчанию модуль ничего не записывает в ваши записи без вашего согласия. Каждое предложение показывает варианты, их авторов, оценки и замечания проверяющих. Вы можете принять предложение, выбрать другой вариант, ввести собственную формулировку или отклонить его.
Текст и названия поставщиков на этом изображении вымышлены и приведены только для демонстрации интерфейса.
Тот, кто доверяет правилу, может включить Принимать согласованные варианты автоматически. Предложения без согласия и в этом случае ожидают решения человека. При принятии модуль ещё раз проверяет, не изменился ли исходный текст, повторно выполняет проверки разметки и записывает без отслеживания изменений и без уведомления подписчиков.
Безопасность и защита данных
- После установки всё выключено. Поставщики и запланированное действие деактивированы. Без вашего участия ничего не отправляется.
- Тексты покидают ваш сервер, как только задействован облачный сервис. Правило можно пометить как Конфиденциальное; тогда текст видят только поставщики, отмеченные как работающие на собственной инфраструктуре.
- Ключи хранятся в поле, которое видят только администраторы, или в переменной окружения, на которую указывает лишь её имя. В сообщениях об ошибках они маскируются и передаются в заголовках. Исключение: необязательный ключ MyMemory можно передать только как параметр запроса.
- Локальная команда запускает программу и поэтому заблокирована, пока системному параметру
ai_translation_consensus.allow_commandне будет присвоено значениеTrue. Команда вызывается без оболочки и выполняется в пустом временном каталоге. - Prompt-инъекция: задания помечают текст как данные. Инструкции внутри переводимого текста не выполняются, а результат, нарушающий теги или заполнители, отбрасывается.
- У бесплатных сервисов есть ограничения. Pollinations допускает анонимно один ответ в 45 секунд. Опция поставщика
min_intervalсоблюдает этот интервал, а ответы «Повторите попытку позже» учитываются.
Установка
git clone https://github.com/Alex0176/odoo-ai-translation-consensus.git
ln -s /pfad/odoo-ai-translation-consensus/ai_translation_consensus /pfad/addons/
ln -s /pfad/odoo-ai-translation-consensus/ai_translation_consensus_website /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i ai_translation_consensus --stop-after-init
Требуются Odoo 19 и пакет Python requests. В комплекте имеется немецкий перевод. Связующий модуль ai_translation_consensus_website устанавливается автоматически, если присутствует website. После установки службу Odoo необходимо перезапустить, так как модуль содержит код Python. Тем, кто эксплуатирует рабочую систему, следует сначала установить модуль на копию базы данных.
Первые шаги: откройте меню KI-Übersetzung → Anbieter, проверьте и включите сервисы, затем нажмите Hier starten и создайте первое правило. Кнопка Nach Texten suchen формирует предложения, а Einen Stapel verarbeiten обращается к поставщикам. Начните с небольшого правила, например с одной записи блога и двух языков, и оцените результат и затраты, прежде чем ставить в очередь весь сайт.
Ограничения
- Качество зависит от моделей, которые вы включаете. Перекрёстная проверка уменьшает число ошибок отдельных моделей, но не даёт гарантии. Для юридически значимых или критичных для безопасности текстов модуль не заменяет носителя языка.
- Затраты растут быстро. Один текст стоит одного вызова на каждого переводчика, одного проверочного вызова на каждого проверяющего и, при разделённом голосовании, второго раунда. Контекст страницы увеличивает объём входных данных каждого вызова. Правило с 45 целевыми языками многократно увеличивает число текстов. Ограничивайте запуски с помощью Datensätze je Suchlauf, Neue Vorschläge je Suchlauf и Vorschläge je Cron-Lauf и добавьте в качестве проверяющих недорогие или локальные модели.
- Только поля с
translate=True. Форматированный текст обрабатывается поблочно (механизм терминов Odoo). - Цены и названия моделей меняются. Значения по умолчанию не являются актуальным прайс-листом.
- Создан для Odoo 19.0 Community. Другие версии не поддерживаются.
Часто задаваемые вопросы
Переводится или перезаписывается ли что-либо без моего согласия?
Нет, пока вы не включите Принимать согласованные варианты автоматически. Даже тогда записываются только предложения, по которым достигнуто согласие. После установки поставщики и запланированное действие выключены.
Нужны ли мне ключи для платных поставщиков?
Только для тех поставщиков, которые их требуют. С Pollinations, MyMemory или локально запущенной моделью (например, Ollama) можно обойтись без ключей. Бесплатные сервисы часто ограничены и медленны, для целого сайта они обычно подходят лишь как дополнение.
Сколько стоит перевод?
Это зависит от поставщика, модели, длины текста и числа языков, поэтому модуль не задаёт фиксированных цифр. Дашборд показывает расход и затраты, как только вы введёте цены, и оценивает оставшуюся стоимость текстов, поставленных в очередь.
Можно ли сохранить тексты конфиденциальными?
Да, с помощью опции правила Vertraulich. Тогда работают только поставщики, отмеченные как работающие на вашей собственной инфраструктуре, например локальный Ollama.
Заменяет ли это встроенный перевод Odoo?
Нет. Модуль использует многоязычность Odoo и записывает в те же переводы, которые вы иначе ведёте вручную.
Под какой лицензией он распространяется?
Под AGPL-3. Сообщения об ошибках и улучшения приветствуются в виде issue в репозитории GitHub .
Поддержка от Biricon IT Services
Мы сопровождаем установки Odoo для малых и средних предприятий: от внедрения, доработок и миграций до текущей эксплуатации. Если вы ведёте свой сайт на Odoo на нескольких языках, хотите подстраховать переводы с помощью ИИ или безопасно перенести модуль в рабочую среду, мы с радостью поможем. Другие наши собственные разработки: Архивирование компании вместе с пользователями портала, Номера документов из префикса, года и счётчика и Firmenbuch и проверка адресов для австрийских клиентов.
По состоянию на 3 ноября 2026 г. Версия модуля 19.0.1.0.0. На изображениях показаны вымышленные примеры данных.