Генератор электронных книг на базе DeepSeek: от идеи до EPUB за несколько шагов

Современные большие языковые модели (LLM) превратили создание электронных книг из трудоёмкого процесса в автоматизированный конвейер. DeepSeek, с его доступным API и поддержкой длинного контекста, становится отличной базой для подобных инструментов. В отличие от универсальных чат-ботов, специализированный генератор книг решает три ключевые задачи: структурирование (разбивка на главы и разделы), связность (удержание сюжетной линии и фактов) и форматирование (сборка в валидный EPUB). Существующие open-source проекты, такие как AI_NovelGenerator и fabricatio-novel, демонстрируют, что LLM можно успешно использовать для генерации длинных текстов с автоматическим сохранением контекста и даже вставкой иллюстраций. DeepSeek поддерживает Chat Completions API, совместимый с форматом OpenAI, что позволяет легко интегрировать его в Python-скрипты. Ниже — компактный, но рабочий прототип такого генератора.


---


🐍 Код генератора электронных книг (Python)


```python

import os

import requests

from ebooklib import epub


DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")

API_URL = "https://api.deepseek.com/chat/completions"


def generate_chapter(prompt: str, model="deepseek-chat") -> str:

"""Отправляет запрос к DeepSeek и возвращает сгенерированный текст главы."""

headers = {

"Authorization": f"Bearer {DEEPSEEK_API_KEY}",

"Content-Type": "application/json"

}

payload = {

"model": model,

"messages": [

{"role": "system", "content": "Ты — профессиональный писатель. Пиши связно, образно и структурно."},

{"role": "user", "content": prompt}

],

"temperature": 0.8,

"max_tokens": 4096

}

response = requests.post(API_URL, headers=headers, json=payload)

response.raise_for_status()

return response.json()["choices"][0]["message"]["content"]


def create_ebook(title: str, author: str, chapters: list[str], filename="output.epub"):

"""Собирает список текстов глав в файл EPUB."""

book = epub.EpubBook()

book.set_identifier("id123456")

book.set_title(title)

book.set_language("ru")

book.add_author(author)


epub_chapters = []

for i, text in enumerate(chapters, 1):

ch = epub.EpubHtml(title=f"Глава {i}", file_name=f"chap_{i}.xhtml", lang="ru")

ch.content = f"<h1>Глава {i}</h1><p>{text.replace(chr(10), '</p><p>')}</p>"

book.add_item(ch)

epub_chapters.append(ch)


book.toc = tuple(epub_chapters)

book.spine = ["nav"] + epub_chapters

book.add_item(epub.EpubNcx())

book.add_item(epub.EpubNav())


epub.write_epub(filename, book)

print(f"✅ Книга сохранена: {filename}")


if __name__ == "__main__":

# Пример использования

book_title = "Хроники цифрового мира"

book_author = "AI-Автор"

outline = [

"Напиши первую главу фантастического романа о мире, где книги обладают сознанием.",

"Напиши вторую главу: герой обнаруживает библиотеку, которая меняет реальность.",

"Напиши третью главу: конфликт с хранителем библиотеки и неожиданный финал."

]


generated = []

for i, prompt in enumerate(outline, 1):

print(f"⏳ Генерация главы {i}...")

generated.append(generate_chapter(prompt))


create_ebook(book_title, book_author, generated)

```


🔍 Как это работает


1. Вызов DeepSeek — функция generate_chapter формирует запрос к https://api.deepseek.com/chat/completions с ролью «писатель» и пользовательским заданием. Параметры temperature и max_tokens регулируют креативность и длину ответа.

2. Сборка EPUB — библиотека ebooklib создаёт контейнер, добавляет метаданные, разбивает текст на XHTML-главы и генерирует навигационное оглавление (toc).

3. Масштабирование — для реальной книги стоит добавить сохранение промежуточных результатов, проверку связности (через повторные запросы к LLM) и генерацию обложки, как это делают зрелые проекты вроде fabricatio-novel.


Совет: перед запуском установите зависимости: pip install requests ebooklib и задайте переменную окружения DEEPSEEK_API_KEY с вашим ключом.