Tłumacz PDF-y BabelDOC-iem na niestandardowym base URL OpenAI.
Updated 2026-07-30
Translator BabelDOC jest z założenia kompatybilny z OpenAI: trzy flagi (--openai, --openai-base-url, --openai-api-key) plus --openai-model wybierają endpoint i model. Wskaż base URL na https://api.apisrouter.com/v1 i tłumacz dokumenty Claude, DeepSeek, GLM albo Gemini na jednym kluczu.
Szybka odpowiedź: trzy flagi kierują każde wywołanie tłumaczenia.
Linia poleceń BabelDOC przyjmuje endpoint bezpośrednio: --openai włącza translator LLM, --openai-base-url ustawia, dokąd idą żądania, --openai-api-key uwierzytelnia, a --openai-model wybiera identyfikator modelu. Przykłady we własnym README pokazują dokładnie ten zestaw flag, a notatka o usłudze tłumaczenia stwierdza, że wspierane są tylko LLM-y kompatybilne z OpenAI, co czyni wielodostawcową bramkę kompatybilną z OpenAI naturalnym dopasowaniem, a nie obejściem. Ponieważ identyfikator modelu jest przekazywany jako zwykły string, działa wszystko, co serwuje endpoint: dokumentacja upstream sama rekomenduje modele przyjazne kompatybilności z OpenAI z rodzin GLM i DeepSeek, a przez APIsRouter siedzą one obok identyfikatorów Claude i Gemini za tym samym 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"Jak BabelDOC zamienia PDF w wywołania modelu.
BabelDOC (funstory-ai na GitHubie, około 9 tys. gwiazdek, od zespołu stojącego za Immersive Translate) to translator dokumentów PDF, który zachowuje układ: parsuje strukturę dokumentu, chroni wzory i ryciny, znajduje akapity, tłumaczy je LLM-em i odbudowuje PDF jako przetłumaczoną wersję mono oraz wersję dual pokazującą oba języki obok siebie. Dostarczany jest jako CLI i Python API, i jest samodzielnie hostowanym odpowiednikiem hostowanej usługi BabelDOC. Faza tłumaczenia to miejsce, gdzie endpoint ma znaczenie. Dokument zamienia się w wiele żądań chat-completions wielkości akapitu, dławionych flagą --qps (domyślnie 4 zapytania na sekundę) i przetwarzanych przez pulę workerów (pool-max-workers, domyślnie równą wartości QPS). Ten kształt ma dwie konsekwencje. Po pierwsze, tłumaczenie to obciążenie wolumenowe: długi PDF to setki małych wywołań, więc cena per token szybko się kumuluje. Po drugie, w przeciwieństwie do obciążeń retrievalowych, gdzie model głównie czyta, tłumaczenie pisze mniej więcej tyle, ile czyta, więc cena tokenów wyjściowych liczy się tak samo jak cena wejściowych przy porównywaniu identyfikatorów. BabelDOC cache'uje też tłumaczenia, więc ponowne uruchomienie dokumentu ponownie wykorzystuje poprzednie wyniki, chyba że podasz --ignore-cache. Glosariusze CSV (--glossary-files) przypinają terminologię w całym uruchomieniu, a --max-pages-per-part dzieli bardzo duże dokumenty na części, które są tłumaczone i scalane automatycznie.
Pełna konfiguracja: flagi CLI albo plik konfiguracji TOML.
Do powtarzalnego użycia te same ustawienia mogą żyć w pliku TOML przekazywanym przez --config. Tabela [babeldoc] przyjmuje identyczne klucze w formacie kebab-case: openai, openai-model, openai-base-url, openai-api-key, plus opcje przepustowości i wyjścia. Trzyma to klucz poza historią Twojej powłoki i czyni profil tłumaczenia odtwarzalnym między dokumentami. Konfiguracja poniżej to praktyczny profil wolumenowy: szybki identyfikator do większości dokumentów, podniesione QPS dopasowane do puli bramki i zachowane oba tryby wyjścia. Zamień openai-model na mocniejszy identyfikator dla dokumentów, gdzie niuans liczy się bardziej niż przepustowość.
[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"Dobór modelu do tłumaczenia.
Przebieg porównania jest konkretny: przetłumacz te same dziesięć stron dwoma identyfikatorami (cache kluczowany per uruchomienie trzyma je osobno), czytaj wersje dual obok siebie i sprawdź log użycia per klucz, ile kosztowało każde przejście. Większość zespołów ląduje na szybkim domyślnym profilu plus profilu premium dla dokumentów, które na to zasługują, oba jako pliki TOML.
- Dokumenty wolumenowe (instrukcje, artykuły czytane raz) pasują do deepseek-v4-flash: jakość tłumaczenia trzyma się przy prozie technicznej, a koszt per strona jest bliski pomijalnemu.
- Tłumaczenie na chiński to mecz domowy dla glm-5.2 i rodziny DeepSeek; dokumentacja upstream sama wskazuje modele GLM i DeepSeek jako dobrze zachowujące się wybory kompatybilne z OpenAI.
- Dokumenty krytyczne pod względem niuansu (umowy, publikowane tłumaczenia) uzasadniają claude-sonnet-4-6 albo claude-haiku-4-5-20251001, które wierniej śledzą terminologię i rejestr w długich dokumentach.
- Tokeny wyjściowe mają tu znaczenie. Tłumaczenie pisze tyle, ile czyta, więc porównuj identyfikatory też po kolumnie ceny wyjściowej, nie tylko wejściowej.
- Łącz glosariusze z szybkimi identyfikatorami. Glosariusz CSV przypina terminologię, przy której szybkie modele czasem dryfują, co zamyka dużą część luki jakościowej w tekście technicznym.
Płatność za użycie · poniżej cen oficjalnych
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Model | Cena oficjalna | Nasza cena |
|---|---|---|
| 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 |
Tryby awarii i strojenie przepustowości.
QPS to pokrętło, które wchodzi w interakcję z bramką. Domyślne 4 zapytania na sekundę są zachowawcze; pulowana pojemność upstream zwykle wytrzymuje więcej, a podniesienie --qps (z podążającym za nim pool-max-workers) sprawia, że 300-stronicowy dokument przestaje zajmować całe popołudnie. Podnoś je, obserwując odpowiedzi 429, zamiast skakać od razu na dużą liczbę, bo akapit z rate-limitem ponawia próby i spowalnia całe uruchomienie. Flagi mają zastosowanie tylko wtedy, gdy ustawione jest --openai. Podanie base URL bez --openai zostawia translator wyłączony, co objawia się jako uruchomienie, które parsuje PDF, ale nigdy nie tłumaczy. Identyfikatory modeli to dokładne stringi względem listingu /v1/models endpointu; literówka zawodzi pierwsze wywołanie akapitu z model-not-found. 401 oznacza, że klucz i base URL do siebie nie pasują. Problemy z układem to nie problemy endpointu. Nakładający się tekst, zgubione wzory albo połamane tabele wywodzą się ze strony parsowania PDF (spróbuj --enhance-compatibility, --ocr-workaround dla zeskanowanych dokumentów, albo przełącznika rich-text), a zmiana modelu ich nie naprawi. Odwrotność też jest prawdziwa: błędnie przetłumaczona terminologia to problem modelu albo glosariusza, nie parsera. Cache może maskować zmiany. Po zmianie modelu podaj --ignore-cache, jeśli chcesz, żeby nowy identyfikator przetłumaczył ponownie treść, którą pokrył już stary; w przeciwnym razie akapity z cache'u zostają takie, jakie były.
Kto kieruje BabelDOC przez bramkę.
- Badacze tłumaczący artykuły masowo, gdzie setki małych wywołań per dokument czynią cenę wolumenową i widoczność użycia per klucz całą grą.
- Zespoły standaryzujące dwujęzyczną dokumentację, uruchamiające szybki domyślny profil i profil premium na tym samym endpoincie z różnymi stringami modeli.
- Użytkownicy na rynkach, gdzie najsilniejsze modele tłumaczeniowe dla ich pary językowej siedzą u różnych dostawców: identyfikatory GLM, DeepSeek, Claude i Gemini wszystkie za jednym kluczem.
- Osoby hostujące samodzielnie, zastępujące usługę hostowaną dla poufnych dokumentów, trzymające parsowanie lokalnie i wysyłające tylko tekst akapitów do jednego audytowalnego endpointu.
- Deweloperzy bez dostępu do rozliczeń danego dostawcy. Dostęp oparty na doładowaniu, bez wymogu karty, usuwa zależność od rejestracji u każdego dostawcy z osobna.
Zweryfikuj endpoint i debuguj pierwszy dokument.
Wylistuj modele, do których Twój klucz ma dostęp, zanim zaczniesz długie uruchomienie; --openai-model musi dokładnie zgadzać się z serwowanym identyfikatorem. Potem przetłumacz coś malutkiego (jednostronicowy PDF, albo --pages 1 na większym) od początku do końca. 401 na pierwszym akapicie oznacza, że klucz nie pasuje do base URL. Model-not-found to literówka w identyfikatorze. Uruchomienie, które parsuje, ale nigdy nie woła endpointu, nie ma --openai. Częste zawieszenia z komunikatami o ponawianiu wskazują na QPS ustawione wyżej, niż wytrzymuje endpoint; obniż je i podnoś ponownie. Gdy dokumenty już płyną, konsola APIsRouter pokazuje model per żądanie, liczbę tokenów i wydatki. Koszt tłumaczenia skaluje się z długością dokumentu w obu kierunkach (wejście i wyjście), a log użycia per klucz to sposób, żeby poznać swój prawdziwy koszt per strona dla każdego modelu, zamiast go szacować.
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 1Częste pytania
Czy BabelDOC wspiera niestandardowe endpointy kompatybilne z OpenAI?
Tak, natywnie. CLI eksponuje --openai-base-url i --openai-api-key obok --openai-model, a konfiguracja TOML przyjmuje te same klucze. README upstream stwierdza, że LLM-y kompatybilne z OpenAI to wspierany typ translatora.
Czy BabelDOC może tłumaczyć modelami Claude, GLM albo DeepSeek?
Tak. Identyfikator modelu jest przekazywany jako zwykły string do endpointu za --openai-base-url, więc działa dowolny identyfikator z katalogu. Dokumentacja upstream sama rekomenduje modele z rodzin GLM i DeepSeek jako dobrze zachowujące się wybory.
Ile wywołań API kosztuje jeden PDF?
BabelDOC tłumaczy fragmenty wielkości akapitu, więc dokument zamienia się w setki małych wywołań chat-completions dławionych przez --qps. Zarówno tokeny wejściowe, jak i wyjściowe skalują się z długością dokumentu; log użycia per klucz pokazuje dokładny koszt per dokument.
Jakie QPS powinienem ustawić względem bramki?
Zacznij blisko domyślnych 4 i podnoś, obserwując odpowiedzi 429; pulowane endpointy zwykle wytrzymują więcej, a pool-max-workers podąża za wartością QPS, chyba że ustawisz je osobno. Stabilnie wyższe QPS to różnica między minutami a godzinami przy długich dokumentach.
Zmieniłem model, ale tłumaczenie się nie zmieniło. Dlaczego?
Cache tłumaczeń. BabelDOC ponownie wykorzystuje zcache'owane wyniki per dokument; podaj --ignore-cache po zmianie --openai-model, żeby nowy identyfikator przetłumaczył ponownie wcześniej pokrytą treść.
Czy wybór endpointu wpływa na układ, wzory albo tabele?
Nie. Parsowanie, analiza układu i odbudowa PDF działają lokalnie niezależnie od endpointu. Problemy z układem mają własne flagi (--enhance-compatibility, --ocr-workaround); base URL decyduje tylko o tym, który model tłumaczy tekst.