Como traduzir documentos longos com um LLM local: fragmentos e verificações
Traduzimos 3.179 palavras com um LLM local no LM Studio de três formas, e cada uma escondia um erro silencioso. O tamanho dos fragmentos, as definições e as verificações que os detetam.

As pessoas traduzem documentos com um LLM local por uma razão: o ficheiro não pode sair da sua máquina. Um modelo local consegue fazer o trabalho, mas devolve texto simples, não um ficheiro traduzido, e os seus piores erros são silenciosos. No nosso teste, um único pedido para um excerto de 3.179 palavras devolveu o número correto de parágrafos e um sinal de conclusão limpo, mas um parágrafo tinha perdido mais de um terço do seu conteúdo e ganho frases que não existem no original.
Resposta curta: divida o texto nos limites dos parágrafos em fragmentos de cerca de 600 palavras, inclua um glossário de nomes e termos recorrentes na instrução de sistema, desative o modo de raciocínio do modelo e compare cada fragmento com o parágrafo de origem, parágrafo a parágrafo, antes de confiar nele. Cada uma das três formas como executámos o teste falhou em algum ponto, e nenhuma falha produziu uma mensagem de erro. Espere que um modelo de tamanho médio num portátil demore horas para um livro inteiro, e planeie reconstruir a formatação manualmente.
Tudo o que se segue vem de uma execução em 23 de outubro de 2026: Qwen 3.6 27B (Q4_K_M GGUF) no LM Studio 0.4.8 num Apple M4 Max com 64 GB de memória, a traduzir a abertura de Die Verwandlung, de Kafka, do alemão para inglês. O script de teste, os resultados e exemplos reais de falhas podem ser descarregados gratuitamente para que possa repetir com o seu próprio modelo.
Quando um LLM local é a ferramenta certa
Execute a tradução localmente quando forem as regras do documento, e não a conveniência, a determinar a decisão:
- um contrato com um cliente, um acordo de investigação ou uma política da entidade empregadora proíbe o envio do ficheiro para um serviço externo;
- o texto é pessoal ou confidencial e não é possível remover primeiro as partes sensíveis; ou
- é necessário processar muitos ficheiros sem custo por documento e já possui hardware adequado.
Se nenhuma destas situações se aplicar, um modelo local é normalmente o caminho mais lento para um resultado pior. Perde três coisas que um serviço de tradução de documentos oferece: um ficheiro traduzido no formato original, um modelo maior do que a sua máquina consegue suportar e um fluxo de trabalho concebido para a consistência ao longo de um livro inteiro. Antes de escolher qualquer das vias, percorra a lista de verificação de privacidade na tradução de documentos. Abrange a autoridade para processar o ficheiro, as cópias de trabalho mínimas e o que um serviço faz com os envios.
"Local" também precisa de um significado preciso. O modelo é executado no seu computador e, no nosso teste, os pedidos foram apenas para localhost. Isso não lhe diz o que a aplicação em torno do modelo registra, atualiza ou comunica. Se as suas regras exigirem prova de que nada sai do dispositivo, verifique as definições e a política do próprio ambiente de execução, ou execute-o numa máquina sem acesso à rede.
O que testámos
Traduzimos os primeiros 19 parágrafos de Die Verwandlung (3.179 palavras em alemão) a partir da edição do Project Gutenberg, de domínio público. O alemão literário é um teste de esforço justo: os parágrafos são longos, as frases encaixam-se e as mesmas personagens e cargos repetem-se.
As três execuções usaram o mesmo modelo e as mesmas definições: temperatura 0,2, um máximo de 12.000 tokens de saída e uma janela de contexto de 16.384 tokens. A instrução pedia um parágrafo em inglês por cada parágrafo em alemão e nada mais.
| Execução | O que enviámos | Parágrafos devolvidos (origem: 19) | Palavras devolvidas | Tempo |
|---|---|---|---|---|
| A. Fragmentado | 6 fragmentos de cerca de 600 palavras, apenas instrução | 19 | 3,319 | 10,4 min |
| B. Fragmentado + glossário + contexto | Os mesmos blocos, um glossário de 7 termos e o parágrafo de origem anterior marcado com «NÃO traduzir» | 20 | 3,446 | 10,5 min |
| C. Um único pedido | Todos os 19 parágrafos de uma só vez | 19 | 3,309 | 9,5 min |
Todas as execuções terminaram com um sinal de paragem normal e todas continham um erro silencioso diferente. A execução C eliminou e inventou texto. A execução B traduziu texto que lhe foi dito para ignorar. A execução A, a mais limpa, atribuiu a função errada a uma personagem no seu último bloco.
Falha 1: Um único pedido grande eliminou parte de um parágrafo
A execução C terminou normalmente e devolveu exatamente 19 parágrafos. Uma verificação da contagem de parágrafos tê-la-ia aprovado. O parágrafo 6, no entanto, voltou com 214 palavras para uma origem de 260.
Na origem, Gregor olha para o relógio, percebe que perdeu o comboio e depois considera telefonar a dizer que está doente: o patrão chegaria com o médico do seguro de saúde, que considera todos saudáveis mas avessos ao trabalho, e Gregor admite que na verdade se sente bem, exceto pela sonolência e por um apetite invulgar. A execução C traduziu a primeira parte e depois eliminou toda a passagem sobre o dia de baixa, 98 das 260 palavras alemãs do parágrafo. No seu lugar, escreveu que Gregor «teria sido despedido imediatamente», que o ajudante do escritório tende «a ver tudo o que lhe é comunicado como uma oportunidade de se exibir» e que esse pensamento «lhe trouxe um sorriso aos lábios». Nada disso está no alemão.
A execução por blocos traduziu o mesmo parágrafo na íntegra, com 267 palavras.
Uma amostra não prova que os pedidos longos falham sempre. Mostra o que verificar: um único pedido longo pode comprimir ou inventar texto silenciosamente, continuando a parecer estruturalmente completo. Um leitor que não saiba alemão não teria razão para notar.
Falha 2: O modelo traduziu o «contexto» que lhe foi dito para ignorar
Um conselho comum é enviar o parágrafo anterior com cada bloco, para o modelo manter o fio. Na execução B, acrescentámo-lo à mensagem com a etiqueta «Contexto (já traduzido, NÃO traduzir)».
No bloco 4, o modelo traduziu-o de qualquer forma. O bloco devolveu quatro parágrafos para três parágrafos de origem, e o primeiro era uma segunda tradução do último parágrafo do bloco 3. Unido, o livro conteria esse parágrafo duas vezes, com redação diferente em cada uma.
A regra prática: se enviar contexto, mantenha-o fora do texto que o modelo é convidado a traduzir, mantenha-o curto e verifique a contagem de parágrafos de cada bloco. Se não puder verificar, deixe-o de fora.
Falha 3: Um bloco enviado isoladamente atribuiu a função errada a uma personagem
A execução A enviou cada bloco sem glossário e sem contexto. Nos primeiros cinco blocos, isto funcionou bem: Prokurist tornou-se «chefe de escritório» nas 16 ocorrências. O sexto bloco era um único parágrafo em que o chefe de escritório repreende Gregor através da porta. Visto isoladamente, o modelo traduziu der Prokurist como «o caixeiro-viajante», que é a própria profissão de Gregor. A contagem de parágrafos coincidiu e a proporção de comprimento foi 1,00, pelo que nenhuma das verificações estruturais detetou o problema.
Na execução B, que tinha o glossário na instrução de sistema e o parágrafo anterior como contexto, o mesmo parágrafo usou corretamente «chefe de escritório». Este teste não permite dizer qual dos dois o corrigiu. Como o contexto também causou a falha 2, o glossário é o local mais seguro para transportar nomes e funções de bloco para bloco: é curto, está na instrução e pode ser verificado mecanicamente.
O fluxo de trabalho que resistiu
1. Extraia primeiro o texto simples do ficheiro
Um LLM local traduz texto, não ficheiros. Converta o documento antes de começar:
- DOCX ou EPUB: exporte para texto simples ou Markdown com um parágrafo por bloco, mantendo os títulos como linhas separadas.
- PDF com camada de texto: extraia o texto e depois corrija as linhas quebradas e a hifenização. O nosso guia sobre corrigir quebras de linha e hifenização de OCR aborda a mesma limpeza. Um conversor como o Docling pode produzir Markdown a partir de PDFs e ficheiros Office.
- PDF digitalizado: execute primeiro o OCR. Se não tiver a certeza de que um PDF tem texto utilizável, consulte Extração de texto de PDF vs OCR.
Mantenha a estrutura de parágrafos intacta. Todas as verificações posteriores dependem de uma correspondência um-para-um entre os parágrafos de origem e os traduzidos.
2. Desative o modo de raciocínio e confirme
Muitos modelos abertos atuais raciocinam antes de responder. Para tradução, isso desperdiça tempo e tokens de saída. Na nossa configuração, um pedido de teste de 200 tokens gastou 199 tokens em raciocínio e devolveu uma resposta vazia.
Experimentámos três opções comuns. Adicionar /no_think ao prompt não fez nada, e chat_template_kwargs com enable_thinking: false não fez nada. Enviar "reasoning_effort": "none" no pedido desativou o raciocínio: a resposta reportou 0 tokens de raciocínio e devolveu a tradução diretamente. Este parâmetro não está listado na página de chat completions do LM Studio, por isso trate-o como um comportamento que observámos na versão 0.4.8 com este modelo. Verifique a contagem de reasoning_tokens nas suas próprias respostas em vez de confiar em qualquer opção.
3. Dimensione a janela de contexto antes dos chunks
A janela de contexto tem de conter a instrução, o chunk e a tradução completa. Nas nossas execuções com chunks, um chunk alemão de 500 a 670 palavras usou cerca de 800 a 1.500 tokens de entrada, dependendo do glossário e do contexto, e 640 a 870 tokens de saída, pelo que alguns milhares de tokens são suficientes. O pedido único de 3.179 palavras precisou de 4.953 tokens de entrada e 3.930 tokens de saída.
O Ollama define o comprimento de contexto predefinido pela memória disponível: 4k tokens abaixo de 24 GiB de VRAM, 32k entre 24 e 48 GiB, e 256k a partir de 48 GiB, de acordo com a sua documentação sobre comprimento de contexto consultada a 23 de outubro de 2026. Pode aumentá-lo com OLLAMA_CONTEXT_LENGTH. No LM Studio, defina o comprimento de contexto ao carregar o modelo. Se um chunk mais a sua tradução não couber, a saída pode ser cortada.
4. Divida nos limites dos parágrafos, cerca de 600 palavras
Nunca divida dentro de um parágrafo ou frase. Os nossos chunks visavam 700 palavras e terminavam no limite de parágrafo mais próximo, o que produziu seis chunks de 243 a 667 palavras. Chunks mais pequenos custam pouco: a execução A demorou 10,4 minutos contra 9,5 minutos do pedido único, e um chunk falhado é barato de repetir.
Mantenha a instrução curta e idêntica para cada chunk. A nossa era: traduzir para inglês, manter exatamente um parágrafo de saída por parágrafo de entrada separado por uma linha em branco, e produzir apenas a tradução. Adicione um glossário à mesma instrução: uma linha por nome, título ou termo recorrente, no formato Prokurist = chief clerk. O nosso guia para criar um glossário de tradução explica o que incluir. Chunks curtos perdem a história envolvente, e é o glossário que a transporta.
5. Verifique cada chunk antes de os juntar
Faça três verificações em cada chunk:
- Contagem de parágrafos. A saída deve ter o mesmo número de parágrafos que a entrada. Isto detetou a falha 2.
- Rácio de comprimento por parágrafo. Compare a contagem de palavras de cada parágrafo traduzido com a da origem. Isto detetou a falha 1, que a contagem de parágrafos não detetou.
- Termos do glossário por parágrafo. Onde aparece um termo de origem, a sua tradução obrigatória deve aparecer o mesmo número de vezes. Isto detetou a falha 3, que ambas as outras verificações não detetaram. Línguas com flexão exigirão algum julgamento aqui, porque um termo alemão ou russo muda de forma.
Para prosa de alemão para inglês, os parágrafos da execução A mantiveram-se entre 0,98 e 1,17 palavras de saída por palavra de entrada. O parágrafo danificado da execução C foi 0,82. Defina o seu próprio intervalo verificando alguns parágrafos em que confia no seu par de línguas; os valores predefinidos no nosso script são um ponto de partida, não um padrão.
Um parágrafo sinalizado é onde ler primeiro, não prova de um erro. Depois leia a tradução em si, especialmente nomes, números, negações e tudo aquilo sobre o qual um leitor agiria. A lista de verificação de QA de tradução de livros cobre essa revisão.
6. Reconstrua o documento
O modelo devolve texto. Títulos, notas de rodapé, tabelas, imagens, disposição da página e estilos têm de ser repostos à mão ou por uma ferramenta de conversão. Para um relatório curto isto é menor. Para um livro com notas de rodapé e tabelas pode demorar mais do que a tradução.
Quanto Tempo Demora um Livro Inteiro
A nossa execução com chunks traduziu 3.179 palavras em 10,4 minutos, cerca de 300 palavras por minuto nesta máquina. A esse ritmo, um romance de 90.000 palavras demoraria aproximadamente cinco horas de geração, antes de verificações e repetições. Isto é aritmética simples de uma execução, não um benchmark. A velocidade varia com o tamanho do modelo, a quantização, o hardware, o par de línguas e o quanto mais a máquina estiver a fazer.
O ficheiro do modelo tinha 17,5 GB em disco, e a cache de contexto e os buffers de execução precisam de memória além disso, pelo que uma máquina precisa de bastante mais memória livre do que o tamanho do ficheiro. Um modelo mais pequeno correrá mais depressa e com menos memória, geralmente com algum custo na qualidade. Teste-o numa amostra representativa antes de comprometer um livro inteiro. O nosso guia sobre o melhor LLM para tradução explica como construir essa amostra e comparar modelos de forma justa.
LLM Local ou Serviço de Tradução de Documentos
| Pergunta | LLM local | Serviço de tradução de documentos |
|---|---|---|
| O ficheiro pode sair da sua máquina? | Não é necessário | Necessário |
| O que recebe de volta | Texto simples que tem de remontar | Um ficheiro traduzido |
| Tamanho do modelo | Limitado pela sua memória | Limitado pelo fornecedor |
| Consistência ao longo de um livro inteiro | O seu trabalho: glossário, divisão em blocos, verificações | Integrado em alguns serviços |
| Custo por documento | O seu hardware e o seu tempo | Preço por documento ou por palavra |
Se as suas regras permitirem o carregamento do ficheiro, um serviço de documentos elimina a maior parte do trabalho acima. O BookTranslator traduz ficheiros PDF, EPUB e DOCX completos e devolve um ficheiro traduzido, e as suas FAQ indicam que os ficheiros carregados e o resultado da tradução não são utilizados para treinar modelos de IA. É um serviço na nuvem, pelo que não é uma opção quando o ficheiro tem de permanecer na sua máquina. Se está a decidir entre executar modelos você mesmo e pagar por um serviço, quanto custa realmente a tradução com LLM mostra como orçamentar o lado dos tokens.
Obtenha os ficheiros de teste
Todos os ficheiros estão na pasta /files/blog/translate-with-local-llm/:
local_llm_translation_test.py: o teste completo contra a API local do LM Studio, com as três execuções. Aponte-o para outro modelo ou texto de origem para repetir o teste.check_translation.py: compara um texto de origem e uma tradução parágrafo a parágrafo e apresenta discrepâncias na contagem de parágrafos, rácios de comprimento fora do intervalo e termos do glossário em falta (com--term "Prokurist=chief clerk"). Funciona com resultados de qualquer ferramenta.results.csv: cada pedido com as respetivas contagens de parágrafos, contagens de palavras, contagens de tokens e tempo.failure-examples.txt: o texto de origem em alemão e o resultado bruto do modelo para as três falhas.
Execute o check_translation.py com os termos do seu glossário em qualquer tradução longa antes de confiar nela. Demora segundos e assinalou as três falhas neste teste. Não consegue dizer se uma frase fluente está errada, por isso os parágrafos assinalados são o ponto de partida da sua leitura, não o ponto final.
Publicações relacionadas





