Perbedaan DSPy dengan RAG (Retrieval-Augmented Generation)

Kukuh T Wicaksono
10 min readJan 22, 2025

--

Penjelasan tentang DSPy

  1. DSPy adalah framework untuk membangun pipeline modular yang memungkinkan pemrograman sistem AI secara deklaratif dan fleksibel, tanpa bergantung pada prompt manual.
  2. Framework ini mendukung modularitas dengan menggunakan strategi seperti Chain of Thought dan ReAct, yang memungkinkan reasoning multi-tahap dan integrasi alat eksternal.
  3. DSPy dirancang untuk tugas kompleks dengan kontrol penuh, optimisasi modular, dan kemampuan untuk menggabungkan berbagai modul AI dalam satu sistem.

Penjelasan tentang RAG (Retrieval-Augmented Generation)

  1. RAG adalah teknik yang menggabungkan kemampuan retrieval (pencarian informasi) dari sumber eksternal dan generation (pemrosesan jawaban) menggunakan Language Model (LM).
  2. Dalam RAG, informasi relevan dari database atau dokumen dicari terlebih dahulu, lalu digunakan untuk menghasilkan jawaban yang lebih akurat dan kontekstual.
  3. RAG cocok untuk skenario yang membutuhkan pengayaan jawaban dari data eksternal, seperti menjawab pertanyaan berbasis dokumen atau pencarian berbasis konteks.

Contoh Kasus DSPy dengan Analogi Monitoring Menara Transmisi

Kasus: Monitoring Menara Transmisi pada Perusahaan Seluler

  • Deskripsi: Anda ingin membuat sistem yang memonitor menara transmisi (BTS) di setiap kota untuk memastikan semua menara berfungsi dengan baik, menangani gangguan, dan mengoptimalkan kinerja jaringan.
  • Analogi Sederhana: Menara BTS seperti lampu lalu lintas yang memastikan kendaraan (data pengguna) dapat berjalan lancar di jalan (jaringan). Sistem monitoring adalah pusat kontrol lalu lintas yang memantau dan mengelola lampu-lampu ini.

Pipeline Multi-Modul DSPy untuk Monitoring BTS

  1. Modul 1: Deteksi Status BTS
  • Tugas: Memeriksa apakah BTS aktif atau mengalami gangguan.
  • Implementasi:
detect_status = dspy.Predict("bts_id -> status: {active, inactive, overloaded}")

Modul 2: Analisis Beban BTS

  • Tugas: Mengidentifikasi BTS yang kelebihan beban (overloaded) berdasarkan jumlah pengguna aktif.
  • Implementasi:
analyze_load = dspy.ChainOfThought("bts_data -> analysis: str")

Modul 3: Penjadwalan Perbaikan

  • Tugas: Menentukan prioritas perbaikan untuk BTS berdasarkan tingkat gangguan.
  • Implementasi:
schedule_repair = dspy.Predict("bts_issue -> priority: {high, medium, low}")

Pipeline DSPy: Mengintegrasikan Semua Modul Alur Kerja:

  • Memeriksa status semua BTS.
  • Menganalisis beban BTS yang aktif.
  • Menjadwalkan perbaikan untuk BTS yang terganggu atau kelebihan beban.

Kode Pipeline:

def monitor_bts(bts_data):
# Step 1: Detect BTS status
status = detect_status(bts_id=bts_data['id'])

if status == "inactive":
return schedule_repair(bts_issue="offline")

elif status == "overloaded":
load_analysis = analyze_load(bts_data=bts_data)
return f"BTS overloaded. Analysis: {load_analysis}"

return "BTS is active and running smoothly."

Apakah Kasus Ini Bisa Diselesaikan dengan RAG?

Bisa, tetapi dengan keterbatasan:

  1. Langkah Tunggal: RAG dapat menangani pengambilan informasi tentang BTS yang terganggu dari database dan memberikan solusi langsung.
  • Misalnya: “BTS di kota X sedang offline. Kirim teknisi segera.”

2. Pipeline Kompleks Tidak Mendukung: Jika tugas melibatkan beberapa langkah independen seperti deteksi status, analisis beban, dan penjadwalan perbaikan, RAG tidak fleksibel untuk memisahkan dan mengintegrasikan langkah-langkah ini.

  • DSPy: Seperti pusat kontrol lalu lintas modern yang mampu memantau, menganalisis, dan memperbaiki lampu lalu lintas di berbagai kota dengan pipeline modular.
  • RAG: Seperti sistem pengawas kamera tunggal yang dapat memberikan informasi langsung tentang lampu lalu lintas yang bermasalah tetapi tidak memiliki fleksibilitas untuk mengelola proses multi-langkah.

DSPy lebih cocok untuk skenario monitoring BTS dengan banyak modul, sedangkan RAG efektif untuk tugas retrieval sederhana dengan solusi langsung.

Analogi Perbandingan DSPy dan RAG untuk Kasus Monitoring Brute Force pada Jaringan Perusahaan

Kasus: Monitoring Serangan Brute Force pada Jaringan Perusahaan

Perusahaan ingin memantau dan menangani serangan brute force yang mencoba masuk ke sistem mereka. Sistem harus mendeteksi serangan, menganalisis pola, memblokir IP yang mencurigakan, dan memberikan laporan kepada tim keamanan.

Analogi Sederhana

Bayangkan perusahaan memiliki gerbang keamanan utama untuk mengawasi semua kendaraan (data) yang masuk ke area kompleksnya.

  • DSPy: Seperti sistem keamanan dengan beberapa lapisan pemantauan yang bekerja bersama untuk mendeteksi, menganalisis, dan menangani ancaman. Tiap lapisan memiliki tugas spesifik (misalnya, pemindai plat nomor, kamera pengenal wajah, atau penjaga keamanan yang siap bertindak).
  • RAG: Seperti petugas penjaga gerbang tunggal yang memeriksa plat nomor dengan daftar kendaraan terlarang sebelum memberikan keputusan.

1. Cara DSPy Menangani Kasus

DSPy memungkinkan pembuatan pipeline modular untuk mendeteksi, menganalisis, dan menanggapi serangan brute force dalam beberapa langkah.

Pipeline Multi-Modul DSPy

  1. Modul 1: Deteksi Aktivitas Mencurigakan
  • Tugas: Mendeteksi pola login yang mencurigakan, seperti percobaan login berulang dari satu IP.
  • Analogi: Pemindai kendaraan yang mendeteksi jika satu kendaraan mencoba masuk berkali-kali dalam waktu singkat.
  • Kode:
detect_brute_force = dspy.Predict("log_data -> status: {normal, suspicious, brute_force}")
  1. Modul 2: Analisis Pola Serangan
  • Tugas: Menganalisis data login (IP, waktu, jumlah percobaan) untuk mengidentifikasi jenis serangan.
  • Analogi: Kamera pengenal wajah yang memeriksa apakah pengemudi memiliki riwayat masalah keamanan.
  • Kode:
analyze_pattern = dspy.ChainOfThought("suspicious_log -> analysis: str")
  1. Modul 3: Penanganan Serangan
  • Tugas: Memblokir IP mencurigakan dan melaporkan ke tim keamanan.
  • Analogi: Penjaga keamanan memblokir kendaraan dan melaporkan ke kantor pusat.
  • Kode:
block_ip = dspy.Predict("ip -> action: {block, allow}")
  1. Pipeline DSPy: Alur Kerja:
  • Mendeteksi aktivitas mencurigakan.
  • Menganalisis pola serangan.
  • Memblokir IP dan melaporkan hasilnya.
  1. Kode Pipeline:
def monitor_brute_force(log_data):     
# Step 1: Detect suspicious activity
status = detect_brute_force(log_data=log_data)
if status == "normal":
return "No threat detected."
elif status == "suspicious":
analysis = analyze_pattern(suspicious_log=log_data)
return f"Suspicious activity detected: {analysis}"
elif status == "brute_force":
ip = log_data['ip']
action = block_ip(ip=ip)
return f"Brute force attack detected! IP {ip} has been {action}."

2. Cara RAG Menangani Kasus

RAG hanya melakukan dua langkah utama: retrieval dan generation. Sistem akan mencari informasi yang relevan dari database (misalnya, daftar IP mencurigakan) dan memberikan jawaban.

Pipeline Sederhana RAG

  1. Pencarian Data Log:
  • Tugas: Mencari pola login yang cocok dengan daftar IP mencurigakan di database.
  • Analogi: Penjaga gerbang memeriksa daftar kendaraan terlarang sebelum memutuskan.
  1. Respons Jawaban:
  • Tugas: Memberikan laporan sederhana tentang apakah IP tersebut mencurigakan.
  • Analogi: Memberitahu apakah kendaraan boleh masuk atau tidak.
  1. Implementasi RAG:
def monitor_brute_force_rag(log_data, ip_database):    
# Step 1: Retrieve IP information
if log_data['ip'] in ip_database['blocked_ips']:
return f"Brute force detected from IP {log_data['ip']}. Blocked."
else: return "No suspicious activity detected."

3. Perbandingan DSPy dan RAG untuk Kasus Ini

Kesimpulan

  • DSPy cocok untuk monitoring brute force yang membutuhkan analisis mendalam dan penanganan berlapis, seperti deteksi pola, analisis ancaman, dan pemblokiran otomatis.
  • RAG lebih cocok untuk deteksi cepat berdasarkan database, tetapi kurang ideal untuk pipeline dengan banyak modul.

Analogi:

  • DSPy: Seperti sistem keamanan yang memiliki banyak lapisan pemantauan (pemindai plat nomor, kamera pengenal wajah, dan penjaga keamanan).
  • RAG: Seperti penjaga gerbang yang hanya memeriksa daftar kendaraan terlarang dan memberikan keputusan langsung.

Berikut adalah contoh kode DSPy untuk monitoring 10 ATM di 10 lokasi berbeda. Sistem ini akan memproses data setiap ATM untuk mendeteksi kondisi seperti kerusakan mesin atau kehabisan uang tunai dan merekomendasikan tindakan yang diperlukan.

Kode DSPy: Monitoring 10 ATM

import dspy
# Modul 1: Deteksi Status ATM
detect_status = dspy.Predict("atm_status -> condition: {normal, out_of_cash, hardware_error, software_error}")
# Modul 2: Analisis Masalah
analyze_issue = dspy.ChainOfThought("condition -> issue_analysis: str")
# Modul 3: Tindakan Tanggap
respond_action = dspy.Predict("issue_analysis -> action: {dispatch_cash_team, dispatch_technician, no_action_needed}")
# Pipeline: Monitoring ATM
def monitor_atms(atm_data_list):
results = []
for atm in atm_data_list:
atm_id = atm['atm_id']
location = atm['location']

# Step 1: Deteksi status ATM
condition = detect_status(atm_status=atm['status'])

# Step 2: Analisis masalah jika ada gangguan
if condition == "normal":
results.append({
"atm_id": atm_id,
"location": location,
"condition": "normal",
"issue": "No issues detected.",
"action": "no_action_needed"
})
continue

issue_analysis = analyze_issue(condition=condition)

# Step 3: Tindakan tanggap
action = respond_action(issue_analysis=issue_analysis)

# Rekap hasil
results.append({
"atm_id": atm_id,
"location": location,
"condition": condition,
"issue": issue_analysis,
"action": action
})
return results
# Data 10 ATM di 10 lokasi berbeda
atm_data_list = [
{"atm_id": "ATM001", "location": "Jakarta", "status": {"cash_level": "low", "hardware": "ok", "software": "ok"}},
{"atm_id": "ATM002", "location": "Bandung", "status": {"cash_level": "empty", "hardware": "ok", "software": "ok"}},
{"atm_id": "ATM003", "location": "Surabaya", "status": {"cash_level": "sufficient", "hardware": "error", "software": "ok"}},
{"atm_id": "ATM004", "location": "Yogyakarta", "status": {"cash_level": "low", "hardware": "ok", "software": "error"}},
{"atm_id": "ATM005", "location": "Medan", "status": {"cash_level": "sufficient", "hardware": "ok", "software": "ok"}},
{"atm_id": "ATM006", "location": "Makassar", "status": {"cash_level": "empty", "hardware": "error", "software": "ok"}},
{"atm_id": "ATM007", "location": "Semarang", "status": {"cash_level": "low", "hardware": "ok", "software": "ok"}},
{"atm_id": "ATM008", "location": "Palembang", "status": {"cash_level": "empty", "hardware": "ok", "software": "ok"}},
{"atm_id": "ATM009", "location": "Bali", "status": {"cash_level": "sufficient", "hardware": "ok", "software": "ok"}},
{"atm_id": "ATM010", "location": "Balikpapan", "status": {"cash_level": "low", "hardware": "ok", "software": "error"}}
]
# Menjalankan pipeline
monitoring_results = monitor_atms(atm_data_list)
# Menampilkan hasil monitoring
for result in monitoring_results:
print(f"ATM ID: {result['atm_id']}")
print(f"Location: {result['location']}")
print(f"Condition: {result['condition']}")
print(f"Issue: {result['issue']}")
print(f"Action: {result['action']}")
print("-" * 50)

Penjelasan Tiap Bagian

Modul detect_status:

  • Mendefinisikan kondisi ATM berdasarkan data status:
  • normal: Tidak ada masalah.
  • out_of_cash: Kehabisan uang tunai.
  • hardware_error: Kerusakan perangkat keras.
  • software_error: Masalah perangkat lunak.

Modul analyze_issue:

  • Menganalisis detail masalah, seperti:
  • “Cash level empty. Immediate refill required.”
  • “Hardware error detected. Technician needed.”

Modul respond_action:

  • Memberikan rekomendasi tindakan berdasarkan masalah:
  • dispatch_cash_team: Kirim tim pengisi uang tunai.
  • dispatch_technician: Kirim teknisi untuk memperbaiki kerusakan.
  • no_action_needed: Tidak diperlukan tindakan.

Pipeline monitor_atms:

  • Memproses data 10 ATM sekaligus, mendeteksi masalah, menganalisis penyebabnya, dan merekomendasikan tindakan.

Output Contoh

ATM ID: ATM001
Location: Jakarta
Condition: normal
Issue: No issues detected.
Action: no_action_needed
--------------------------------------------------
ATM ID: ATM002
Location: Bandung
Condition: out_of_cash
Issue: Cash level empty. Immediate refill required.
Action: dispatch_cash_team
--------------------------------------------------
ATM ID: ATM003
Location: Surabaya
Condition: hardware_error
Issue: Hardware error detected. Technician needed.
Action: dispatch_technician
--------------------------------------------------
... (dan seterusnya untuk semua ATM)

Keunggulan DSPy untuk Kasus Ini

  1. Scalability: Mudah menangani data ATM dalam jumlah besar.
  2. Modular: Setiap modul dapat dioptimalkan secara independen.
  3. Real-Time Monitoring: Pipeline dapat dijalankan secara berkala untuk pemantauan berkelanjutan.

Sistem ini dapat digunakan untuk meningkatkan efisiensi operasional ATM dengan mendeteksi masalah lebih cepat dan memberikan solusi otomatis.

Perbedaan DSPy dengan Aplikasi Monitoring Biasa tanpa AI

Aplikasi monitoring biasa dan monitoring berbasis DSPy memiliki perbedaan mendasar dari segi pendekatan, kapabilitas, dan fleksibilitas. Berikut adalah perbandingan detailnya:

7. Contoh Kasus

Monitoring Biasa:

  • Kondisi: ATM kehabisan uang tunai.
  • Respons: Sistem mengirimkan notifikasi ke petugas logistik untuk segera mengisi ulang uang tunai.

Monitoring DSPy:

  • Kondisi: ATM kehabisan uang tunai.
  • Respons:
  1. DSPy mendeteksi status “Out of cash”.
  2. Menganalisis pola transaksi untuk memastikan apakah ini masalah biasa atau peningkatan penarikan mendadak.
  3. Memberikan penjelasan (reasoning) tentang penyebab kehabisan uang, misalnya: “Peningkatan penarikan karena akhir bulan.”
  4. Merekomendasikan tindakan terbaik, seperti: “Kirim tim logistik dan pertimbangkan peningkatan jumlah uang tunai di pengisian berikutnya.”

8. Keunggulan DSPy

  • Adaptif: Mampu menangani situasi kompleks dan memberikan solusi berbasis reasoning.
  • Efisien: Mengurangi pekerjaan manual dalam menganalisis dan mengambil keputusan.
  • Prediktif: Membantu menghindari masalah sebelum terjadi.
  • Modular: Mudah diubah atau ditingkatkan dengan modul baru.

Kesimpulan

  • Monitoring Biasa cocok untuk kasus sederhana yang membutuhkan deteksi dan respons statis.
  • Monitoring DSPy unggul dalam menangani masalah yang kompleks, memberikan reasoning yang kaya, dan memprediksi serta mencegah masalah di masa depan.

DSPy menghadirkan sistem monitoring yang lebih cerdas, efisien, dan fleksibel dengan memanfaatkan kekuatan AI!

Berikut adalah 10 kasus yang hanya cocok untuk implementasi DSPy dan tidak cocok untuk RAG (Retrieval-Augmented Generation), karena membutuhkan modularitas, reasoning yang mendalam, atau kemampuan multi-tahap yang tidak dapat diakomodasi oleh RAG.

1. Analisis Kompleks untuk Prediksi Risiko Keuangan

  • Deskripsi: Sistem menganalisis data transaksi keuangan untuk mendeteksi risiko seperti over-leverage atau potensi kebangkrutan.
  • Mengapa DSPy Cocok: DSPy memungkinkan pipeline multi-modul yang dapat memproses data transaksi, melakukan reasoning berbasis aturan, dan memberikan rekomendasi mitigasi.
  • Mengapa RAG Tidak Cocok: RAG hanya dapat mencari informasi atau dokumen terkait, tetapi tidak memiliki kemampuan multi-langkah untuk analisis prediktif.

2. Optimisasi Rantai Pasokan

  • Deskripsi: Sistem menganalisis data logistik untuk menentukan jalur distribusi terbaik berdasarkan stok, waktu pengiriman, dan biaya.
  • Mengapa DSPy Cocok: Pipeline modular dapat mendeteksi masalah dalam rantai pasokan, menganalisis alternatif, dan memberikan rekomendasi berbasis konteks.
  • Mengapa RAG Tidak Cocok: RAG tidak bisa mengintegrasikan banyak variabel sekaligus untuk reasoning kompleks.

3. Diagnosa Multi-Tahap untuk Mesin Industri

  • Deskripsi: Mendeteksi dan menganalisis kerusakan mesin industri dengan proses bertahap, termasuk deteksi awal, analisis penyebab, dan tindakan perbaikan.
  • Mengapa DSPy Cocok: Pipeline DSPy dapat menyusun reasoning multi-langkah dengan modul untuk deteksi masalah, analisis penyebab, dan tindakan korektif.
  • Mengapa RAG Tidak Cocok: RAG tidak dirancang untuk memecah masalah menjadi beberapa langkah independen.

4. Sistem Manajemen Risiko Cybersecurity

  • Deskripsi: Mengawasi jaringan untuk mendeteksi serangan siber, menganalisis pola ancaman, dan memberikan respons otomatis.
  • Mengapa DSPy Cocok: Modularitas DSPy memungkinkan deteksi, analisis, dan tindakan otomatis secara terpisah dan terintegrasi.
  • Mengapa RAG Tidak Cocok: RAG hanya dapat mencari informasi terkait serangan, tanpa kemampuan untuk mengambil tindakan berdasarkan analisis langsung.

5. Penyusunan Strategi Pembelajaran Adaptif

  • Deskripsi: Sistem pembelajaran online yang dapat menyesuaikan materi pelajaran berdasarkan kemampuan siswa, seperti memberikan soal tambahan atau penjelasan ulang.
  • Mengapa DSPy Cocok: DSPy dapat membuat pipeline adaptif yang menganalisis performa siswa, memberikan materi tambahan, dan memonitor hasilnya.
  • Mengapa RAG Tidak Cocok: RAG tidak fleksibel untuk membuat rekomendasi berbasis performa siswa secara dinamis.

6. Pengelolaan Inventori Dinamis

  • Deskripsi: Memantau stok barang secara real-time dan memberikan rekomendasi untuk mengisi ulang berdasarkan tren permintaan.
  • Mengapa DSPy Cocok: DSPy dapat menggunakan reasoning multi-langkah untuk memproses data stok, tren penjualan, dan prediksi permintaan.
  • Mengapa RAG Tidak Cocok: RAG tidak dapat melakukan reasoning berdasarkan tren data yang terus berubah.

7. Penjadwalan Tim Operasional

  • Deskripsi: Membuat jadwal kerja tim berdasarkan ketersediaan, kemampuan individu, dan prioritas tugas.
  • Mengapa DSPy Cocok: Pipeline modular dapat mempertimbangkan semua variabel secara sistematis untuk membuat jadwal optimal.
  • Mengapa RAG Tidak Cocok: RAG tidak dirancang untuk mempertimbangkan banyak variabel sekaligus dan menghasilkan output yang terstruktur.

8. Analisis Kesalahan dalam Produksi

  • Deskripsi: Menganalisis kesalahan produksi untuk menemukan akar masalah, seperti cacat produk atau kegagalan mesin.
  • Mengapa DSPy Cocok: DSPy dapat menggunakan modul reasoning untuk melacak penyebab kesalahan secara bertahap.
  • Mengapa RAG Tidak Cocok: RAG hanya dapat mencari informasi umum tentang kesalahan, tanpa analisis mendalam.

9. Sistem Penentuan Harga Dinamis

  • Deskripsi: Menentukan harga produk berdasarkan permintaan pasar, stok barang, dan strategi kompetitor.
  • Mengapa DSPy Cocok: DSPy dapat membuat modul untuk menganalisis berbagai faktor secara bersamaan dan merekomendasikan harga yang optimal.
  • Mengapa RAG Tidak Cocok: RAG tidak bisa melakukan reasoning berbasis data real-time untuk penentuan harga.

10. Optimisasi Operasional di Smart City

  • Deskripsi: Mengelola lalu lintas, distribusi energi, dan pengelolaan sampah di kota pintar secara terintegrasi.
  • Mengapa DSPy Cocok: Modularitas DSPy memungkinkan analisis data dari berbagai sumber (sensor lalu lintas, konsumsi energi) untuk menghasilkan solusi yang optimal.
  • Mengapa RAG Tidak Cocok: RAG tidak dirancang untuk menangani proses multi-sumber dan multi-langkah yang kompleks.

Kesimpulan

DSPy unggul dalam kasus-kasus yang membutuhkan:

  1. Modularitas untuk pipeline multi-langkah.
  2. Reasoning berbasis logika yang kompleks.
  3. Fleksibilitas untuk menggabungkan banyak variabel atau sumber data.

Sebaliknya, RAG hanya cocok untuk tugas yang melibatkan pencarian informasi dari sumber eksternal, tanpa kebutuhan untuk reasoning atau proses multi-tahap yang mendalam.

--

--

No responses yet