Skip to content

Repository files navigation

📚 AI Book Writer

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.


✨ Fitur

  • 🤖 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

🏗️ Arsitektur Pipeline

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.


📁 Struktur Folder

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)

📄 Format Output

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.


🤖 Model AI yang Digunakan

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


🔁 Sistem Retry & Koneksi

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.


🚀 Cara Menjalankan

1. Clone / Download Project

git clone https://github.com/timposulabs/ai-book-writer.git
cd ai-book-writer

2. Install Dependencies Python

pip install -r requirements.txt

3. Install Pandoc (untuk output PDF)

# Windows → download installer:
# https://pandoc.org/installing.html

# macOS
brew install pandoc

# Ubuntu / Debian
sudo apt install pandoc texlive-xetex

Pandoc opsional. Jika tidak diinstall, output tetap bisa dibuat dalam format .md.

4. Setup File .env

cp .env.example .env

Buka .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=987654321

Dapatkan OpenRouter API key di: https://openrouter.ai/keys


💻 Mode 1: CLI (Terminal)

# 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"

📱 Mode 2: Telegram Bot

A. Setup Bot Telegram

  1. Buka Telegram, cari @BotFather
  2. Kirim /newbot → ikuti instruksi → salin token
  3. Cari @userinfobot → kirim pesan → salin User ID kamu
  4. Isi .env:
    TELEGRAM_BOT_TOKEN=123456789:AAF-xxxxxxxxxx
    TELEGRAM_ALLOWED_USER_IDS=987654321

B. Jalankan Bot

python bot.py
# Tekan Ctrl+C untuk berhenti

C. Command Telegram

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

D. Alur 1: Preview dulu (direkomendasikan)

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]

E. Alur 2: Langsung buat

Kamu:  /buat Panduan Lengkap Jaringan Komputer

Bot:   🚀 Memulai pipeline...

Bot:   🎉 Buku selesai!

Bot:   📎 [panduan-lengkap-jaringan-komputer.pdf]

🧠 Jenis Buku yang Didukung

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

💾 Sistem Checkpoint

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-buku

⚙️ Kustomisasi

Edit 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)

🐛 Troubleshooting

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

📦 Dependencies

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

🔒 Keamanan

  • .env tidak masuk Git — API key aman
  • output/ tidak masuk Git — hasil buku bersifat privat
  • bot.log tidak masuk Git — log error lokal saja
  • Bot dibatasi hanya untuk User ID tertentu via TELEGRAM_ALLOWED_USER_IDS

🗂️ Changelog

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

About

Membuat Ebook dengan AI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages