Como Traduzir Documentos Longos com um LLM Local: Blocos e Verificações
Traduzimos 3.179 palavras com um LLM local no LM Studio de três maneiras, e cada uma escondeu um erro silencioso. O tamanho dos blocos, as configurações e as verificações que os detectam.

As pessoas traduzem documentos com um LLM local por um motivo: o arquivo não pode sair da máquina delas. Um modelo local pode fazer o trabalho, mas entrega texto simples, não um arquivo traduzido, e seus piores erros são silenciosos. No nosso teste, uma única solicitação para um trecho de 3.179 palavras retornou com o número correto de parágrafos e um sinal de término limpo, mas um parágrafo havia perdido mais de um terço do conteúdo e ganhado frases que não estão no original.
Resposta curta: divida o texto nos limites dos parágrafos em blocos de cerca de 600 palavras, coloque um glossário de nomes e termos recorrentes na instrução do sistema, desative o modo de raciocínio do modelo e compare cada bloco com seu parágrafo de origem, parágrafo por parágrafo, antes de confiar nele. Cada uma das três maneiras como executamos o teste falhou em algum ponto, e nenhuma falha gerou uma mensagem de erro. Espere que um modelo de porte médio em um laptop leve horas para um livro inteiro, e planeje reconstruir a formatação você mesmo.
Tudo abaixo 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 em um Apple M4 Max com 64 GB de memória, traduzindo a abertura de Die Verwandlung, de Kafka, do alemão para o inglês. O script de teste, os resultados e exemplos brutos de falhas estão disponíveis para download gratuito, para que você possa repetir com seu próprio modelo.
Quando um LLM Local É a Ferramenta Certa
Execute a tradução localmente quando as regras do documento, e não a conveniência, determinarem a decisão:
- um contrato de cliente, acordo de pesquisa ou política do empregador proíbe o upload do arquivo para um serviço externo;
- o texto é pessoal ou confidencial e você não pode remover as partes sensíveis primeiro; ou
- você precisa processar muitos arquivos sem custo por documento e já possui hardware adequado.
Se nenhuma dessas condições se aplica, um modelo local geralmente é o caminho mais lento para um resultado pior. Você abre mão de três coisas que um serviço de tradução de documentos oferece: um arquivo traduzido no formato original, um modelo maior do que sua máquina pode comportar e um fluxo de trabalho projetado para consistência em um livro inteiro. Antes de escolher qualquer uma das rotas, percorra a lista de verificação de privacidade na tradução de documentos. Ela aborda a autoridade para processar o arquivo, cópias de trabalho mínimas e o que um serviço faz com os uploads.
"Local" também precisa de um significado preciso. O modelo roda no seu computador e, no nosso teste, as solicitações foram apenas para localhost. Isso não informa o que o aplicativo em volta do modelo registra, atualiza ou reporta. Se suas regras exigem prova de que nada sai do dispositivo, verifique as configurações e a política do próprio runtime, ou execute-o em uma máquina sem acesso à rede.
O Que Testamos
Traduzimos os primeiros 19 parágrafos de Die Verwandlung (3.179 palavras em alemão) da edição do Project Gutenberg, de domínio público. O alemão literário é um bom teste de estresse: os parágrafos são longos, as frases se aninham e os mesmos personagens e cargos se repetem.
As três execuções usaram o mesmo modelo e as mesmas configurações: temperatura 0,2, máximo de 12.000 tokens de saída e janela de contexto de 16.384 tokens. A instrução pedia um parágrafo em inglês para cada parágrafo em alemão e nada mais.
| Execução | O que enviamos | Parágrafos de saída (origem: 19) | Palavras de saída | Tempo |
|---|---|---|---|---|
| A. Em blocos | 6 blocos de cerca de 600 palavras, apenas instrução | 19 | 3,319 | 10,4 min |
| B. Em blocos + glossário + contexto | Os mesmos trechos, um glossário de 7 termos e o parágrafo de origem anterior marcado como "NÃO traduzir" | 20 | 3,446 | 10,5 min |
| C. Uma única requisição | Todos os 19 parágrafos de uma vez | 19 | 3,309 | 9,5 min |
Todas as execuções terminaram com um sinal de parada normal, e cada uma continha um erro silencioso diferente. A execução C omitiu e inventou texto. A execução B traduziu um texto que deveria ser ignorado. A execução A, a mais limpa, atribuiu a função errada a um personagem em seu último trecho.
Falha 1: Uma única requisição grande omitiu parte de um parágrafo
A execução C terminou normalmente e retornou exatamente 19 parágrafos. Uma verificação de contagem de parágrafos a teria aprovado. O parágrafo 6, no entanto, voltou com 214 palavras para um original de 260.
No original, Gregor olha para o relógio, percebe que perdeu o trem e então considera ligar dizendo que está doente: seu chefe chegaria com o médico do plano de saúde, que considera todos saudáveis, mas avessos ao trabalho, e Gregor admite que na verdade se sente bem, exceto por uma sonolência e um apetite incomum. A execução C traduziu a primeira parte e depois omitiu toda a passagem sobre o dia de doença, 98 das 260 palavras alemãs do parágrafo. Em seu lugar, escreveu que Gregor "teria sido demitido na hora", que o auxiliar de escritório tende "a ver tudo o que lhe é relatado como uma oportunidade de se exibir" e que o pensamento "lhe trouxe um sorriso aos lábios". Nada disso está no alemão.
A execução em trechos traduziu o mesmo parágrafo por completo, com 267 palavras.
Uma amostra não prova que requisições longas sempre falham. Ela mostra o que verificar: uma única requisição longa pode comprimir ou inventar texto silenciosamente enquanto ainda parece estruturalmente completa. Um leitor sem conhecimento de alemão não teria motivo para perceber.
Falha 2: O modelo traduziu o "contexto" que deveria ignorar
Uma dica comum é enviar o parágrafo anterior junto com cada trecho para que o modelo mantenha o fio da meada. Na execução B, adicionamos isso à mensagem sob o rótulo "Contexto (já traduzido, NÃO traduzir)".
No trecho 4, o modelo o traduziu mesmo assim. O trecho retornou quatro parágrafos para três parágrafos de origem, e o primeiro era uma segunda tradução do último parágrafo do trecho 3. Unidos, o livro conteria esse parágrafo duas vezes, com redação diferente em cada uma.
A regra prática: se você enviar contexto, mantenha-o fora do texto que o modelo deve traduzir, mantenha-o curto e verifique a contagem de parágrafos de cada trecho. Se não puder verificar, deixe-o de fora.
Falha 3: Um trecho enviado sozinho atribuiu a função errada a um personagem
A execução A enviou cada trecho sem glossário e sem contexto. Para os primeiros cinco trechos, isso funcionou bem: Prokurist tornou-se "chefe de escritório" em todas as 16 ocorrências. O sexto trecho 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, então nenhuma das verificações estruturais percebeu.
Na execução B, que tinha o glossário na instrução do sistema e o parágrafo anterior como contexto, o mesmo parágrafo usou corretamente "chefe de escritório". Este teste não pode dizer qual dos dois corrigiu o problema. Como o contexto também causou a falha 2, o glossário é o lugar mais seguro para carregar nomes e funções de um trecho para outro: é curto, fica na instrução e pode ser verificado mecanicamente.
O fluxo de trabalho que se mostrou confiável
1. Extraia o texto simples do arquivo primeiro
Um LLM local traduz texto, não arquivos. 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 quebras de linha e hifenização. Nosso guia para corrigir quebras de linha e hifenização de OCR cobre a mesma limpeza. Um conversor como o Docling pode produzir Markdown a partir de PDFs e arquivos do Office.
- PDF digitalizado: execute o OCR primeiro. Se você não tem certeza se um PDF tem texto utilizável, consulte Extração de texto de PDF vs OCR.
Mantenha a estrutura de parágrafos intacta. Toda verificação posterior depende 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, uma requisição de teste de 200 tokens gastou 199 tokens em raciocínio e retornou uma resposta vazia.
Testamos três alternativas 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" na requisição desativou o raciocínio: a resposta reportou 0 tokens de raciocínio e retornou a tradução diretamente. Esse parâmetro não está listado na página de chat completions do LM Studio, então trate-o como um comportamento que observamos 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 alternativa.
3. Dimensione a janela de contexto antes dos chunks
A janela de contexto deve comportar a instrução, o chunk e a tradução completa. Nas nossas execuções com chunks, um chunk em 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, então alguns milhares de tokens são suficientes. A requisição única de 3.179 palavras precisou de 4.953 tokens de entrada e 3.930 tokens de saída.
O Ollama define seu comprimento de contexto padrão pela memória disponível: 4k tokens abaixo de 24 GiB de VRAM, 32k de 24 a 48 GiB, e 256k a partir de 48 GiB, de acordo com sua documentação de comprimento de contexto consultada em 23 de outubro de 2026. Você pode aumentá-lo com OLLAMA_CONTEXT_LENGTH. No LM Studio, defina o comprimento de contexto ao carregar o modelo. Se um chunk mais sua tradução não couber, a saída pode ser cortada.
4. Divida em chunks nos limites de parágrafo, cerca de 600 palavras
Nunca divida dentro de um parágrafo ou frase. 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 menores custam pouco: a execução A levou 10,4 minutos contra 9,5 minutos da requisição única, e um chunk com falha é barato de reexecutar.
Mantenha a instrução curta e idêntica para cada chunk. A nossa era: traduza para o inglês, mantenha exatamente um parágrafo de saída por parágrafo de entrada separado por uma linha em branco, e produza 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. Nosso guia para criar um glossário de tradução cobre o que incluir. Chunks curtos perdem a história ao redor, e o glossário é o que a carrega.
5. Verifique cada chunk antes de juntá-los
Execute 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. Isso detectou a falha 2.
- Proporção de comprimento por parágrafo. Compare a contagem de palavras de cada parágrafo traduzido com a da origem. Isso detectou a falha 1, que a contagem de parágrafos não pegou.
- Termos do glossário por parágrafo. Onde um termo de origem aparece, sua tradução exigida deve aparecer o mesmo número de vezes. Isso detectou a falha 3, que as outras duas verificações não pegaram. Línguas com flexão exigirão algum julgamento aqui, porque um termo em alemão ou russo muda de forma.
Para prosa de alemão para inglês, os parágrafos da execução A ficaram entre 0,98 e 1,17 palavras de saída por palavra de entrada. O parágrafo danificado da execução C ficou em 0,82. Defina sua própria faixa verificando alguns parágrafos em que você confia no seu par de idiomas; os padrões do 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 qualquer coisa sobre a 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 retorna texto. Títulos, notas de rodapé, tabelas, imagens, layout de página e estilos devem ser recolocados manualmente ou por uma ferramenta de conversão. Para um relatório curto isso é trivial. Para um livro com notas de rodapé e tabelas, pode levar mais tempo do que a tradução.
Quanto tempo leva um livro inteiro
Nossa execução com chunks traduziu 3.179 palavras em 10,4 minutos, cerca de 300 palavras por minuto nesta máquina. Nesse ritmo, um romance de 90.000 palavras levaria aproximadamente cinco horas de geração, antes das verificações e reexecuções. Isso é aritmética simples de uma execução, não um benchmark. A velocidade muda com o tamanho do modelo, a quantização, o hardware, o par de idiomas e quanto mais a máquina está fazendo.
O arquivo do modelo tinha 17,5 GB em disco, e o cache de contexto e os buffers de runtime precisam de memória além disso, então uma máquina precisa de consideravelmente mais memória livre do que o tamanho do arquivo. Um modelo menor rodará mais rápido e com menos memória, geralmente com algum custo em qualidade. Teste-o em uma amostra representativa antes de comprometer um livro inteiro. Nosso guia sobre o melhor LLM para tradução explica como montar 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 arquivo pode sair da sua máquina? | Não é necessário | Necessário |
| O que retorna | Texto simples que você remonta | Um arquivo traduzido |
| Tamanho do modelo | Limitado pela sua memória | Limitado pelo provedor |
| Consistência ao longo de um livro inteiro | Sua tarefa: glossário, divisão em blocos, verificações | Integrado em alguns serviços |
| Custo por documento | Seu hardware e tempo | Preço por documento ou por palavra |
Se as suas regras permitem o upload do arquivo, um serviço de documentos elimina a maior parte do trabalho acima. O BookTranslator traduz arquivos PDF, EPUB e DOCX completos e retorna um arquivo traduzido, e suas perguntas frequentes afirmam que os arquivos enviados e a saída da tradução não são usados para treinar modelos de IA. É um serviço em nuvem, portanto não é uma opção quando o arquivo precisa permanecer na sua máquina. Se você está decidindo entre executar modelos por conta própria e pagar por um serviço, quanto custa de fato a tradução com LLM mostra como orçar o lado dos tokens.
Obtenha os arquivos de teste
Todos os arquivos 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 por parágrafo e imprime divergências na contagem de parágrafos, proporções de comprimento fora do intervalo e termos do glossário ausentes (com--term "Prokurist=chief clerk"). Funciona com a saída de qualquer ferramenta.results.csv: cada requisição com suas contagens de parágrafos, contagens de palavras, contagens de tokens e tempo.failure-examples.txt: o texto de origem em alemão e a saída bruta 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. Leva apenas alguns segundos e sinalizou todas as três falhas neste teste. Ele não consegue dizer se uma frase fluente está errada, então os parágrafos sinalizados são onde sua leitura começa, não onde termina.
Posts Relacionados





