Vertaal PDF's met BabelDOC op een aangepaste OpenAI base URL.

Updated 2026-07-30

De vertaler van BabelDOC is doelbewust OpenAI-compatibel: drie flags (--openai, --openai-base-url, --openai-api-key) plus --openai-model kiezen het endpoint en het model. Wijs de base URL naar https://api.apisrouter.com/v1 en vertaal documenten met Claude, DeepSeek, GLM of Gemini via één sleutel.

Snel antwoord: drie flags routeren elke vertaalaanroep.

De commandoregel van BabelDOC neemt het endpoint rechtstreeks: --openai schakelt de LLM-vertaler in, --openai-base-url stelt in waar verzoeken naartoe gaan, --openai-api-key authenticeert, en --openai-model kiest het model-ID. De eigen voorbeelden van de README tonen exact deze flagset, en de opmerking over de vertaalservice stelt dat alleen OpenAI-compatibele LLM's worden ondersteund, wat een multi-vendor OpenAI-compatibele gateway de natuurlijke fit maakt in plaats van een workaround. Omdat het model-ID als platte string wordt doorgegeven, werkt alles wat het endpoint bedient: de upstream-documentatie zelf beveelt OpenAI-compatibel-vriendelijke modellen uit de GLM- en DeepSeek-families aan, en via APIsRouter zitten die naast Claude- en Gemini-ID's achter dezelfde 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"

Hoe BabelDOC een PDF omzet in modelaanroepen.

BabelDOC (funstory-ai op GitHub, ongeveer 9K sterren, van het team achter Immersive Translate) is een PDF-documentvertaler die de layout behoudt: hij parseert de documentstructuur, beschermt formules en figuren, vindt paragrafen, vertaalt ze met een LLM, en herbouwt de PDF als een vertaalde mono-versie en een naast-elkaar dual-versie. Het wordt geleverd als een CLI en een Python-API, en het is het zelfgehoste tegenhanger van de gehoste BabelDOC-service. De vertaalfase is waar het endpoint ertoe doet. Een document wordt vele paragraafgrote chat-completions-verzoeken, gedrosseld door de --qps-flag (standaard 4 queries per seconde) en verwerkt door een workerpool (pool-max-workers, standaard de QPS-waarde). Die vorm heeft twee gevolgen. Ten eerste is vertaling een volumeworkload: een lang PDF is honderden kleine aanroepen, dus de prijs per token stapelt zich snel op. Ten tweede, in tegenstelling tot retrievalworkloads waar het model vooral leest, schrijft vertaling ongeveer evenveel als het leest, dus de outputtokenprijs doet er net zoveel toe als de inputprijs wanneer je ID's vergelijkt. BabelDOC cachet ook vertalingen, dus het opnieuw draaien van een document hergebruikt eerdere resultaten tenzij je --ignore-cache doorgeeft. Woordenlijst-CSV's (--glossary-files) leggen terminologie vast over de run, en --max-pages-per-part splitst zeer grote documenten in delen die automatisch worden vertaald en samengevoegd.

Volledige instelling: CLI-flags of het TOML-configbestand.

Voor herhaald gebruik leven dezelfde instellingen in een TOML-bestand doorgegeven met --config. De [babeldoc]-tabel accepteert identieke sleutels in kebab-case: openai, openai-model, openai-base-url, openai-api-key, plus de doorvoer- en outputopties. Dit houdt de sleutel uit je shellgeschiedenis en maakt een vertaalprofiel reproduceerbaar over documenten heen. De configuratie hieronder is een praktisch volumeprofiel: een snel ID voor het merendeel van de documenten, QPS verhoogd om te matchen met een gepoolde gateway, en beide outputmodi behouden. Wissel openai-model naar een sterker ID voor documenten waar nuance meer telt dan doorvoer.

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

# Translation service
openai = true
openai-model = "deepseek-v4-flash"
openai-base-url = "https://api.apisrouter.com/v1"
openai-api-key = "sk-YOUR-APISROUTER-KEY"

# Output control
no-dual = false
no-mono = false
watermark-output-mode = "no_watermark"

Een vertaalmodel kiezen.

De vergelijkingsworkflow is concreet: vertaal dezelfde tien pagina's met twee ID's (de cache, per run gesleuteld, houdt ze apart), lees de duals naast elkaar, en controleer het gebruikslogboek per sleutel op wat elke pass kostte. De meeste teams landen op een snelle standaard plus een premiumprofiel voor documenten die het verdienen, beide als TOML-bestanden.

  • Volumedocumenten (handleidingen, papers die eenmaal worden gelezen) passen bij deepseek-v4-flash: vertaalkwaliteit houdt stand voor technisch proza en de kosten per pagina zijn nagenoeg verwaarloosbaar.
  • Vertaling naar het Chinees is een thuiswedstrijd voor glm-5.2 en de DeepSeek-familie; de upstream-documentatie zelf wijst op GLM- en DeepSeek-modellen als goed gedragen OpenAI-compatibele keuzes.
  • Nuancekritische documenten (contracten, gepubliceerde vertalingen) rechtvaardigen claude-sonnet-4-6 of claude-haiku-4-5-20251001, die terminologie en register getrouwer volgen over lange documenten.
  • Outputtokens doen er hier toe. Vertaling schrijft evenveel als het leest, dus vergelijk ID's ook op de outputpriskolom, niet alleen op input.
  • Combineer woordenlijsten met snelle ID's. Een woordenlijst-CSV legt de terminologie vast waar snelle modellen af en toe van afdwalen, wat een groot deel van het kwaliteitsgat op technische tekst dicht.

Betaal naar gebruik · onder officiële prijzen

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

ModelOfficiële prijsOnze prijs
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

Faalmodi en doorvoertuning.

QPS is de knop die interacteert met de gateway. De standaard van 4 queries per seconde is conservatief; gepoolde upstream-capaciteit houdt doorgaans meer vol, en het verhogen van --qps (met pool-max-workers die volgt) is hoe een document van 300 pagina's stopt de hele middag te duren. Voer het geleidelijk op terwijl je let op 429-reacties in plaats van koud naar een groot getal te springen, omdat een gedrosselde paragraaf opnieuw probeert en de hele run vertraagt. De flags gelden alleen wanneer --openai is gezet. Een base URL doorgeven zonder --openai laat de vertaler uitgeschakeld, wat zich uit als een run die de PDF parseert maar nooit vertaalt. Model-ID's zijn exacte strings tegen de /v1/models-lijst van het endpoint; een tikfout laat de eerste paragraafaanroep falen met model-not-found. Een 401 betekent dat de sleutel en base URL niet bij elkaar horen. Layoutproblemen zijn geen endpointproblemen. Overlappende tekst, verloren formules of gebroken tabellen herleiden zich tot de PDF-parsingkant (probeer --enhance-compatibility, --ocr-workaround voor gescande documenten, of de rich-text-toggle), en van model wisselen lost ze niet op. Het omgekeerde geldt ook: verkeerd vertaalde terminologie is een model- of woordenlijstprobleem, geen parserprobleem. De cache kan wijzigingen maskeren. Geef na het wisselen van model --ignore-cache door als je wilt dat het nieuwe ID inhoud opnieuw vertaalt die het oude ID al dekte; anders blijven gecachete paragrafen zoals ze waren.

Wie routeert BabelDOC via een gateway.

  • Onderzoekers die papers in bulk vertalen, waar honderden kleine aanroepen per document volumeprijzen en gebruikszichtbaarheid per sleutel het hele spel maken.
  • Teams die tweetalige documentatie standaardiseren, die een snel standaardprofiel en een premiumprofiel tegen hetzelfde endpoint draaien met verschillende model-strings.
  • Gebruikers in markten waar de sterkste vertaalmodellen voor hun taalpaar bij verschillende leveranciers zitten: GLM-, DeepSeek-, Claude- en Gemini-ID's allemaal achter één sleutel.
  • Self-hosters die de gehoste service vervangen voor vertrouwelijke documenten, die het parsen lokaal houden en alleen paragraaftekst naar één controleerbaar endpoint sturen.
  • Developers zonder toegang tot de facturering van een bepaalde leverancier. Toegang op basis van opwaarderen zonder kaartvereiste verwijdert de aanmeldingsafhankelijkheid per provider.

Verifieer het endpoint en debug het eerste document.

Lijst de modellen op die je sleutel kan aanspreken voordat je een lange run start; --openai-model moet exact overeenkomen met een bediend ID. Vertaal dan iets kleins (een PDF van één pagina, of --pages 1 op een grotere) van begin tot eind. Een 401 op de eerste paragraaf betekent dat de sleutel niet overeenkomt met de base URL. Model-not-found is een tikfout in het ID. Een run die parseert maar nooit het endpoint aanroept, mist --openai. Frequente stagnaties met retry-berichten wijzen op een QPS hoger gezet dan het endpoint volhoudt; verlaag het en voer het weer geleidelijk op. Zodra documenten stromen, toont de APIsRouter-console model per verzoek, tokenaantallen en uitgaven. Vertaalkosten schalen met documentlengte in beide richtingen (input en output), en het gebruikslogboek per sleutel is hoe je je echte kosten per pagina voor elk model leert kennen in plaats van te schatten.

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

# then a one-page smoke test
babeldoc --config babeldoc.toml --files sample.pdf --pages 1

Veelgestelde vragen

Ondersteunt BabelDOC aangepaste OpenAI-compatibele endpoints?

Ja, native. De CLI biedt --openai-base-url en --openai-api-key naast --openai-model, en de TOML-config accepteert dezelfde sleutels. De upstream-README stelt dat OpenAI-compatibele LLM's het ondersteunde vertalertype zijn.

Kan BabelDOC vertalen met Claude-, GLM- of DeepSeek-modellen?

Ja. Het model-ID wordt als platte string doorgegeven aan het endpoint achter --openai-base-url, dus elk catalogus-ID werkt. De upstream-documentatie zelf beveelt GLM- en DeepSeek-familiemodellen aan als goed gedragen keuzes.

Hoeveel API-aanroepen kost één PDF?

BabelDOC vertaalt paragraafgrote stukken, dus een document wordt honderden kleine chat-completions-aanroepen gedrosseld door --qps. Zowel input- als outputtokens schalen met documentlengte; het gebruikslogboek per sleutel toont de exacte kosten per document.

Welke QPS moet ik instellen tegen een gateway?

Begin bij de standaard van 4 en voer geleidelijk op terwijl je let op 429-reacties; gepoolde endpoints houden doorgaans meer vol, en pool-max-workers volgt de QPS-waarde tenzij apart gezet. Een stabiel hogere QPS is het verschil tussen minuten en uren op lange documenten.

Ik heb van model gewisseld maar de vertaling veranderde niet. Waarom?

De vertaalcache. BabelDOC hergebruikt gecachete resultaten per document; geef --ignore-cache door na het wijzigen van --openai-model zodat het nieuwe ID eerder gedekte inhoud opnieuw vertaalt.

Beïnvloedt de endpointkeuze layout, formules of tabellen?

Nee. Parsing, layoutanalyse en PDF-reconstructie draaien lokaal ongeacht het endpoint. Layoutproblemen hebben hun eigen flags (--enhance-compatibility, --ocr-workaround); de base URL beslist alleen welk model de tekst vertaalt.