Sistem multi-agent yang bisa membuat buku apapun secara otomatis menggunakan OpenRouter API. Mendukung buku pemrograman, jaringan komputer, DevOps, database, bisnis, self-help, dan tutorial. Bisa dijalankan via terminal (CLI) maupun Telegram Bot.
- 🤖 Multi-Agent Pipeline — 5 agen bekerja berurutan (sequential)
- 📖 Generic — bisa buat buku bertopik apapun dari satu judul
- 🔍 Preview & Revisi — lihat & edit struktur bab sebelum buku dibuat
- 💻 Mode Pemrograman — kode runnable, syntax highlighting, output contoh
- 🌐 Mode Jaringan — diagram ASCII topologi, perintah CLI, lab praktik
- 🐳 Mode DevOps — Dockerfile, YAML, config file lengkap
- 💾 Checkpoint per bab — lanjut dari bab terakhir jika terjadi error
- 📱 Telegram Bot — buat buku langsung dari chat Telegram
- 📄 Output PDF — dikirim ke Telegram via pandoc
- 📝 Output Markdown — disimpan di folder
output/ - 🔁 Auto retry — 5x retry dengan backoff jika koneksi terputus
- 💰 Murah — estimasi ~$0.20–$0.50 per buku
Judul Buku (input)
│
├─── /preview → Generate Outline → Tampilkan ke user
│ │
│ /revisi → Revisi Outline (bisa berulang)
│ │
│ /buat → Konfirmasi pakai outline yang sudah disetujui
│
└─── /buat [judul] → Langsung ke pipeline tanpa preview
│
▼
┌──────────────────────────────────────────────────────┐
│ │
│ Agent 1: Outline Planner │
│ ├─ Analisis judul → deteksi jenis buku │
│ ├─ Tentukan jumlah bab (dari judul / default 7) │
│ └─ Hasilkan: struktur bab, book_type, tech_stack │
│ ↓ │
│ Agent 2: Research Agent │
│ ├─ Kumpulkan materi tiap bab (sequential) │
│ ├─ Buku coding → kode lengkap & runnable │
│ ├─ Buku jaringan → diagram ASCII + CLI command │
│ └─ Hasilkan: key_concepts, code_examples, diagrams │
│ ↓ │
│ Agent 3: Chapter Writer × N bab │
│ ├─ Tulis konten per bab satu per satu │
│ ├─ Checkpoint disimpan per bab │
│ ├─ MODE programming → kode + output + latihan │
│ ├─ MODE networking → diagram + CLI + lab praktik │
│ └─ Hasilkan: konten Markdown lengkap per bab │
│ ↓ │
│ Agent 4: Editor & Reviewer × N bab │
│ ├─ Review & perbaiki tiap bab (sequential) │
│ ├─ Checkpoint disimpan per bab │
│ ├─ Cek: kode valid, diagram akurat, command benar │
│ └─ Hasilkan: bab yang sudah disempurnakan │
│ ↓ │
│ Agent 5: Formatter │
│ ├─ Susun cover, kata pengantar, daftar isi │
│ ├─ Simpan → output/[slug].md │
│ └─ Konversi → output/[slug].pdf (via pandoc) │
│ │
└──────────────────────────────────────────────────────┘
OUTPUT:
output/[slug].md ← selalu dibuat, disimpan lokal
output/[slug].pdf ← dibuat jika pandoc tersedia, dikirim ke Telegram
Semua agen berjalan BERURUTAN — setiap agen menunggu agen sebelumnya selesai sebelum mulai bekerja.
ai-book-writer/
│
├── main.py ← CLI entry point
├── bot.py ← Telegram Bot entry point
├── pipeline.py ← Logic pipeline (dipakai CLI & Bot)
├── telegram_notifier.py ← Helper kirim progress & PDF ke Telegram
│
├── requirements.txt
├── .env.example ← Template konfigurasi
├── .env ← Buat sendiri (tidak di-commit ke Git)
├── .gitignore
│
├── config/
│ └── settings.py ← Model AI, token, timeout, path output
│
├── agents/
│ ├── base_agent.py ← Base class (HTTP + retry 5x + backoff)
│ ├── outline_agent.py ← Agent 1: buat struktur & deteksi jenis buku
│ ├── researcher_agent.py ← Agent 2: kumpulkan materi per bab
│ ├── writer_agent.py ← Agent 3: tulis konten (mode: coding/networking/umum)
│ ├── editor_agent.py ← Agent 4: review & perbaiki per bab
│ └── formatter_agent.py ← Agent 5: susun .md + konversi .pdf
│
├── handlers/ ← Telegram command handlers
│ ├── auth.py ← Whitelist user ID
│ ├── start_handler.py ← /start
│ ├── preview_handler.py ← /preview & /revisi
│ ├── buat_handler.py ← /buat & /batal
│ ├── status_handler.py ← /status
│ └── message_handler.py ← Pesan biasa bukan command
│
├── bot.log ← Log error otomatis (tidak di-commit)
│
└── output/ ← Hasil buku & checkpoint (tidak di-commit)
├── [slug-judul]/
│ ├── ckpt_outline.json ← Checkpoint step 1
│ ├── ckpt_research.json ← Checkpoint step 2
│ ├── ckpt_chapter_1.json ← Checkpoint bab 1 (writer)
│ ├── ckpt_chapter_2.json ← Checkpoint bab 2 (writer)
│ ├── ckpt_chapters.json ← Semua bab (writer selesai)
│ ├── ckpt_edited_1.json ← Checkpoint bab 1 (editor)
│ ├── ckpt_edited_2.json ← Checkpoint bab 2 (editor)
│ └── ckpt_edited.json ← Semua bab (editor selesai)
├── [slug-judul].md ← ✅ File Markdown (selalu dibuat)
└── [slug-judul].pdf ← ✅ File PDF (jika pandoc tersedia)
| File | Dibuat | Dikirim ke Telegram | Keterangan |
|---|---|---|---|
output/[slug].md |
✅ Selalu | ❌ Tidak | Disimpan lokal |
output/[slug].pdf |
✅ Jika pandoc ada | ✅ Ya | Dikirim ke chat |
Jika pandoc tidak tersedia, file .md yang dikirim ke Telegram sebagai fallback.
| Agent | Model | Max Tokens | Keterangan |
|---|---|---|---|
| Outline | deepseek/deepseek-chat |
6000 | Deteksi & struktur buku |
| Research | deepseek/deepseek-chat |
4000 | Materi teknis akurat |
| Writer | deepseek/deepseek-chat |
6000 | Menulis konten panjang |
| Editor | deepseek/deepseek-chat |
6000 | Review & perbaiki |
| Formatter | google/gemini-2.0-flash-001 |
1000 | Susun file final |
Estimasi biaya per buku: ~$0.20 – $0.50 Ganti model kapan saja di
config/settings.py
base_agent.py dilengkapi retry otomatis untuk menangani koneksi tidak stabil:
| Setting | Nilai | Keterangan |
|---|---|---|
| Retry count | 5x | Coba ulang maksimal 5 kali |
| Retry delay | 10s, 20s, 30s, 40s | Backoff bertahap |
| Read timeout | 360s | 6 menit (untuk bab panjang) |
| Connect timeout | 20s | Koneksi awal |
Khusus ReadError (koneksi drop saat baca response), jeda antar retry lebih lama
agar server sempat recover.
git clone https://github.com/timposulabs/ai-book-writer.git
cd ai-book-writerpip install -r requirements.txt# Windows → download installer:
# https://pandoc.org/installing.html
# macOS
brew install pandoc
# Ubuntu / Debian
sudo apt install pandoc texlive-xetexPandoc opsional. Jika tidak diinstall, output tetap bisa dibuat dalam format
.md.
cp .env.example .envBuka .env dan isi:
# Wajib untuk semua mode
OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxx
# Wajib hanya jika pakai Telegram Bot
TELEGRAM_BOT_TOKEN=123456789:AAF-xxxxxxxxxx
TELEGRAM_ALLOWED_USER_IDS=987654321Dapatkan OpenRouter API key di: https://openrouter.ai/keys
# Mode interaktif — akan ditanya judul
python main.py
# Langsung dengan judul sebagai argumen
python main.py "7 Hari Belajar Docker"
python main.py "12 Bab Belajar Java untuk Pemula"
python main.py "Panduan Lengkap Jaringan Komputer"- Buka Telegram, cari @BotFather
- Kirim
/newbot→ ikuti instruksi → salin token - Cari @userinfobot → kirim pesan → salin User ID kamu
- Isi
.env:TELEGRAM_BOT_TOKEN=123456789:AAF-xxxxxxxxxx TELEGRAM_ALLOWED_USER_IDS=987654321
python bot.py
# Tekan Ctrl+C untuk berhenti| Command | Fungsi |
|---|---|
/start |
Panduan & daftar command |
/preview [judul] |
Generate & tampilkan struktur bab |
/revisi [instruksi] |
Revisi outline setelah /preview |
/buat [judul] |
Langsung buat buku tanpa preview |
/buat |
Konfirmasi & mulai buat buku setelah /preview |
/status |
Cek apakah ada proses yang sedang berjalan |
/batal |
Batalkan proses atau preview yang sedang aktif |
Kamu: /preview 12 Bab Belajar Java untuk Pemula
Bot: ⏳ Sedang generate struktur buku...
Bot: 📋 Preview: "12 Bab Belajar Java untuk Pemula"
🎯 Jenis : programming (Java)
👤 Target: Pemula tanpa pengalaman coding
📖 Bab 1: Pengenalan Java & Setup
📖 Bab 2: Tipe Data & Variabel
...
📖 Bab 12: Proyek Akhir
✏️ Ingin merevisi? /revisi [instruksi]
✅ Setuju? /buat
─────────────────────────────────────
Kamu: /revisi tambahkan materi exception handling di bab 4
Bot: ✏️ Outline telah direvisi!
─────────────────────────────────────
Kamu: /buat
Bot: ✅ Konfirmasi! 12 bab akan dibuat...
[████░░░░░░] 40% — Step 2/5: Research Agent
Bot: 🎉 Buku selesai! 24,500 kata
Bot: 📎 [12-bab-belajar-java-untuk-pemula.pdf]
Kamu: /buat Panduan Lengkap Jaringan Komputer
Bot: 🚀 Memulai pipeline...
Bot: 🎉 Buku selesai!
Bot: 📎 [panduan-lengkap-jaringan-komputer.pdf]
| Jenis | Contoh Judul | Fitur Khusus |
|---|---|---|
programming |
Belajar Java dari Nol | Kode runnable, output contoh, latihan coding |
networking |
Panduan Jaringan Komputer | Diagram ASCII topologi, CLI command, lab praktik |
devops |
7 Hari Belajar Docker | Dockerfile, YAML, config lengkap, troubleshooting |
database |
Belajar SQL untuk Pemula | Query lengkap, schema, contoh data |
security |
Dasar Keamanan Siber | Demo tools, command, defense techniques |
bisnis |
Cara Membangun Startup | Studi kasus, framework, action item |
self-help |
10 Kebiasaan Produktif | Latihan refleksi, checklist, jurnal |
tutorial |
Panduan Canva untuk Pemula | Step-by-step, screenshot description |
Checkpoint disimpan per bab — jika error di bab 8, cukup jalankan ulang dan pipeline langsung lanjut dari bab 8, tidak perlu mulai dari awal.
output/
└── 12-bab-belajar-java-untuk-pemula/
├── ckpt_outline.json ← Step 1 selesai
├── ckpt_research.json ← Step 2 selesai
├── ckpt_chapter_1.json ← Bab 1 selesai ditulis
├── ckpt_chapter_2.json ← Bab 2 selesai ditulis
├── ...
├── ckpt_chapters.json ← Semua bab selesai ditulis
├── ckpt_edited_1.json ← Bab 1 selesai diedit
├── ckpt_edited_2.json ← Bab 2 selesai diedit
├── ...
└── ckpt_edited.json ← Semua bab selesai diedit
Cara muat outline yang sudah ada (skip step 1):
Taruh file ckpt_outline.json di folder checkpoint yang sesuai:
output/[slug-judul]/ckpt_outline.json
Lalu jalankan dengan judul yang sama — pipeline skip step 1 langsung ke research.
Hapus checkpoint & mulai ulang:
# Windows
rmdir /s /q output\nama-buku
# macOS/Linux
rm -rf output/nama-bukuEdit config/settings.py:
# Ganti model
MODEL_WRITER = "google/gemini-2.0-flash-001" # lebih cepat
MODEL_WRITER = "meta-llama/llama-3.3-70b-instruct" # open source
# Jumlah bab default (jika judul tidak menyebut angka)
DEFAULT_CHAPTERS = 7 # bisa diganti 10, 12, dll
# Jeda antar bab (detik) — naikkan jika sering kena rate limit
CHAPTER_SLEEP_SEC = 2
# Retry & timeout — naikkan jika koneksi sering putus
# (ada di base_agent.py)Model alternatif di OpenRouter: https://openrouter.ai/models
| Model | Harga | Keunggulan |
|---|---|---|
deepseek/deepseek-chat |
$0.32/1M | ⭐ Default, terbaik untuk nulis panjang |
google/gemini-2.0-flash-001 |
$0.10/1M | Cepat & murah |
mistralai/mistral-7b-instruct |
$0.07/1M | Budget |
meta-llama/llama-3.3-70b-instruct |
$0.12/1M | Open source |
meta-llama/llama-3.3-70b-instruct:free |
Gratis | Tier gratis (ada limit) |
| Error | Penyebab | Solusi |
|---|---|---|
402 Payment Required |
Saldo OpenRouter habis | Top up di https://openrouter.ai/credits |
httpx.ReadError |
Koneksi terputus saat baca response | Jalankan ulang — akan retry otomatis 5x |
GatewayRequestError: model not allowed |
Model ID salah | Cek model ID di openrouter.ai/models |
KeyboardInterrupt |
Ctrl+C ditekan | Normal — cara stop bot |
ImportError: cannot import name 'start_handler' |
Python cari module dari lokasi salah | Pastikan sys.path.insert(0, ...) ada di bot.py |
Expecting value: line 1 column 2 |
JSON terpotong karena token habis | MAX_TOKENS_* sudah dinaikkan di settings |
httpx>=0.27.0 # HTTP client async untuk OpenRouter API
python-dotenv>=1.0.0 # Load konfigurasi dari .env
python-telegram-bot[job-queue]>=21.0 # Telegram Bot (opsional)
# pandoc → install di OS (bukan via pip):
# Windows : https://pandoc.org/installing.html
# macOS : brew install pandoc
# Ubuntu : sudo apt install pandoc texlive-xetex
.envtidak masuk Git — API key amanoutput/tidak masuk Git — hasil buku bersifat privatbot.logtidak masuk Git — log error lokal saja- Bot dibatasi hanya untuk User ID tertentu via
TELEGRAM_ALLOWED_USER_IDS
| Versi | Perubahan |
|---|---|
| 1.0.0 | Rilis awal — pipeline 5 agent, CLI + Telegram |
| 1.1.0 | Tambah mode programming (kode runnable, syntax highlighting) |
| 1.2.0 | Tambah mode networking (diagram ASCII, lab praktik) |
| 1.3.0 | Tambah mode devops, database, security |
| 1.4.0 | Output PDF via pandoc, dikirim ke Telegram; MD disimpan lokal |
| 1.5.0 | Tambah /preview dan /revisi — lihat & edit struktur sebelum buat |
| 1.6.0 | Checkpoint per bab — lanjut dari bab terakhir jika error |
| 1.7.0 | Retry 5x + backoff untuk ReadError; timeout dinaikkan ke 6 menit |
| 1.8.0 | Fix ContextTypes import; clean shutdown Ctrl+C; global error handler |