Перевод книг нейросетью: как сохранить стиль и имена на сотнях страниц

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

5 мин · · автоматизация · API-ключи

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

Почему «целиком в окно» и «по главам» не решают задачу

У моделей в каталоге контекст до 1M токенов, и можно подумать, что книгу можно отправить одним запросом. Практических препятствий два:

  • длина ответа ограничена параметром max_tokens и самой моделью, книгу целиком в один ответ вы не получите;
  • если что-то пошло не так на середине, вы теряете весь запрос и платите за него.

Поэтому текст режут на куски по 2–4 тысячи токенов и переводят по порядку. Тогда встаёт задача согласованности между кусками, и её решают три приёма.

Подготовка: текст из PDF или EPUB

Для перевода книг PDF нужен обычный текст. Если PDF сделан из текста, достаточно библиотеки вроде pypdf; если это скан, понадобится распознавание (OCR) или модель с поддержкой картинок, см. как распознать PDF нейросетью. После извлечения почистите колонтитулы, номера страниц и переносы слов в конце строк, иначе модель переведёт и их. Проверьте, что абзацы не склеились.

Резать текст лучше по границам абзацев:

bash
def split_chunks(text: str, max_chars: int = 9000) -> list[str]:
    chunks, cur = [], ""
    for para in text.split("\n\n"):
        if cur and len(cur) + len(para) > max_chars:
            chunks.append(cur)
            cur = ""
        cur += para + "\n\n"
    if cur.strip():
        chunks.append(cur)
    return chunks

9 000 символов английского текста соответствуют примерно 2 000–3 000 токенов; точное число замерьте через подсчёт токенов.

Приём 1. Глоссарий: имена, термины, обращения

Глоссарий — файл с жёсткими соответствиями. Он отвечает на вопросы, которые модель иначе решает каждый раз по-новому:

bash
{
  "names": {"Eleanor Vance": "Элеонора Вэнс", "Hill House": "Хилл-Хаус"},
  "terms": {"the Ministry": "Министерство", "ward": "подопечный"},
  "address": "персонажи на «вы», кроме Элеоноры и Люка между собой",
  "tone": "сдержанная проза, длинные периоды, без современного сленга"
}

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

Приём 2. Хвост предыдущего перевода

В каждый запрос кладём последние 1–2 абзаца уже переведённого текста и просим продолжить в том же стиле. Это держит интонацию и закрывает разрывы на границе кусков. Хвост должен быть небольшим: каждый его токен вы оплачиваете в каждом запросе.

Приём 3. Кэш промпта для неизменяемой части

Инструкция и глоссарий одинаковы во всех запросах. Это идеальный кандидат для кэша: в первом запросе префикс записывается, в остальных читается по сниженной цене. Для Claude скидку за кэш даёт Anthropic-формат (/v1/messages), поэтому берём официальный Anthropic SDK с base URL без /v1:

bash
import os, json, pathlib
import anthropic

client = anthropic.Anthropic(
    base_url="https://api.zukko.pro",
    api_key=os.environ["ZUKKO_API_KEY"],
)
MODEL = "claude-sonnet-5-5"

glossary = pathlib.Path("glossary.json").read_text(encoding="utf-8")
SYSTEM = (
    "Ты литературный переводчик с английского на русский. "
    "Переводи точно, сохраняя тон, ритм и абзацную структуру. "
    "Имена и термины бери строго из глоссария. Ничего не добавляй и не пропускай. "

Скрипт сохраняет каждый кусок в отдельный файл и при повторном запуске пропускает готовое, так что обрыв сети не заставит платить дважды. В поле cache_read_input_tokens видно, сработал ли кэш; если там всегда ноль, префикс может быть короче минимального размера для кэширования, которое указано в документации Anthropic. Справка по Python: Python SDK.

Расчёт: сколько стоит книга

Допущения для примера (цены на 18 октября 2026, за 1M токенов): книга около 120 000 токенов оригинала, 40 кусков по 3 000 токенов. Кэшируемый префикс (инструкция плюс глоссарий) 4 000 токенов. Хвост предыдущего перевода плюс кусок: 5 000 свежих токенов на запрос. Русский текст занимает больше токенов, чем английский, берём выход 6 000 токенов на кусок (в 2 раза больше входа). Это допущения: у вашей книги числа будут другими, замерьте их на первом куске.

Итого: свежий вход 40 × 5 000 = 200 000, чтение кэша 39 × 4 000 = 156 000, запись кэша 4 000, выход 40 × 6 000 = 240 000.

МодельФормулаИтого
claude-sonnet-5-5 (0.4 / 2; кэш 0.05 / 0.5)0.2 × 0.4 + 0.156 × 0.05 + 0.004 × 0.5 + 0.24 × 2 = 0.08 + 0.0078 + 0.002 + 0.48около $0.57
claude-opus-5-5 (0.8 / 4; кэш 0.08 / 1)0.2 × 0.8 + 0.156 × 0.08 + 0.004 × 1 + 0.24 × 4 = 0.16 + 0.01248 + 0.004 + 0.96около $1.14
deepseek-v4.1-flash (0.013 / 0.038; чтение кэша 0.013)(0.2 + 0.156 + 0.004) × 0.013 + 0.24 × 0.038 = 0.00468 + 0.00912около $0.014

Без кэша Sonnet вышел бы на $0.62: вход 0.36 × 0.4 = $0.144 плюс выход $0.48. Видно, что в переводе доминирует выход, поэтому кэш даёт скромную экономию, а главный рычаг цены — выбор модели. Для DeepSeek запись кэша отдельно не списывается, в расчёте она включена в вход по цене входа для простоты. Какая модель переводит лучше, цифры не скажут: переведите один и тот же отрывок на двух-трёх моделях и сравните глазами, лучше ещё и отдайте носителю языка. О выборе модели по цене: индекс силы моделей.

Проверка качества на сотнях страниц

  • Сквозная проверка имён: выгрузите весь перевод и поищите по тексту варианты, которых нет в глоссарии (например, «Элинор» вместо «Элеонора»).
  • Выборочная сверка: каждый десятый кусок читайте рядом с оригиналом, обращая внимание на пропущенные абзацы.
  • Сравнение длины: резкое отличие длины перевода и оригинала указывает на пропуск или добавленный текст.
  • Второй проход: попросите модель вычитать готовую главу на предмет согласованности с глоссарием, не пересказывая сюжет.

Авторское право

Перевод книги — это производное произведение, и права на него регулируются законом страны и условиями правообладателя. Мы не юристы и не даём юридических советов. Для своего учебного или личного чтения условия одни, для публикации или распространения другие. Безопасные варианты: произведения, перешедшие в общественное достояние, ваши собственные тексты, книги, переводить которые вам разрешил правообладатель. Если книга защищена, до публикации выясните права.

Частые вопросы

Какая нейросеть лучше переводит книги?

Универсального ответа нет. Сравните 2–3 модели на одном отрывке в 2–3 страницы и выберите по результату и цене из расчёта выше.

Как сохранить единое звучание имён на сотнях страниц?

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

Можно ли перевести PDF целиком?

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

Как начать?

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

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.