Генератор электронных книг на базе 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 с вашим ключом.