AizuDemy

Tutorial DSPy Python: Automasi Prompt Optimization AI Agent Lokal Ollama

Tutorial DSPy Python: Automasi Prompt Optimization AI Agent Lokal Ollama
IKLAN
IDCloudHost
๐ŸŽง
Dengarkan Artikel Ini
Suara AI Otomatis โ€ข 4 mnt baca baca
โšก TL;DR

Poin Kunci Artikel Ini:

  • Pipeline AI Agent di server lokal crash.
  • Masalahnya sepele: prompt sepanjang 500 kata untuk Llama 3 gagal menghasilkan format JSON konsisten setelah model di-update.
  • Ubah satu kalimat di prompt, output bagian lain justru rusak.
๐Ÿ“‹ Daftar Isi Materi Tutup โ–ด

Jam dua pagi. Alarm server mendadak bunyi. Pipeline AI Agent di server lokal crash. Masalahnya sepele: prompt sepanjang 500 kata untuk Llama 3 gagal menghasilkan format JSON konsisten setelah model di-update. Ubah satu kalimat di prompt, output bagian lain justru rusak. Edit string prompt manual itu rapuh, boros waktu, dan mustahil dipertahankan di lingkungan produksi.

Bayangkan prompt seperti kode program, bukan mantra sihir. Framework DSPy (Declarative Self-improving Python) mengubah total cara bangun aplikasi berbasis Large Language Model (LLM). Daripada menulis string prompt manual, DSPy memperlakukan prompt sebagai variabel terkompilasi. Anda cukup tentukan struktur input-output (Signature) dan logika aplikasi (Module). Teleprompter DSPy akan mencari instruksi dan contoh few-shot terbaik secara otomatis menggunakan LLM lokal via Ollama.

1. Kenapa Manual Prompt Engineering Gagal di Skala Enterprise

Menulis prompt manual menyimpan banyak jebakan teknis saat aplikasi mulai membesar:

  • Model Lock-in: Prompt yang jalan mulus di GPT-4 sering gagal total saat dipindah ke LLM lokal seperti Llama 3 8B atau Mistral 7B.
  • Efek Samping Non-Deterministik: Memperbaiki satu edge case lewat instruksi baru sering kali mengacaukan output instruksi lain yang sudah benar.
  • Error Accumulation di Pipeline Agent: Dalam arsitektur ReAct atau multi-agent, prompt manual di tiap step reasoning bikin error menumpuk (error propagation) dan sulit di-debug.

DSPy menyelesaikan masalah ini dengan memisahkan logika kode dari teks prompt. Komponen utamanya ada dua: Signature (kontrak input/output) dan Teleprompter (optimizer otomatis berdasarkan metrik evaluasi).

2. Setup DSPy dan Ollama Lokal

Langkah pertama: install library DSPy dan siapkan instance Ollama lokal. Pastikan server Ollama aktif dan model sasaran sudah siap.

Instalasi Library

pip install dspy-ai

Jalankan Server Ollama

Eksekusi model Llama 3 8B via terminal:

ollama run llama3:8b

Inisialisasi Model di Python

Hubungkan DSPy ke instance Ollama lokal dengan modul dspy.LM:

import dspy

# Inisialisasi LLM lokal via Ollama
ollama_lm = dspy.LM('ollama/llama3:8b', api_base='http://localhost:11434', api_key='')
dspy.settings.configure(lm=ollama_lm)

print("Koneksi LLM Lokal Berhasil.")

Buat Signature dan Module

Signature menggantikan penulisan string prompt panjang. Tentukan variabel input dan output secara deklaratif.

class ClassifyIntent(dspy.Signature):
    """Klasifikasikan niat pengguna ke dalam kategori sistem dan ekstrak entitas kunci."""
    
    user_query = dspy.InputField(desc="Teks pertanyaan atau instruksi dari user")
    category = dspy.OutputField(desc="Kategori: 'TECHNICAL_SUPPORT', 'BILLING', atau 'GENERAL'")
    entities = dspy.OutputField(desc="Daftar kata kunci penting yang diekstrak")

class IntentAgent(dspy.Module):
    def __init__(self):
        super().__init__()
        # Gunakan ChainOfThought agar model melakukan penalaran sebelum beri jawaban
        self.prog = dspy.ChainOfThought(ClassifyIntent)

    def forward(self, user_query):
        return self.prog(user_query=user_query)

3. Optimasi Prompt Otomatis dengan Teleprompter

Proses kompilasi DSPy butuh tiga hal: dataset kecil, fungsi metrik penilai, dan optimizer (Teleprompter). Teleprompter menguji berbagai variasi instruksi dan contoh few-shot terbaik secara otomatis.

Siapkan Dataset Latih

trainset = [
    dspy.Example(user_query="Koneksi database saya error timeout terus", category="TECHNICAL_SUPPORT", entities="koneksi database, timeout").with_inputs('user_query'),
    dspy.Example(user_query="Berapa tagihan langganan bulan ini?", category="BILLING", entities="tagihan langganan").with_inputs('user_query'),
    dspy.Example(user_query="Bagaimana cara mengubah password profil?", category="GENERAL", entities="ubah password, profil").with_inputs('user_query'),
    dspy.Example(user_query="API server melempar status 500 internal error", category="TECHNICAL_SUPPORT", entities="API server, status 500").with_inputs('user_query'),
]

Buat Metric Evaluasi

Fungsi metrik mengukur kebenaran output program secara kuantitatif:

def validate_intent(example, pred, trace=None):
    category_match = example.category.lower() == pred.category.lower()
    return category_match

Jalankan Teleprompter Optimizer

Gunakan BootstrapFewShot untuk kompilasi prompt optimal:

from dspy.teleprompt import BootstrapFewShot

# Inisialisasi Optimizer
optimizer = BootstrapFewShot(metric=validate_intent, max_bootstrapped_demos=2)

# Kompilasi Agent
uncompiled_agent = IntentAgent()
compiled_agent = optimizer.compile(uncompiled_agent, trainset=trainset)

# Uji Agent hasil kompilasi
response = compiled_agent(user_query="Server aplikasi saya tidak bisa diakses dari tadi pagi")
print("Kategori:", response.category)
print("Entitas:", response.entities)
print("Reasoning:", response.rationale)

4. Deployment ke Production

DSPy mengubah pengembangan AI Agent dari tebak-tebakan teks menjadi software engineering terstruktur. Saat ganti model Ollama (misal dari Llama 3 ke Mistral), tidak perlu tulis ulang prompt. Cukup run ulang script kompilasi DSPy.

Simpan dan Load State Agent

Export hasil kompilasi ke file JSON untuk dipakai langsung di aplikasi production tanpa overhead kompilasi ulang:

# Simpan prompt hasil kompilasi
compiled_agent.save("compiled_intent_agent.json")

# Load di aplikasi production
loaded_agent = IntentAgent()
loaded_agent.load("compiled_intent_agent.json")
result = loaded_agent(user_query="Lupa PIN transaksi")
print("Kategori Production:", result.category)

Stop buang waktu edit string prompt manual. Buat Signature, tentukan metrik evaluasi, dan biarkan DSPy mengoptimalkan prompt LLM lokal Anda secara otomatis.

A
Aizu Dev

Tim penulis AizuDemy yang menyajikan tutorial teknologi, cloud, dan pengembangan perangkat lunak dalam Bahasa Indonesia.

๐Ÿ“– Artikel Terkait