Traduzir um sítio web para dez, vinte ou quarenta idiomas é rápido com uma única IA. Mais difícil é saber se se pode confiar no resultado. Um único modelo de linguagem inventa ocasionalmente palavras, traduz nomes de produtos ou altera um número, e não se apercebe disso. Por isso, escrevemos para o Odoo 19 um módulo em que várias IAs e serviços de tradução trabalham sobre o mesmo texto, avaliam mutuamente os seus resultados de forma anónima e chegam a acordo sobre a formulação que soa simultaneamente rigorosa e natural. O que não for inequívoco fica para uma pessoa decidir.
O módulo chama-se ai_translation_consensus e está disponível no GitHub como software livre sob a licença AGPL-3:
github.com/Alex0176/odoo-ai-translation-consensus
Conteúdo deste artigo
A ideia: verificação cruzada em vez de confiança
O módulo sabe fazer duas coisas:
- Traduzir: completar as traduções em falta (ou desatualizadas) de qualquer campo traduzível no Odoo, ou seja, artigos de blogue, páginas web, menus, produtos e tudo o mais que o Odoo guarda em vários idiomas. As IAs não veem apenas a frase isolada, mas os blocos vizinhos e um excerto da página inteira. Assim, as palavras individuais são compreendidas no contexto certo.
- Revisão de texto: verificar o texto no seu próprio idioma e propor melhores formulações ou correções. O original é sempre um dos candidatos. Se o original vencer, nada é alterado.
O cerne é a verificação mútua. Cada IA é boa a avaliar textos alheios, mesmo quando ela própria se engana ocasionalmente. O módulo aproveita isso: vários fornecedores escrevem uma versão cada e, depois, os mesmos fornecedores avaliam todas as versões, sem saber de quem provêm. Um fornecedor não avalia a sua própria versão.
Assim nasce uma proposta
- Traduzir. Cada tradutor escreve uma versão em paralelo.
- Verificações fixas. Sem IA, controla-se se as etiquetas HTML, as entidades, os marcadores de posição como
%sou{}, os números e as ligações se mantiveram inalterados. Uma versão que viole isto nunca pode vencer, por muito fluente que soe. - Avaliar. As restantes versões são misturadas e anonimizadas. Cada avaliador atribui a cada uma uma nota de rigor e de naturalidade (1 a 10), indica um favorito e pode propor uma melhoria.
- Chegar a acordo. A classificação de uma versão é 0,5 × nota média + 5 × proporção de votos de favorito. Considera-se que há acordo quando a melhor versão tem, pelo menos, 60 % dos votos de favorito e uma nota média de, pelo menos, 7,0.
- Segunda ronda. Sem acordo, as melhores versões, juntamente com as propostas de melhoria dos avaliadores, voltam a ser avaliadas.
- Pessoa. Se também então não ficar inequívoco, a proposta aguarda uma decisão.
Se existirem apenas serviços de tradução puros, sem função de verificação (por exemplo, o DeepL), um resultado só se considera acordado se, pelo menos, dois serviços tiverem fornecido exatamente o mesmo texto. Na revisão de texto, os resultados têm de permanecer reconhecivelmente semelhantes ao original (semelhança mínima de 0,6, os mesmos números). Os modelos pequenos e gratuitos respondem ocasionalmente a um lote com textos deslocados ou alheios. Essas respostas são descartadas, em vez de votadas. Um glossário fixa nomes de marcas e termos estabelecidos.
Fornecedores: com e sem chave
Serviços gratuitos e pagos podem estar na mesma votação. O módulo traz predefinições para muitos fornecedores; todas ficam desativadas após a instalação.
| Tipo | Traduz | Verifica / corrige | Exemplos |
|---|---|---|---|
| Interface compatível com OpenAI | sim | sim | OpenAI, Mistral, DeepSeek, xAI, Groq, Together, OpenRouter, Cerebras, Qwen, Moonshot, GitHub Models, Hugging Face, Ollama, LM Studio, vLLM, llama.cpp |
| Compatível com OpenAI sem chave | sim | sim | Ollama no próprio servidor, Pollinations |
| Anthropic | sim | sim | Claude |
| Google Gemini, Cohere | sim | sim | |
| Comando local | sim | sim | claude -p ou qualquer programa que leia do stdin e devolva a resposta |
| Serviços de tradução | sim | não | DeepL, Google Translate, Azure Translator, LibreTranslate, MyMemory, Lingva |
Introduz-se a chave (ou o nome de uma variável de ambiente que a contenha), clica-se em Testar ligação e ativa-se o fornecedor. Os nomes de modelos nas predefinições são pontos de partida; quem os utilizar deve confrontá-los com a lista atual do fornecedor. Com dois ou mais fornecedores existe uma verdadeira verificação cruzada; com apenas um, ninguém verifica o seu trabalho. O assistente chama a atenção para isso.
Um sítio web inteiro de uma só vez
Um assistente de arranque (menu Tradução por IA → Começar aqui) explica os passos e cria a primeira regra. Se o módulo website estiver instalado, o módulo de ligação ai_translation_consensus_website vem automaticamente. Acrescenta o âmbito «Um sítio web inteiro com tudo o que nele existe»: escolhe-se o sítio web e pede-se que sejam sugeridos os conteúdos. O módulo analisa todos os modelos com campos traduzíveis que pertencem ao sítio web (páginas, menus, blogues, produtos, eventos, fóruns, cursos e mais) e sugere uma regra por tipo de conteúdo, com os idiomas do sítio web como destino.
- O que não está instalado (fóruns, cursos, galerias) não aparece e é incluído mais tarde, assim que for instalado.
- Os modelos da loja só são sugeridos se o sítio web tiver uma loja. Só são abrangidos registos publicados.
- Contactos, empresas, fornecedores de pagamento, listas de preços, métodos de entrega, programas de fidelização e filtros de snippets, o módulo deliberadamente não os oferece.
- Os nomes de endereço das páginas (
seo_name) não são traduzidos. - Os tipos não desejados podem ser removidos antes de serem criados.
Criar e pesquisar não custa nada: a regra apenas lista os textos que precisam de trabalho. Só no processamento é que os fornecedores são chamados e surgem custos.
Painel, custos e arranque automático
O painel mostra, por regra, quantos textos estão concluídos, à espera de uma confirmação ou de uma pessoa, em fila ou falhados. A isto acrescem a discriminação por idioma e fornecedor, os custos até agora e os ainda esperados, o tempo restante estimado e o interruptor para o processamento agendado.
Os números nesta figura são dados de exemplo e nada dizem sobre custos reais.
- Os custos são calculados a partir do que os fornecedores efetivamente comunicam: tokens (OpenAI, Anthropic, Gemini, Cohere) ou carateres (DeepL, Google, Azure). Os tokens são sempre mostrados, o dinheiro só quando introduziu o preço por milhão de tokens (ou carateres) junto do fornecedor. As predefinições não contêm preços, porque estes mudam. Os serviços que não comunicam tokens são estimados a partir do comprimento do texto e assinalados como estimativa.
- Previsão: custos médios e tempo de trabalho por texto vezes o número de textos em fila. Trata-se de uma estimativa, que melhora com os primeiros lotes.
- Arranque automático: as regras com a opção Iniciar por si quando um registo é alterado procuram, em cada execução da ação agendada, apenas registos que tenham sido alterados desde a última pesquisa. Com a ação agendada ativada, uma página web editada é, portanto, traduzida de novo sem qualquer intervenção.
- Mensagem de conclusão: quando o último texto pendente de uma regra fica concluído, aparece uma única vez a mensagem «Todos os idiomas traduzidos» (na revisão: «Todos os textos verificados») no canal AI Translation.
Aprovação por pessoas
Por predefinição, o módulo não escreve nada nos seus registos sem a sua autorização. Cada sugestão mostra as versões, quem as escreveu, as notas e as observações dos revisores. Pode aceitar a sugestão, escolher outra versão, introduzir uma formulação própria ou rejeitá-la.
O texto e os nomes dos fornecedores nesta imagem são totalmente fictícios e servem apenas para mostrar a vista.
Quem confia numa regra pode ativar Aceitar consenso automaticamente. As sugestões sem consenso continuam a aguardar uma pessoa. Ao aceitar, o módulo verifica de novo se o texto de origem entretanto mudou, volta a controlar as verificações de marcação e escreve sem acompanhamento e sem notificar os seguidores.
Segurança e proteção de dados
- Depois da instalação, tudo está desativado. Os fornecedores e a ação agendada estão desativados. Sem a sua intervenção, nada é enviado.
- Os textos saem do seu servidor assim que um serviço alojado externamente está envolvido. Uma regra pode ser marcada como Confidencial; nesse caso, o texto só é visto por fornecedores identificados como estando em execução na sua própria infraestrutura.
- As chaves ficam num campo que só os administradores veem ou numa variável de ambiente para a qual apenas o nome aponta. Nas mensagens de erro são mascaradas e são enviadas em cabeçalhos. Exceção: a chave opcional do MyMemory só pode ser transmitida aí como parâmetro de consulta.
- O comando local executa um programa e, por isso, está bloqueado até que o parâmetro de sistema
ai_translation_consensus.allow_commandseja definido comoTrue. O comando é invocado sem shell e é executado numa pasta temporária vazia. - Injeção de prompts: as tarefas identificam o texto como dados. As instruções contidas no texto traduzido não são seguidas, e um resultado que viole etiquetas ou marcadores de posição é rejeitado.
- Os serviços gratuitos têm limites. O Pollinations permite, de forma anónima, uma resposta a cada 45 segundos. A opção de fornecedor
min_intervalrespeita esse intervalo, e as respostas «Tente novamente mais tarde» são tidas em conta.
Instalação
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
São necessários o Odoo 19 e o pacote Python requests. Acompanha uma tradução alemã. O módulo de ligação ai_translation_consensus_website é instalado automaticamente se website estiver presente. Após a instalação, o serviço Odoo tem de ser reiniciado, porque o módulo contém código Python. Quem gere um sistema de produção deve instalar primeiro o módulo numa cópia da base de dados.
Os primeiros passos: abrir o menu Tradução com IA → Fornecedores, testar e ativar os serviços, depois Começar aqui e criar a primeira regra. Com Procurar textos são geradas as sugestões, com Processar um lote os fornecedores são chamados. Comece com uma regra pequena, por exemplo um único artigo de blogue e dois idiomas, e analise o resultado e os custos antes de colocar na fila um sítio Web inteiro.
Limitações
- A qualidade depende dos modelos que ativar. A verificação cruzada reduz os erros de modelos individuais, mas não dá qualquer garantia. Para textos juridicamente ou criticamente relevantes para a segurança, o módulo não substitui um falante nativo.
- Os custos crescem depressa. Um texto custa uma chamada por tradutor, uma chamada de verificação por revisor e, em caso de votação dividida, uma segunda ronda. O contexto da página aumenta a entrada de cada chamada. Uma regra com 45 idiomas de destino multiplica o número de textos. Limite as execuções com Registos por pesquisa, Novas sugestões por pesquisa e Sugestões por execução do cron, e inclua modelos económicos ou locais como revisores.
- Apenas campos com
translate=True. O texto formatado é processado por bloco (mecanismo de termos do Odoo). - Os preços e os nomes dos modelos mudam. Os valores predefinidos não são uma lista de preços atualizada.
- Desenvolvido para o Odoo 19.0 Community. Outras versões não são suportadas.
Perguntas frequentes
Algo é traduzido ou substituído sem a minha autorização?
Não, desde que não ative Aceitar consenso automaticamente. Mesmo nesse caso, só são escritas as sugestões com consenso. Os fornecedores e a ação agendada ficam desativados após a instalação.
Preciso de chaves para fornecedores pagos?
Apenas para os fornecedores que exijam uma. Com o Pollinations, o MyMemory ou um modelo executado localmente (por exemplo, o Ollama), é possível sem chave. Os serviços gratuitos são frequentemente limitados e lentos; para um sítio Web inteiro, costumam servir apenas como complemento.
Quanto custa uma tradução?
Depende do fornecedor, do modelo, da extensão do texto e do número de idiomas, por isso o módulo não indica valores fixos. O painel mostra o consumo e os custos assim que tiver introduzido os preços, e estima o custo restante dos textos em fila.
Posso manter os textos confidenciais?
Sim, com a opção de regra Confidencial. Nesse caso, só trabalham os fornecedores marcados como estando em execução na sua própria infraestrutura, por exemplo um Ollama local.
Isto substitui a tradução nativa do Odoo?
Não. O módulo utiliza o suporte multilingue do Odoo e escreve nas mesmas traduções que de outro modo manteria manualmente.
Sob que licença está?
Sob a AGPL-3. Erros e melhorias são bem-vindos como issue no repositório GitHub .
Apoio da Biricon IT Services
Acompanhamos instalações Odoo para pequenas e médias empresas: da implementação, passando por personalizações e migrações, até à operação contínua. Se pretende gerir o seu sítio Web Odoo em vários idiomas, validar traduções com IA ou colocar um módulo em segurança na sua instância de produção, teremos todo o gosto em ajudar. Outros desenvolvimentos próprios: Arquivar empresa juntamente com os utilizadores do portal, Números de documento a partir de prefixo, ano e contador e Firmenbuch e verificação de moradas para clientes austríacos.
Data: 3 de novembro de 2026. Versão do módulo 19.0.1.0.0. As imagens mostram dados de exemplo fictícios.