Traduza PDFs com o BabelDOC em uma base URL OpenAI personalizada.

Updated 2026-07-30

O tradutor do BabelDOC é compatível com OpenAI por design: três flags (--openai, --openai-base-url, --openai-api-key) mais --openai-model selecionam o endpoint e o modelo. Aponte a base URL para https://api.apisrouter.com/v1 e traduza documentos com Claude, DeepSeek, GLM, ou Gemini através de uma chave.

Resposta rápida: três flags roteiam toda chamada de tradução.

A linha de comando do BabelDOC recebe o endpoint diretamente: --openai habilita o tradutor de LLM, --openai-base-url define para onde as requisições vão, --openai-api-key autentica, e --openai-model escolhe o id do modelo. Os próprios exemplos do README mostram exatamente esse conjunto de flags, e a nota do serviço de tradução afirma que só LLMs compatíveis com OpenAI são suportados, o que faz de um gateway multi-fornecedor compatível com OpenAI o ajuste natural em vez de um workaround. Como o id do modelo é encaminhado como uma string simples, qualquer coisa que o endpoint sirva funciona: os próprios documentos upstream recomendam modelos amigáveis a compatibilidade OpenAI das famílias GLM e DeepSeek, e através da APIsRouter esses ficam ao lado de ids Claude e Gemini atrás da mesma base URL.

babeldoc --files paper.pdf \
  --lang-in en --lang-out zh \
  --openai \
  --openai-model "deepseek-v4-flash" \
  --openai-base-url "https://api.apisrouter.com/v1" \
  --openai-api-key "$APISROUTER_API_KEY"

Como o BabelDOC transforma um PDF em chamadas de modelo.

O BabelDOC (funstory-ai no GitHub, cerca de 9 mil estrelas, do time por trás do Immersive Translate) é um tradutor de documentos PDF que preserva o layout: ele analisa a estrutura do documento, protege fórmulas e figuras, encontra parágrafos, os traduz com um LLM, e reconstrói o PDF como uma versão mono traduzida e uma versão dual lado a lado. Ele vem como uma CLI e uma API Python, e é a contraparte auto-hospedada do serviço BabelDOC hospedado. A fase de tradução é onde o endpoint importa. Um documento vira muitas requisições chat-completions do tamanho de um parágrafo, limitadas pela flag --qps (padrão 4 consultas por segundo) e processadas por um pool de workers (pool-max-workers, com padrão no valor de QPS). Esse formato tem duas consequências. Primeiro, tradução é uma carga de volume: um PDF longo são centenas de chamadas pequenas, então o preço por token se acumula rápido. Segundo, ao contrário de cargas de recuperação onde o modelo majoritariamente lê, tradução escreve aproximadamente tanto quanto lê, então o preço de token de saída importa tanto quanto o preço de entrada quando você compara ids. O BabelDOC também faz cache das traduções, então rodar um documento novamente reutiliza resultados anteriores a menos que você passe --ignore-cache. CSVs de glossário (--glossary-files) fixam terminologia ao longo da execução, e --max-pages-per-part divide documentos muito grandes em partes que são traduzidas e mescladas automaticamente.

Configuração completa: flags de CLI ou o arquivo de config TOML.

Para uso repetido, as mesmas configurações vivem em um arquivo TOML passado com --config. A tabela [babeldoc] aceita as mesmas chaves em kebab-case: openai, openai-model, openai-base-url, openai-api-key, mais as opções de throughput e saída. Isso mantém a chave fora do histórico do seu shell e torna um perfil de tradução reproduzível entre documentos. A config abaixo é um perfil prático de volume: um id rápido para o grosso dos documentos, QPS elevado para combinar com um gateway com pool, e ambos os modos de saída mantidos. Troque openai-model para um id mais forte em documentos onde nuance importa mais que throughput.

[babeldoc]
lang-in = "en-US"
lang-out = "zh-CN"
qps = 10
pool-max-workers = 10

# Serviço de tradução
openai = true
openai-model = "deepseek-v4-flash"
openai-base-url = "https://api.apisrouter.com/v1"
openai-api-key = "sk-YOUR-APISROUTER-KEY"

# Controle de saída
no-dual = false
no-mono = false
watermark-output-mode = "no_watermark"

Escolhendo um modelo de tradução.

O fluxo de comparação é concreto: traduza as mesmas dez páginas com dois ids (o cache com chave por execução os mantém separados), leia os duais lado a lado, e verifique o log de uso por chave para o que cada passada custou. A maioria dos times chega a um padrão rápido mais um perfil premium para documentos que merecem, ambos como arquivos TOML.

  • Documentos de volume (manuais, papers lidos uma vez) combinam com deepseek-v4-flash: a qualidade de tradução se mantém para prosa técnica e o custo por página é próximo de desprezível.
  • Tradução com alvo em chinês é um jogo em casa para glm-5.2 e a família DeepSeek; os próprios documentos upstream apontam para modelos GLM e DeepSeek como escolhas bem-comportadas compatíveis com OpenAI.
  • Documentos onde nuance é crítica (contratos, traduções publicadas) justificam claude-sonnet-4-6 ou claude-haiku-4-5-20251001, que acompanham terminologia e registro de forma mais fiel ao longo de documentos longos.
  • Tokens de saída importam aqui. Tradução escreve tanto quanto lê, então compare ids também na coluna de preço de saída, não só na de entrada.
  • Combine glossários com ids rápidos. Um CSV de glossário fixa a terminologia da qual modelos rápidos ocasionalmente se desviam, o que fecha boa parte da lacuna de qualidade em texto técnico.

Pague pelo uso · abaixo do preço oficial

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

ModeloPreço oficialNosso preço
DeepSeek V4 Flash$0.14 / $0.28 per M$0.10 / $0.30 per M
GLM-5.2$1.14 / $4.00 per M$1.10 / $4.00 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M

Modos de falha e ajuste de throughput.

QPS é o botão que interage com o gateway. O padrão de 4 consultas por segundo é conservador; capacidade upstream com pool geralmente sustenta mais, e elevar --qps (com pool-max-workers o acompanhando) é como um documento de 300 páginas para de tomar a tarde inteira. Aumente gradualmente observando respostas 429 em vez de pular para um número grande a frio, porque um parágrafo com rate limit tenta de novo e desacelera a execução inteira. As flags só se aplicam quando --openai está definido. Passar uma base URL sem --openai deixa o tradutor desabilitado, o que aparece como uma execução que analisa o PDF mas nunca traduz. Ids de modelo são strings exatas contra a listagem /v1/models do endpoint; um erro de digitação falha a primeira chamada de parágrafo com model-not-found. Um 401 significa que a chave e a base URL não pertencem juntas. Problemas de layout não são problemas de endpoint. Texto sobreposto, fórmulas perdidas, ou tabelas quebradas remetem ao lado de análise do PDF (tente --enhance-compatibility, --ocr-workaround para documentos escaneados, ou o toggle de rich-text), e trocar de modelo não vai corrigi-los. O inverso também vale: terminologia mal traduzida é um problema de modelo ou glossário, não de parser. O cache pode mascarar mudanças. Depois de trocar de modelo, passe --ignore-cache se você quiser que o novo id retraduza conteúdo que o id antigo já cobriu; caso contrário, parágrafos em cache permanecem como estavam.

Quem roteia o BabelDOC por um gateway.

  • Pesquisadores traduzindo papers em massa, onde centenas de chamadas pequenas por documento tornam preço de volume e visibilidade de uso por chave o jogo inteiro.
  • Times padronizando documentação bilíngue, rodando um perfil padrão rápido e um perfil premium contra o mesmo endpoint com strings de modelo diferentes.
  • Usuários em mercados onde os modelos de tradução mais fortes para seu par de idiomas ficam com fornecedores diferentes: ids GLM, DeepSeek, Claude, e Gemini todos atrás de uma chave.
  • Self-hosters substituindo o serviço hospedado para documentos confidenciais, mantendo a análise local e enviando só o texto de parágrafo para um endpoint auditável.
  • Desenvolvedores sem acesso ao faturamento de um determinado fornecedor. O acesso baseado em recarga sem exigência de cartão remove a dependência de cadastro por provedor.

Verifique o endpoint e depure o primeiro documento.

Liste os modelos que sua chave pode endereçar antes de iniciar uma execução longa; --openai-model precisa corresponder a um id servido exatamente. Depois traduza algo pequeno (um PDF de uma página, ou --pages 1 num maior) do início ao fim. Um 401 no primeiro parágrafo significa que a chave não bate com a base URL. Model-not-found é um erro de digitação no id. Uma execução que analisa mas nunca chama o endpoint está sem --openai. Travamentos frequentes com mensagens de nova tentativa apontam para QPS definido mais alto do que o endpoint sustenta; abaixe e aumente gradualmente de novo. Assim que os documentos fluem, o console da APIsRouter mostra modelo, contagens de token e gasto por requisição. O custo de tradução escala com o comprimento do documento nas duas direções (entrada e saída), e o log de uso por chave é como você aprende seu custo real por página para cada modelo em vez de estimá-lo.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

# depois um teste de fumaça de uma página
babeldoc --config babeldoc.toml --files sample.pdf --pages 1

Perguntas frequentes

O BabelDOC suporta endpoints personalizados compatíveis com OpenAI?

Sim, nativamente. A CLI expõe --openai-base-url e --openai-api-key ao lado de --openai-model, e o config TOML aceita as mesmas chaves. O README upstream declara que LLMs compatíveis com OpenAI são o tipo de tradutor suportado.

O BabelDOC pode traduzir com modelos Claude, GLM, ou DeepSeek?

Sim. O id do modelo é encaminhado como uma string simples para o endpoint por trás de --openai-base-url, então qualquer id do catálogo funciona. Os próprios documentos upstream recomendam modelos das famílias GLM e DeepSeek como escolhas bem-comportadas.

Quantas chamadas de API um PDF custa?

O BabelDOC traduz pedaços do tamanho de um parágrafo, então um documento vira centenas de pequenas chamadas chat-completions limitadas por --qps. Tanto tokens de entrada quanto de saída escalam com o comprimento do documento; o log de uso por chave mostra o custo exato por documento.

Qual QPS devo definir contra um gateway?

Comece perto do padrão de 4 e aumente gradualmente observando respostas 429; endpoints com pool geralmente sustentam mais, e pool-max-workers acompanha o valor de QPS a menos que definido separadamente. Um QPS mais alto e estável é a diferença entre minutos e horas em documentos longos.

Troquei de modelo mas a tradução não mudou. Por quê?

O cache de tradução. O BabelDOC reutiliza resultados em cache por documento; passe --ignore-cache depois de trocar --openai-model para que o novo id retraduza conteúdo previamente coberto.

A escolha do endpoint afeta layout, fórmulas, ou tabelas?

Não. Análise, análise de layout, e reconstrução do PDF rodam localmente independentemente do endpoint. Problemas de layout têm suas próprias flags (--enhance-compatibility, --ocr-workaround); a base URL só decide qual modelo traduz o texto.