Skip to content

Pipeline Otomasi Ringkasan Kebijakan dengan AI (Claude API) #3

@yokoberek

Description

@yokoberek

Latar Belakang

Salah satu nilai utama Kastau adalah menyajikan kebijakan pemerintah dalam bahasa yang mudah dipahami warga biasa. Saat ini, field summary dan detail pada setiap kebijakan diisi secara manual, yang tidak skalabel untuk ratusan dokumen.

Diperlukan pipeline otomatis yang membaca teks dokumen kebijakan (PDF) dan menghasilkan ringkasan berbahasa Indonesia yang ramah warga menggunakan AI.

Tujuan

Mengotomasi pembuatan ringkasan kebijakan dengan Claude API sebagai bagian dari proses ingest data di backend FastAPI.

Spesifikasi Data Model (FastAPI)

# schemas/summary.py

from pydantic import BaseModel
from typing import Optional

class SummaryRequest(BaseModel):
    policy_id: int
    raw_text: str              # teks asli dokumen kebijakan
    force_regenerate: bool = False

class SummaryResponse(BaseModel):
    policy_id: int
    summary: str               # 2–3 kalimat untuk warga umum
    detail: str                # penjelasan lebih lengkap (3–5 paragraf)
    generated_at: datetime
    model_used: str            # nama model AI yang dipakai

class PolicyWithSummary(BaseModel):
    id: int
    title: str
    summary: Optional[str]
    detail: Optional[str]
    summary_status: Literal["pending", "generated", "failed"]

Endpoint yang Dibutuhkan

POST /api/v1/admin/summarize/{policy_id}    # generate ringkasan untuk 1 kebijakan
POST /api/v1/admin/summarize/batch          # generate untuk semua yang belum ada ringkasan
GET  /api/v1/admin/summarize/status         # lihat status: berapa yang sudah/belum diproses

Alur Pipeline

PDF / Teks Dokumen
    │
    ▼
[Text Extractor]       ── pdfplumber / pypdf2
    │
    ▼
[Prompt Builder]       ── format prompt + konteks kebijakan daerah
    │
    ▼
[Claude API]           ── claude-sonnet-4-6
    │
    ▼
[Response Parser]      ── ekstrak summary & detail dari response
    │
    ▼
[Database Update]      ── UPDATE policies SET summary=..., detail=...

Contoh Prompt

SUMMARY_PROMPT = """
Kamu adalah asisten yang membantu warga Kabupaten Jayapura memahami peraturan daerah.

Berdasarkan teks peraturan berikut, buatlah:
1. **Ringkasan singkat** (2-3 kalimat) yang bisa dipahami warga biasa, tanpa istilah hukum
2. **Penjelasan lengkap** (3-5 paragraf) yang menjelaskan: apa itu, siapa yang terdampak, dan apa manfaatnya

Teks peraturan:
{raw_text}

Format output JSON:
{{
  "summary": "...",
  "detail": "..."
}}
"""

Task

  • Tambahkan kolom summary_status, raw_text, generated_at ke tabel policies
  • Buat service SummaryService yang memanggil Claude API
  • Implementasi endpoint summarize single & batch
  • Tambahkan rate limiting agar tidak melebihi batas API
  • Simpan nama model yang digunakan untuk audit
  • Tambahkan retry logic untuk kasus gagal

Acceptance Criteria

  • Endpoint batch berjalan tanpa error untuk 50+ kebijakan
  • Ringkasan yang dihasilkan berbahasa Indonesia yang natural dan mudah dipahami
  • Waktu proses per kebijakan < 10 detik
  • Kebijakan yang sudah ada ringkasannya tidak diproses ulang (kecuali force_regenerate=true)

Referensi

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions