DSPy: Framework untuk Optimasi LLM Secara Programatik
Prompt engineering secara manual adalah proses yang melelahkan dan sulit di-maintain. Setiap kali model berubah atau data berubah, prompt harus ditulis ulang. DSPy (Declarative Self-improving Python) hadir sebagai solusi revolusioner: framework yang memungkinkan Anda mengoptimasi prompt LLM secara programatik, layaknya melatih model machine learning.
Dalam tutorial ini, kita akan mempelajari cara menggunakan DSPy untuk membangun pipeline LLM yang dapat dioptimasi secara otomatis, mulai dari konsep dasar hingga implementasi RAG (Retrieval-Augmented Generation) yang lengkap.
Apa Itu DSPy?
DSPy adalah framework Python yang mengubah cara kita bekerja dengan LLM. Alih-alih menulis prompt secara manual, DSPy memungkinkan Anda mendefinisikan apa yang ingin dicapai (melalui signatures dan modules), lalu secara otomatis mengoptimasi bagaimana mencapainya (melalui optimizers/teleprompters).
Analogi sederhananya: jika prompt engineering manual seperti menulis kode assembly, DSPy seperti menggunakan compiler yang mengoptimasi kode Anda secara otomatis.
Konsep utama DSPy:
- Signatures: Mendefinisikan input dan output dari sebuah task
- Modules: Building blocks yang mengimplementasikan strategi prompting
- Optimizers (Teleprompters): Algoritma yang mengoptimasi prompt secara otomatis
- Metrics: Fungsi evaluasi untuk mengukur kualitas output
- Compilation: Proses menggabungkan semua komponen dan mengoptimasi
Instalasi
Install DSPy dan dependensi yang diperlukan:
pip install dspy-ai openai
Untuk fitur tambahan:
# Untuk retrieval dengan ChromaDB
pip install dspy-ai chromadb
Untuk menggunakan model lokal
pip install dspy-ai transformers torch
Konfigurasi API key:
export OPENAIAPIKEY="sk-your-api-key-here"
Setup dan Konfigurasi Dasar
Langkah pertama adalah mengkonfigurasi LLM yang akan digunakan.
import dspy
Konfigurasi dengan OpenAI
lm = dspy.LM("openai/gpt-4o-mini")
dspy.configure(lm=lm)
Atau dengan model lain
lm = dspy.LM("anthropic/claude-sonnet-4-20250514")
lm = dspy.LM("openai/gpt-4o")
Signatures: Mendefinisikan Task
Signatures adalah cara DSPy mendefinisikan input dan output dari sebuah task. Ini adalah abstraksi paling dasar di DSPy.
Inline Signatures (sederhana)# Format: "input -> output"
Classify sentiment
classify = dspy.Predict("text -> sentiment")
result = classify(text="Produk ini sangat bagus dan berkualitas!")
print(result.sentiment) # positive
Question answering
qa = dspy.Predict("question -> answer")
result = qa(question="Apa ibukota Indonesia?")
print(result.answer) # Jakarta
Summarization
summarize = dspy.Predict("document -> summary")
result = summarize(
document="Artikel panjang tentang AI dan dampaknya..."
)
print(result.summary)
Class-based Signatures (lebih ekspresif)
class SentimentAnalysis(dspy.Signature):
"""Analisis sentimen dari teks review produk dalam bahasa Indonesia."""
text: str = dspy.InputField(desc="Teks review produk")
sentiment: str = dspy.OutputField(
desc="Sentimen: positif, negatif, atau netral"
)
confidence: float = dspy.OutputField(
desc="Tingkat keyakinan antara 0.0 dan 1.0"
)
reasoning: str = dspy.OutputField(
desc="Alasan di balik klasifikasi sentimen"
)
Gunakan signature
predictor = dspy.Predict(SentimentAnalysis)
result = predictor(
text="Barang sampai tepat waktu, kualitas sesuai deskripsi. "
"Tapi packaging kurang rapi."
)
print(f"Sentimen: {result.sentiment}")
print(f"Confidence: {result.confidence}")
print(f"Reasoning: {result.reasoning}")
Modules: Building Blocks
DSPy menyediakan beberapa module bawaan yang mengimplementasikan strategi prompting berbeda.
dspy.Predict
Module paling dasar yang melakukan single LLM call.
predictor = dspy.Predict("question -> answer")
result = predictor(question="Jelaskan konsep machine learning")
print(result.answer)