Конвейер для перевода книг целиком BookTrans
Конвейер для перевода книг целиком BookTrans

TL;DR

Я потратил пару недель на создание конвейера с открытым исходным кодом, который переводит книги целиком с помощью платных подписок на LLM. Поддерживаются Claude Code, Antigravity CLI и Codex. В статье описаны принципы построения конвейера для максимального качества перевода. Проект BookTrans на GitHub.

Всё началось с личной боли

Я прочёл первые две книги Сью Берк из нф-цикла «Семиозис» и захотел прочесть третью часть, «Узурпацию». На английском она уже давно вышла давно, а русского перевода я не нашёл. Также давно хотел прочесть «Singularity’s Ring» Поля Мелкоу, у которой тоже не было русского перевода. Наткнувшись в сети на большую библиотеку англоязычных книг с новинками в epub, где были эти книги, я подумал: почему бы не перевести самому, да ещё и помочь другим людям решать подобные проблемы?

Переводить с помощью веб-версий LLM целую книгу — занятие для очень терпеливых. Мой друг как-то пытался переводить интересную ему книгу постранично: фотографировал страницы, загружал снимки в Gemini, получал результат. Но это тянулось невыносимо долго. Даже если модель принимает роман целиком, то из-за ограничений на длину ответа перевод не поместится в один ответ. Также в огромном тексте внимание модели к деталям падает, и она начинает пропускать целые абзацы.

Я решил создать автоматизированный конвейер, который переводил бы большие тексты последовательно и сохранял в процессе перевода контекст, очевидный для живого переводчика, а также единство терминологии, имён и т.п.

Инсталляция и запуск

Проект есть на GitHub и как пакет на PyPI.

Можно поставить так, например:

git clone https://github.com/sukamenev/booktrans

или

pipx install booktrans

Есть 3 обёртки bt_agy, bt_claude, bt_codex для разных агентов, которые загружают уже сконфигурированные профили. И запустить так:

./booktrans/bt_agy source_book.epub --to ru --ui ru

А ещё лучше так:

uv run ./booktrans/bt_agy source_book.epub --to ru --ui ru

uv — очень хороший менеджер пакетов с поддержкой питоновского виртуального окружения.

Архитектура перевода: как не превратить книгу в кашу

Главная сложность в том, что «Узурпация» — тяжёлый для перевода текст: вымышленные миры, несуществующие животные и растения, иные планеты, названия странных организаций и движений, а также большие временные промежутки в повествовании. Если просто скармливать модели куски текста, то имена и термины будут переведены по-разному в каждом куске.

Конвейер использует 2 модели — самую сильную у данного агента для интеллектуальной работы и вторую по силе для технической работы.

До перевода конвейер выполняет дешёвые проверки: определяет преобладающий язык по абзацам, проверяет кодировку и смотрит, достаточно ли в файле текста. Затем он собирает список тегов и стилей. Недорогая модель определяет каким тэгам и классам соответствуют заголовки, проза, цитаты и т.п. Универсальный простой парсер epub создать нельзя: один и тот же класс в книгах разных издательств может означать совершенно разные вещи, поэтому соответствие тэгов типам контента определяет модель.

Если же книга уже на целевом языке, текста почти нет (комиксы) или в структурированном формате не распозналось ни одного заголовка, то процесс останавливается, чтобы разобрался человек.

Основная работа модели разбита на три этапа.

  1. Разведка. Перед началом перевода конвейер просматривает всю книгу. Модель составляет описание мира, персонажей и местных реалий, а затем формирует единый глоссарий и справочник по миру книги. Для персонажей записываются возраст, род, отношения, формы обращения и особенности речи. Если герой или предмет меняется по ходу книги, справочник хранит оба состояния и главу, где произошла перемена. Заодно модель отмечает непонятные и специфичные слова, которым могут понадобиться сноски. Каждому сложному слову или имени определяется единственный вариант перевода. В дальнейшем эта сводка разведки попадает в каждый запрос, чтобы сохранить единообразие терминологии.

  2. Последовательный перевод. Я понял, что нельзя запускать перевод множества глав параллельно. Сюжет развивается линейно, и переводчик, даже нейросетевой, должен находиться на месте читателя и последовательно проходить его вместе с героями. Важно понимать, что прежде происходило с персонажем, как он изменился внешне и внутренне: всё это влияет на стиль перевода. Поэтому перед каждой следующей главой конвейер передаёт модели пересказ предыдущих. Когда конспект того, что было раньше, разрастается, отдельный проход его сжимает.

  3. Слепая литературная редактура. Когда перевод готов, текст проходит этап редактуры. Оригинала на английском редактор не видит. Я намеренно разделил роли переводчика и редактора: считается, что доступ к оригиналу заставляет LLM-редактора чаще сохранять в тексте кальки с английского. В контекст редактора к каждой главе попадает русскоязычное описание мира и уже переведённые главы. Редактор возвращает изменённые абзацы. Черновик остаётся нетронутым, все правки можно просмотреть перед сборкой.

Стихи конвейер распознаёт отдельно и просит переводить стихами: без такой пометки модель обычно выдаёт подстрочник. Для узнаваемых цитат из Библии, классической литературы и официальных документов конвейер ищет по памяти (почему без запроса к сети будет указано далее) существующий признанный перевод и указывает источник в сноске.

Ошибки автора и сноски

Что делать, если в оригинале обнаружилась фактическая ошибка или нестыковка? Самый правильный способ — связаться с автором и уточнить, что он имел в виду. Такой возможности обычно нет у того, кому срочно нужен перевод, поэтому конвейер сохраняет ошибку в переводе и добавляет правильный вариант (по мнению LLM) в сноске.

Я считаю, что задача переводчика — точно передать авторский текст. Тихая правка меняет этот текст и прячет от читателя важное решение переводчика. Если автор затупил, то пусть читатель об этом знает. В сноске можно описать расхождение и оставить вывод читателю.

Сноски используются и для непонятных слов: редких научных терминов, устаревшей лексики, исторических имён, географических объектов и культурных отсылок. Это нужно, когда книга не даёт объяснения дальше и читателю пришлось бы лезть в словарь. Авторское пояснение может появиться через несколько глав, поэтому решения о добавлении сносок принимает фаза разведки, которая просмотрела всю книгу.

Нарезка, контекст и контроль целостности

Главы делятся на фрагменты примерно по 2000–3000 слов. Если в книге много стихов, то нарезка осуществляется маленькими кусками, так как на их перевод тратится существенно больше времени и токенов.

В модель уходит пять слоёв отобранного контекста.

Слой

Что получает модель

Мир и стиль

справочник персонажей, реалий, голосов и обязательных переводов терминов

Сюжет

накопительный конспект всех предыдущих событий, который периодически сжимается

Стык

последние два-три абзаца уже переведённого текста

Взгляд вперёд

начало следующего фрагмента в оригинале, чтобы не оборвать мысль

Работа

текущий фрагмент

После перевода каждой главы конспект всей книги обновляется и попадает в следующий запрос. Вместе с глоссарием из разведки модель видит решения, принятые по ходу перевода.

Богу — Богово, кесарю — кесарево

Конвейер — это сочетание действий LLM и python-скриптов.

Детерминированные операции выполняют скрипты. Заголовки, авторские и переводческие сноски, сквозные исправления и адреса ссылок хранятся отдельно и накладываются при сборке. Сквозные замены задаются точными фразами и при необходимости ограничиваются конкретными абзацами: глобальная регулярка может заменить термин и молча сломать русское согласование. Картинки и обложка переносятся без изменений. Переводится вся книга, включая посвящение, предисловие, благодарности, эпиграфы и раздел об авторе.

Каждый абзац получает устойчивый номер, который проходит через перевод, редактуру и сборку. Набор номеров в ответе обязан совпасть с набором в запросе: так конвейер ловит пропущенные, склеенные и придуманные абзацы.

Что проверяется автоматически
  • все ли абзацы вернулись и сохранили свои номера;

  • не разъехались ли термины из глоссария;

  • не исчезли ли числа и не остались ли фрагменты оригинала;

  • нет ли абзацев с аномальной длиной относительно остальной книги;

  • сохранились ли все заголовки, иллюстрации, ссылки и служебные разделы.

Если номера не совпали, фрагмент отправляется на повторный перевод с выдачей сообщения в лог. После трёх неудачных попыток конвейер обращается к резервной модели, если и она упадёт, то работа останавливается. Книга с непереведёнными кусками до сборки не доходит.

Все действия, которые поручаются моделям вынесены в отдельные файлы-промты, которые можно перекрывать или дополнять, если в своей папке настроек (типа .config под Linux) создать файл промта с таким же названием или с окончанием .add.md.

Инфраструктура, агенты и язык запросов

Для работы я задействовал три агента, к которым у меня есть доступ: Claude Code, Codex и Antigravity CLI. Имена команд в командной строке, соответственно — claude, codex и agy.

Все трое прекрасно и быстро работают через VPS от RUVDS по настройкам из моих статей: сначала выбираем конкретный VPS, затем настраиваем агентов для работы через него.

claude, codex и agy работают в консольном режиме как родные, даже принимают stdin и могут вызывать друг друга.

Логика распределения задач между моделями простая. Для перевода и финальной редактуры используется самая сильная доступная модель в режиме углублённого рассуждения. Для разметки и исправления ошибок распознавания текста хватает следующей по возможностям модели: например, Sonnet в Claude, Terra в Codex или Flash в AGY.

Часть задач в конвейере выполняют скрипты на Python, часть — агенты по текстовым запросам. Запросы я написал на русском. Ради интереса я сравнил одинаковые задания на русском и английском и в своих тестах заметной разницы в качестве перевода не увидел. Поэтому оставил русский и сосредоточился на правилах целевого языка: кавычках-ёлочках, формах обращения и других тонкостях.

Безопасность и инъекции

Текст книги считается недоверенными данными. Внутри может встретиться обращение к модели: от невинной реплики персонажа до команды «забудь все предыдущие инструкции» и требования прочитать файлы с приватными ключами или отправить их по указанному адресу. Поэтому разведка отдельно ищет обращения-инъекции к LLM. Если такое место найдено, конвейер останавливается до перевода и показывает его пользователю; продолжить после ручной проверки можно с отдельным ключом --force-injected.

Основной принцип защиты — технически ограничить возможности переводящих агентов. Claude запускается без инструментов и пользовательских MCP-серверов, AGY и Codex работают в песочницах. Консольным клиентам остаётся соединение с поставщиками моделей. Запрет в тексте запроса служит вторым слоем: модель должна перевести внедрённую команду как часть книги, проигнорировать её требования и сообщить о находке. Текстовый запрет слаб, потому что инъекция тоже состоит из текста.

Веб-поиск агентам решил тоже отключить. Опасность возникает уже при формировании запроса: хакнутая модель может включить в него имя файла, конфиденциальные данные или приватный ключ с локальной машины. Запрос передаётся поисковой системе и может сохраниться в её журналах. Злоумышленник, получивший доступ к этим журналам после взлома инфраструктуры поисковика, сможет извлечь оттуда конфиденциальные данные. Если же речь идёт к обращениям к внешним сайтам, то модель может передать приватные данные в виде параметра GET или POST, или даже просто в определённом порядке обходить страницы на хакнутом веб-сервере, буквально передать секрет по буквам. Чтение страница из поисковой выдачи создаёт ещё один риск: они может содержать тоже инъекции для агентов.

В исходниках команды запуска агентов сейчас выглядят так:

# Claude: встроенные инструменты и пользовательские MCP-серверы отключены
claude -p --output-format json --tools "" --strict-mcp-config

# AGY: инструменты ограничены песочницей
agy --sandbox --output-format json

# Codex: веб-поиск отключён, файловая система доступна только для чтения
codex exec --skip-git-repo-check -c 'web_search="disabled"' --sandbox read-only

У Claude инструменты отключены полностью. AGY запускается с ключом --sandbox. Запросы инструментов выполняются в терминальной песочнице, а действия за пределами её разрешений блокируются. Конвейер работает в неинтерактивном режиме, поэтому агент не может запросить у пользователя дополнительное разрешение.

В доступной мне версии Codex CLI штатного ключа для полного отключения всех инструментов я не нашёл. Проверки с параметрами -c tools.enabled=false, -c tools=[] и похожими вариантами требуемого режима не дали. Поэтому встроенный веб-поиск отключён через -c 'web_search="disabled"', а Codex запущен с --sandbox read-only. Инструменты у него остаются технически активными: агент может читать файлы и выполнять безвредные команды вроде echo. Запущенные команды и скрипты наследуют границы песочницы. В этой конфигурации запись и удаление файлов заблокированы.

Перевод книги — процесс долгий, и конвейер в любой момент может остановиться: закончатся пятичасовые или недельные лимиты, оборвётся соединение или вы сами нажмёте Ctrl+C. Каждый готовый фрагмент записывается отдельно. После перезапуска конвейер продолжает с последнего. Готовность перевода кусочка определяется по номерам абзацев внутри файла дополненных хэшами исходных абзацев. Нумерация может измениться, а хэши — нет. При исчерпании лимита конвейер ждёт сколько нужно и повторяет запрос. Процесс работает без присмотра. Можно на ночь ставить.

Копия каждого запроса к модели сохраняется на диск. Вместе с ответом записываются полный идентификатор модели, время запуска и статистика расхода денег/токенов, если доступна. Если перевод фрагмента получился странным, можно увидеть, что именно ушло модели и какая версия ответила.

Лимиты у агентов не резиновые, поэтому я добавил поддержку профилей. В них можно назначить резервные модели для каждой задачи: если лимит основной исчерпан, конвейер переключается на запасную, которая может принадлежать любому поддерживаемому агенту.

Опыт разработки с разными агентами

На всё ушло около двух недель разработки с ИИ, из них примерно десять дней активной работы. В основном я писал через Claude Code с Opus, а под конец, когда закончились лимиты, перешёл на AGY с Gemini Pro.

Сам agy оказался неожиданно приятным агентом. Он быстро работает, удачное цветовое оформление вывода помогает легко читать длинные сессии в терминале.

По моим ощущениям, Gemini напоминает карикатурного подчинённого из апокрифического указа Петра I:

Подчиненный перед лицом начальствующим должен иметь вид лихой и придурковатый, дабы разумением своим не смущать начальство.

Модель радостно рапортует об успехах и быстро лепит код, но с косячками. В моих задачах Opus даёт более качественный и глубокий результат, работая сильно медленнее.

Поддержка PDF на входе

Больше всего конвейер тестировался на маршруте EPUB → FB2. Всего через него прошло около двух десятков книг, которые мне присылали друзья и знакомые. На них отрабатывались нарезка, сохранение структуры, перенос иллюстраций, перевод, редактура и финальная сборка. Сейчас активно улучшаются два направления: вывод готовой книги в PDF и перевод книг, которые изначально пришли в PDF.

Среди присланных файлов попадались книги в PDF. И это оказалось отдельной болью, из-за которой разработка и затянулась. Каждый новый формат — EPUB, FB2, PDF — вскрывал недостатки конвейера, которые приходилось исправлять.

Сначала я хотел подключить локальную модель для разметки PDF. Но это сразу бы осложнило жизнь пользователям, так как не все имеют докер и свободные 15 ГБ. В итоге обошёлся встроенным функционалом Codex и Gemini. Причём Gemini размечала страницы чуть точнее, чем Codex, и позволяет в рамках плана Plus за $20 распознавать около 400 страниц в неделю, 1600 в месяц. Справедливости ради, такие запросы в Codex очень дешёвые и точные, если их делать моделью gpt-5.6-terra с усилием high.

Сейчас это работает так: скрипт преобразует страницы PDF в PNG, постранично отправляет их модели и получает распознанный текст в markdown с координатами иллюстраций, аннотациями, сносками и разметкой курсива. Потом текст преобразуется во внутренний формат и уходит на перевод.

В качестве примера переведённого pdf приведу «Optimal Timing for Superintelligence» от Ника Бострома. Вот перевод.

Скорость, деньги и параллелизм

На моих тестовых книгах сильные модели показали сопоставимое качество перевода при заметно разной скорости.

Связка

Время перевода одного фрагмента

Claude с Opus

до 10 минут

AGY с Gemini

около 1 минуты

Codex

от 2 до 5 минут

Это мои замеры для конкретной конфигурации. Время зависит от версии модели, размера фрагмента, нагрузки сервиса и настроек рассуждения. Я также прогнал перевод Gemini через Opus. Модель поставила ему 8 баллов из 10 и заключила, что такой текст «не стыдно показать другому». Оценка другой модели остаётся зависимой. Для дополнительной проверки её хватило.

Перевод требует строгой линейности. Литературную редактуру готовых фрагментов можно распараллелить. Тут нужна осторожность: мой аккаунт в AGY отнесли к России и заблокировали после перевода нескольких книг 5-ю агентами параллельно. Поэтому в профилях для agy сейчас используется --jobs 2.

В моём режиме работы подписки за 20 долларов на несколько книг не хватило: недельные лимиты закончились быстро. Очень полезен для перевода на тариф за 100 долларов. Сейчас в Claude акция с повышенными лимитами, так они пытаются удержать пользователей, пока не обладают достаточными мощностями. Типа хоть и медленно (до 10 минут на запрос), но зато много. Тариф за 100 долларов в любом агенте позволит перевести штук 20 книг.

Учитывая все факторы: скорость, цену и т.п. оптимален Antigravity CLI (подписка Gemini). Но есть одно «но»: строгая цензура. Для любого контента есть есть обнажёнка, насилие Gemini совершенно не годится и выдаёт текст непереведённым или отцензурированным, поэтому я включил такую конфигурацию профиля в конвейер agy-claude.conf:

# То же, что agy, но последним звеном — Opus через сам Claude Code.
# Другой поставщик: свой счёт лимитов и отказы не на тех же местах.
# Нужен установленный claude.
--agent agy
--translator gemini-3.1-pro-high,claude-opus-4-6-thinking,claude:claude-opus-5
--editor     gemini-3.1-pro-high,claude-opus-4-6-thinking,claude:claude-sonnet-5
--scout      gemini-3.1-pro-high,claude-opus-4-6-thinking,claude:claude-opus-5
--ocrmodel gemini-3.1-pro:high,claude-sonnet-4-6,claude:claude-sonnet-5:high,local:pdftotext
--formatter  gemini-3.7-flash-low,claude-sonnet-4-6,gpt-oss-120b-medium,claude:claude-sonnet-5
--ocrfixer   gemini-3.7-flash-low,claude-sonnet-4-6,gpt-oss-120b-medium,claude:claude-sonnet-5
--jobs 2

Финальный результат и сообщество

На выходе конвейер создаёт переведённый текст и отдельный файл со списком замечаний редактора: фрагментами, которые модель рекомендует проверить вручную. Итоговая команда показывает число замечаний и отдельно отмечает те, которые мешают собрать полную книгу. Если перевод готовится к публикации, этот список нужно разобрать полностью. При переводе для личного чтения список пригодится для отладки конвейера.

В начало готовой книги добавляется короткая справка: перевод машинный, каким конвейером и моделью он сделан, когда выполнен и какую редактуру прошёл. Сноски переводчика помечаются отдельно от авторских.

Ради проекта я зарегистрировался на PyPI и опубликовал там пакет booktrans. Установить конвейер можно обычной командой:

pipx install booktrans

Пример повторного запуска из клонированного репозитория: конвейер продолжит уже начатую работу, переведёт книгу на русский язык и запустит параллельные этапы в четыре потока.

uv run ./booktrans/bt_agy Bostrom_Nick_optimal.pdf --to ru --ui ru --jobs 4
Вывод команды
BookTrans 1.8.65 (12 августа 2026) — перевод книги целиком

  334 абзацев, 21745 слов, 22 кусков, 36 заголовков
  рабочая папка: Bostrom_Nick_optimal.work

  текстовый слой pdf сделан распознаванием (по тексту) — проходы предупреждены о дефектах

=== 1. Правка дефектов распознавания ===
  дефекты распознавания уже правлены: поправок 1 (удалите work/ocrfix.json, чтобы переделать)

  наложены поправки распознавания: 1

=== 2. Разведка: голоса, имена, термины ===
  разведка уже сделана (удалите work/scout.md, чтобы переделать)

=== 3. Перевод и сноски ===
[0017/0022] Bibliography               820 слов ... готово за 97 с [gemini-3.1-pro-high]
  переведено 1, уже было готово 21

=== 4. Литературная редактура ===
  параллельно в 4 потока
[0001/0022] Optimal Timing for Super НАЧАЛО     2 абз
[0002/0022] Introduction             НАЧАЛО    16 абз
[0003/0022] Evaluative framework     НАЧАЛО     6 абз
[0004/0022] A simple go/no-go model  НАЧАЛО    18 абз
[0001/0022] Optimal Timing for Super ГОТОВО   правок   1 из   2, за 21 с [gemini-3.1-pro-high]
[0005/0022] Incorporating time and s НАЧАЛО    12 абз
[0003/0022] Evaluative framework     ГОТОВО   правок   5 из   6, за 65 с [gemini-3.1-pro-high]
[0006/0022] Temporal discounting     НАЧАЛО    14 абз
[0004/0022] A simple go/no-go model  ГОТОВО   правок  11 из  18, за 97 с [gemini-3.1-pro-high]
[0007/0022] Diminishing marginal uti НАЧАЛО    14 абз
[0002/0022] Introduction             ГОТОВО   правок  11 из  16, за 116 с [gemini-3.1-pro-high]
[0011/0022] TABLE 12: Pre-deployment НАЧАЛО     9 абз
[0005/0022] Incorporating time and s ГОТОВО   правок  12 из  12, за 101 с [gemini-3.1-pro-high]
[0012/0022] TABLE 14: Difference in  НАЧАЛО     7 абз
[0007/0022] Diminishing marginal uti ГОТОВО   правок   6 из  14, за 45 с [gemini-3.1-pro-high]
[0013/0022] Distributional considera НАЧАЛО    32 абз
[0006/0022] Temporal discounting     ГОТОВО   правок  10 из  14, за 77 с [gemini-3.1-pro-high]
[0014/0022] Other-focused prudential НАЧАЛО     6 абз
[0012/0022] TABLE 14: Difference in  ГОТОВО   правок   3 из   7, за 48 с [gemini-3.1-pro-high]
[0015/0022] Theory of second best    НАЧАЛО    18 абз
[0011/0022] TABLE 12: Pre-deployment ГОТОВО   правок   6 из   9, за 62 с [gemini-3.1-pro-high]
[0016/0022] Conclusions              НАЧАЛО    15 абз
[0014/0022] Other-focused prudential ГОТОВО   правок   5 из   6, за 69 с [gemini-3.1-pro-high]
[0017/0022] Bibliography             НАЧАЛО    48 абз
[0016/0022] Conclusions              ГОТОВО   правок  14 из  15, за 67 с [gemini-3.1-pro-high]
[0018/0022] Appendix B: Details for  НАЧАЛО    17 абз
[0017/0022] Bibliography             ГОТОВО   правок   6 из  48, за 65 с [gemini-3.1-pro-high]
[0019/0022] Appendix C: Details for  НАЧАЛО    24 абз
[0015/0022] Theory of second best    ГОТОВО   правок  16 из  18, за 107 с [gemini-3.1-pro-high]
[0020/0022] Appendix D: Details for  НАЧАЛО    19 абз
[0018/0022] Appendix B: Details for  ГОТОВО   правок   9 из  17, за 53 с [gemini-3.1-pro-high]
[0021/0022] TABLE D1: Diminishing ma НАЧАЛО     7 абз
[0013/0022] Distributional considera ГОТОВО   правок  29 из  32, за 174 с [gemini-3.1-pro-high]
[0022/0022] 6. Comparison between CR НАЧАЛО    57 абз
[0019/0022] Appendix C: Details for  ГОТОВО   правок   8 из  24, за 45 с [gemini-3.1-pro-high]
[0021/0022] TABLE D1: Diminishing ma ГОТОВО   правок   1 из   7, за 25 с [gemini-3.1-pro-high]
[0020/0022] Appendix D: Details for  ГОТОВО   правок   9 из  19, за 47 с [gemini-3.1-pro-high]

    попытка 1: неизвестные идентификаторы ['s37.b0025', 's37.b0026'], пустые []
[0022/0022] 6. Comparison between CR ГОТОВО   правок  30 из  57, за 104 с [gemini-3.1-pro-high]
  отредактировано 19, уже было готово 3, правок 192

=== 5. Сборка книги ===
  наложена редактура: 357 абзацев
  сносок: 4
  собираю pdf через lualatex ... готово
собрано: Бостром Ник. Оптимальные сроки создания сверхразума - обыденные соображения о ныне живущих людях.pdf  (2.7 МБ, 334 абзацев)

=== 6. Проверки ===
1. ПОЛНОТА
   все 379 блоков переведены (правок редактуры: 357)
2. ЧИСЛА  (цифры оригинала обязаны остаться цифрами)
   ОШИБКА: цифры пропали — блоков: 3 (развёрнуты в слова?)
     s07.b0005  ['400']
     s10.b0007  ['1000', '10000']
     s11.b0002  ['10000', '1390']
   цифра вместо буквы (1 вместо I, 5 вместо S) — дефект распознавания, не в счёт: блоков 18
   в переводе появились цифры, которых не было — блоков: 7 (сверить не с чем, посмотрите)
     s05.b0005  ['3']
     s07.b0005  ['1400']
     s13.b0012  ['2']
     s21.b0006  ['21']
     s37.b0002  ['2']
     …и ещё 2
3. ДЛИНА АБЗАЦЕВ  (аномалия выдаёт пропуск)
   обычное отношение длин по этой книге: 1.06
   подозрительных: 1 (часто ложные)
     s37.b0021  (0.55)
4. НЕПЕРЕВЕДЁННЫЕ ФРАГМЕНТЫ
   блоков с письмом оригинала: 83 (имена и названия — обычно норма)
     s03.b0002: nickbostrom · https
     s05.b0002: Anyone · Builds · Everyone · Dies
     s07.b0008: cdot · quad · Rightarrow · lesssim
     s12.b0004: mathrm · pause
     s12.b0006: mathrm · pause
     s12.b0007: mathrm · pause
     s12.b0008: mathrm · pause
     s12.b0020: text · infty
     …и ещё 75
5. ССЫЛКИ НА СНОСКИ  (номер обязан остаться в переводе)
   все ссылки на месте (0)

ИТОГО замечаний: 3   (блокирующие — разделы 1, 2, 5 и 6)

ЗАМЕЧАНИЯ РЕДАКТОРА — кусков с замечаниями: 3
  кусок 0003: s06.b0003: заменил «некаузальные» на более принятый термин «акаузальные теории принятия решений»; стоит убедиться, что в оригинале именно acausal (а не, скажем, non-causal).
  кусок 0006: s09.b0003, s09.b0004: Одно предложение оказалось разорвано между двумя абзацами (очевидно, ошибка при распознавании). Разбивка на абзацы сохранена по инструкции, но части фразы выправлены так, чтобы они стыковались при чтении. Стоит убрать разрыв абзаца в сборке.
  кусок 0014: s19.b0004: Правка по догадке. В машинном переводе стояло «числом людей, которым он небезразличен» (то есть тех, кто заботится о человеке), но логика всего фрагмента и упоминание умерших друзей указывают, что речь идет об обратном — людях, о которых заботится сам человек. Я исправил на «число…
  полностью — в Bostrom_Nick_optimal.work/review.md

РАСХОД
  проход       модель                  запросов        $
  перевод      gemini-3.1-pro-high           21     0.00
  редактура    gemini-3.1-pro-high           22     0.00
  ИТОГО                                      43     0.00
  Разведка и разметка сюда не входят — они не пишут файлы кусков.
  На подписке сумма справочная: столько стоило бы по тарифам API.

По просьбам первых пользователей я добавил вывод в TeX: так можно получить аккуратную книжную вёрстку. Из того же исходника LuaLaTeX собирает PDF.

Мне бывает обидно, когда оплаченные лимиты сгорают в конце месяца из-за нехватки подходящих задач. А в это же время кому-то не хватает доступных запросов для перевода интересной книги. Чтобы свести этих людей вместе, я создал группу в Telegram — BookTrans. Там можно попросить о переводе, если у кого-то пропадают оплаченные лимиты в подписках.

Сам конвейер не решает вопрос с авторскими правами. Перед публикацией или распространением перевода нужно проверить условия лицензии и при необходимости получить разрешение правообладателя.

Уровень издательского перевода требует работы живых переводчика и редактора. Мою же исходную задачу конвейер решил: теперь я прочёл с большим удовольствием продолжение «Семиозиса», которого не было на русском.

© 2026 ООО «МТ ФИНАНС»

Комментарии (41)


  1. Emelian
    13.08.2026 14:53

    Переводить с помощью веб-версий LLM целую книгу – занятие для очень терпеливых.

    Можно использовать «Гугл-транслэйт», в режиме «Документ». Он переводит большие документы, например, для pdf – 10 Мб или 300 страниц. А 10 Мб в формате *.docx или *.xlsx содержат ну очень много текста. Так что, лично я спокойно и бесплатно перевожу большие книги, главное, чтобы они были не сканированными (хотя, «Гугл–транслэйт» поддерживает и изображения), а в цифровом виде.

    Что касается качества перевода, то, как по мне оно не плохое. Вот пример перевода отрывка из вашей книги:

    Пример перевода начала книги Сью Берк: «Узурпация»

    Ситуация была под контролем, но я теперь видела женщину, и она была безжизненной. Ее голова была покрыта ярко–красной кровью, пропитанной цветом драгоценных камней, которая сверкала на открытой коже. Завораживающе.

    Я всё ещё не понимала. Машины никого не сбивали. Я лежала беспомощной и в опасности на тротуаре и пыталась встать.

    «Пожалуйста, Мерси Омотола, стой спокойно», – сказала женщина, опустившись на колени рядом со мной. Видимо, её чип подсказал ей моё имя. Она взяла меня за руку.

    С тобой все будет в порядке, но, пожалуйста, позволь врачам делать свою работу. Тем временем ты наблюдала за происходящим с другой стороны улицы, оставаясь незамеченной в группе зевак. Ты меня не знала, Мерси, и я тебя не знала.

    Но со временем я всё поняла о тебе. Что ты чувствовала, наблюдая за происходящим? Облегчение? Молодая женщина, которая могла подвергнуть тебя серьёзной опасности, была мертва. Ты испытывала раскаяние? Ужас? Возможно, её смерти будет недостаточно.

    Это было ваше первое убийство? Я до сих пор не знаю, испытывали ли вы боль из-за того, что пострадала невинная жертва, то есть я. Другие незнакомцы были очень добры ко мне тем утром. Сначала те, кто бросился на помощь, затем врачи, которые увезли меня и бережно ухаживали за моим плечом.

    Как выяснилось, сломана ключица. Меня отвезли в ближайшую клинику и тщательно осмотрели. С меня сняли окровавленную одежду и накрыли жесткой белой бумажной больничной рубашкой.

    Я спросила о молодой женщине, и они ответили, что не знают, с мрачной нерешительностью, которая говорила о том, что они всё-таки знают. И эта новость оказалась именно той, чего я боялась. Я закрыла глаза и помолилась о благословении для её души и для всех тех, кто был так добр и отзывчив.

    Я благодарила судьбу за свою жизнь, хотя и испытывала некоторую растерянность от этого благословения. Кто-то постучал в дверь нашей комнаты, отгороженную занавесками. «Это Нгози», – объявила она своим хриплым голосом.

    Я знала, что она придёт. Я так внимательно прислушивалась к своему внутреннему голосу. Ты в порядке, Мерси? Доктор посмотрела на меня, предлагая ответить по моему желанию, и я сказала: «Входите».

    Я сломала кость, но, похоже, это всё. Она вышла из-за занавесок. …

    Лично меня интересует не столько перевод иностранных книг, сколько создание двуязычных книг, с короткими фразами, переведенных максимально точно, безо всякой там литературной отсебятины.

    Чтобы этого достичь, я предпочитаю использовать перевод «Гугл-транслэйта» ,в режиме «Текст». Там менее «литературен» и более точен. Однако, в этом режиме присутствует ограничение на 5000 символов. Для больших текстов переодить такими порциями – весьма утомительно.

    Поэтому, мы пишем скрипт на Питоне, который отправляет автоматически запросы в этом режиме, не превышая допустимый лимит. Кроме того, выставляем задержку более 10 секунд между запросами, чтобы не нарваться на отказ сервера. Мне вполне хватает 11 секунд.

    Затем, другие скрипты форматируют оригинальный текст и перевод на короткие фразы и сопоставляют их между собой.

    Да, без ручной корректировки здесь не обойтись, но, с другой стороны, если нет платной ИИ-подписки и ты изучаешь иностранный язык, то лишняя возня с текстом – только на пользу. А отдельные спорные моменты (с учетом форматирования текста) можно заново перевести, вручную в том же Гугле.

    В общем, «дешево и сердито»! :)

    P.S. Упомянутая книга, как по мне, морально тяжелая. Что, впрочем, не удивительно. Ибо найти лёгкую, не напряжную, но красивую иностранную прозу, на тему бытового романа или романтических отношений, без «страстей-мордастей» – проблема еще та! Ведь красивым слогом зацепить трудно, а чернухой – на раз-два!


    1. inetstar Автор
      13.08.2026 14:53

      Спасибо за то, что поделились опытом!
      А epub, защищённые авторским правом, переводит?


      1. Emelian
        13.08.2026 14:53

        А epub, защищённые авторским правом, переводит?

        Непосредственно, ни *.epub, ни *.fb2 и другие подобные форматы, «Гугл-транслэйт» не переводит, Хоть, с авторским правом, хоть без него.

        Для этого вы просто копируете содержимое электронной книги в буфер обмена (либо используете бесплатные онлайн-сервисы для преобразования форматов) и полученный текст сохраняете в любом перечисленном виде: *.pdf, *.xlsx либо *.docx. Его и переводите, в режиме «Документ». Но, я использую, чаще всего, режим «Текст», поэтому, работаю с *.txt файлами, которые обрабатываю и загружаю с помощью скриптов Питона.


    1. teecat
      13.08.2026 14:53

      Также пользуюсь гуглом, для двуязычного чтения научпопа в дорогу более чем. Но к сожалению не нашел удобного сервиса по переводу отсканированных журналов, размеры которых превышают 10мб


      1. inetstar Автор
        13.08.2026 14:53

        Можно попробовать моим конвеером. Если в pdf отсканирвоать


      1. Emelian
        13.08.2026 14:53

        Но к сожалению не нашел удобного сервиса по переводу отсканированных журналов, размеры которых превышают 10мб

        Со сканами лучше всего работать с помощью «FineReader Corporate».

        Если у вас файл формата *.djvu или не цифрового *.pdf, то с помощью доступных бесплатных утилит эти книги преобразуем в набор изображений, с которыми «ФайнРидер» прекрасно работает.

        Поскольку 100%-ная точность при этом не гарантируется, то я использую свою неопубликованную программу «МедиаТекст», для ручной корректировки, не только текста изображений, но и видео:

         Программа для ручного распознавания текста на изображениях
        Программа для ручного распознавания текста на изображениях
        Программа для ручного распознавания встроенных субтитров видео
        Программа для ручного распознавания встроенных субтитров видео

        Затем, полученный текст переводим Гуглом.


    1. inetstar Автор
      13.08.2026 14:53

      Да, сейчас это стандартный западный приём — начать с чего-то шокирующего. Чтобы, типа, зацепить...


      1. Emelian
        13.08.2026 14:53

        Да, сейчас это стандартный западный приём – начать с чего-то шокирующего. Чтобы, типа, зацепить…

        Ну, да! Хотя, как я заметил по классике, сильные авторы тоже не брезгуют «чернухой», но, они её переносят, хотя бы, в середину книги, а начинать, обычно, предпочитают благостно…

        Однако, для целей изучения языка, «развод на эмоции», особенно отрицательные, только раздражает. Если из сотни книг, найдешь парочку подходящих, то и хорошо…


  1. Gonchar_POTT
    13.08.2026 14:53

    "Наткнувшись в сети на большую библиотеку англоязычных книг с новинками в epub, где были эти книги"

    Поделитесь, пожалуйста, ссылкой.


    1. inetstar Автор
      13.08.2026 14:53

      Отправил в личку


      1. 1win1
        13.08.2026 14:53

        А будьте добры - мне тоже отправьте. Спасибо.


        1. inetstar Автор
          13.08.2026 14:53

          Готово


          1. Beltran
            13.08.2026 14:53

            Тоже хотел бы ознакомиться


    1. vitalii_m_naumov
      13.08.2026 14:53

      И мне тоже, если не трудно


      1. inetstar Автор
        13.08.2026 14:53

        ОТправил


  1. Urgen19
    13.08.2026 14:53

    Некоторое время назад наваял идеологически схожий проект. работает на бесплатных ключах от гугла. https://github.com/UrgenProchnoff/prozetta/blob/main/README.ru.md Топикстартеру успехов.


  1. rPman
    13.08.2026 14:53

    поделитесь пожалуйста хорошим отрывком (пару глав) именно фантастики и оригиналом, для сравнения.


    1. inetstar Автор
      13.08.2026 14:53

      1. CitizenOfDreams
        13.08.2026 14:53

        Это, конечно, на голову выше машинных переводов образца прошлого века, но читать в таком виде художественную литературу - это примерно как любоваться видами природы по черно-белым фотографиям.


        1. inetstar Автор
          13.08.2026 14:53

          Плюс конвеера в том, что по мере развития моделей, качество поднимается автоматически.


          1. CitizenOfDreams
            13.08.2026 14:53

            А у меня претензии не к качеству перевода, там придраться не к чему при всем желании. Если бы с таким качеством переводили техническую документацию, это было бы идеально.

            Но перевод художественного произведения - это не просто трансляция с языка A на язык B. Это даже больше чем рерайт - скорее написание заново, только в строго заданных оригиналом рамках.


  1. JackRowsen
    13.08.2026 14:53

    Интересная тема именно с использованием агентов.
    Есть давно уже развивающийся проект по автопереводу.
    Но там уровень вхождения/применения весьма высок.


  1. Ogoun
    13.08.2026 14:53

    Делаю тоже самое, но на локальных моделях, и тоже из за книги (захотел перевести полностью блуждающий трактир, 12 мегабайт чистого текста). Глоссарий заложен с первой версии, сейчас он еще и таймлайн включает, то есть как меняется что либо со временем, у героя может смениться имя, или речь. Изначально делал дополнительный шаг для обучения лоры на существующем переводе, чтобы подхватывать стиль переводчика, но сейчас это выкинул. Также вначале использовал gemma 4 и qwen, сейчас остался только qwen, который работает в нескольких ролях (переводчик, корректор, оценщик качества и т.п.). Пока основной минус - время, на построение глоссария - 3 недели и пара месяцев на перевод. Но это на слабом железе, если арендовать H200, то за трое суток по расчетам должно отработать всё, в ближайших планах это проверить.


    1. jskake
      13.08.2026 14:53

      А расскажите подробно как вы это делаете? По кусочкам как автор или весь текст грузите в промпт, вместе с глоссарием? Или у вас какая то софтина работает в связке с локальной моделью?


  1. gshamshurin
    13.08.2026 14:53

    Если вдруг кто забыл, была такая программа Promt. Так вот, к ней прикрутили ИИ и теперь даже на стандартном словаре она переводит специализированную литературу с достаточным качеством.
    Далее, Авито уже несколько лет как полно специализированных бумажных книг на русском языке, по которым не сразу и поймёшь что переведено машинным способом и даже не вычитано. (Примерно на двадцатой странице книги про стрельбу из высокоточной винтовки внезапно появляется... ПРАЩА. Оказывается, слово sling это и ремень и праща.).


  1. Shado_vi
    13.08.2026 14:53

    кроме слов существуют устойчивые словосочетания, выражения и предложения.
    нередко можно найти материалы от авторов по своим произведениям, включая форматов вопрос-ответ.
    в качестве продвинутых систем знаний можут выступать векторно-графовые базы данных.
    кроме того в качестве полезных данных могут выступать уже переведённые прошлые книги серии. там уже получаются пары книга на исходном языке + книга в переводе.

    кто то в своих проектах переводе книг это учитывает?


    1. remzalp
      13.08.2026 14:53

      Для коротких случаев можно глоссарий с типовыми рекомендациями подгружать, я такое сделал например просто в AGENTS.md, который агент читает при выполнении запроса


    1. inetstar Автор
      13.08.2026 14:53

      Прошлые книги нужно сжимать и подавать на вход, там в моём конвейере есть ключ для этого. Однако я столкнулся с тем, что предыдущие книги Сью Берк были переведены неверно. В оригинале были разумные деревья женского пола с мужскими именами - и это была фишка, а переводчик придумала для них женские имена. Так что для полного единства серии нужно переводить её всю или мириться с недостатками и выборами предыдущего переводчика.


      1. Shado_vi
        13.08.2026 14:53

        сжатие это для меня антипатерн для промежуточных данных.
        по сути это loss версия данных и дальнейшее использование их может(и часто) приводить к очень неприятным сюрпризам.
        теряются много детали которые как раз можно было бы подчерпнуть для повышения качества.


    1. Shado_vi
      13.08.2026 14:53

      вообще ещё существуют игра слов и и специфические вещи.
      например ту же игру слов могут обыграть в рамках произведения и даже главы по разному.
      тупая нейронка скорей всего это сгладит. то есть утеря художественной ценности.

      ещё нужно учитывать что большая часть весов нейронок/моделей обучена на переводах с потерями. качественные переводы в общей массе переводов малы и с учётом что модели смещены к среднему выходит что мы получаем по умолчанию переводы с потерями.


  1. MkIV007
    13.08.2026 14:53

    отличная идея. Но денег нету на это :). Надо как то изворачиваться с локальными моделяи :(


  1. Siemargl
    13.08.2026 14:53

    Переводил технические статьи и сам и с помощью ИИ. Туповатое оно - выбираешь обычно из 3-5 вариантов каждого словосочетания наиболее подходящий. Сама ИИ неверно угадывает.

    Ну и пример перевода в статье это подтверждает. Результат как резиновые сосиски.

    Часто при чтении такого "перевода", чтобы понять суть, приходится в уме транслировать на язык оригинала и обратно уже с правильным вариантом.

    Но если совсем не знаешь язык - сойдет.


    1. inetstar Автор
      13.08.2026 14:53

      Тут ещё нужно разобраться какая модель лучше переводит. У меня их три (клод Opus, гемини и сол) и это ещё непонятно. Возможно, это не лучший вариант из тех, что может дать конвейер.


  1. Void-Cowboy
    13.08.2026 14:53

    занимался подорбным

    точнее у меня уже года два как есть cli тулза для себя что как раз собирает словари, переводит чанками, не выдумывает как переводить имена личные и тд. Кривое но работает

    пол года назад думал таки упаковать красиво в gui и опубликовать но как оказалось на сейчас, то что еще год назад требовало алгоритмов, базы данных и перепроверок сейчас можно скинуть на агента

    то есть на сейчас что бы переводить книги достаточно просто правильно промт написать, используя кодекс или иной иную систему, которая доступна сейчас каждому без каких либо знаний

    грустно но одновременно и здорово - прогресс


    1. rPman
      13.08.2026 14:53

      фактически - промпт, новые программы


      1. Void-Cowboy
        13.08.2026 14:53

        я бы скорее назвал новым питоном)


        1. rPman
          13.08.2026 14:53

          в этой аналогии - llm это 'язык программирования' (хотя правильно компилятор), а вот промпт - это именно программа.

          Если совсем душнить, то программой является пайплайн, в частном случае это набор агентов и промпты к ним.


  1. tntnt
    13.08.2026 14:53

    Можете выложить перевод на флибусту?


    1. inetstar Автор
      13.08.2026 14:53

      Это сложно делается? Никогда не делал


      1. tntnt
        13.08.2026 14:53

        Я тоже сам еще ни разу это не делал, но вот тут подробная инструкция https://flibusta.is/node/9870, и вроде все довольно просто - создать account, подождать пару дней и залить книгу в формате fb2 (если в этом формате трудно, то как txt или rtf или doc).


  1. Daddy_Cool
    13.08.2026 14:53

    Охо-хо! Переводил как-то книгу - решил сделать точный перевод, ну и... приходилось гуглить и списываться с автором, потому что другая языковая культура и типа всё понятно, но у нас так не говорят. Ну и плюс литературные проблемы - хочется же чтобы сочетания слов передавали мысль оригинала.