AI Prompt Engineering · Pelajaran

Mengompilasi dan Mengoptimalkan Prompt

BootstrapFewShot, MIPRO, dan pengoptimal DSPy lainnya dalam praktik.

Pelajaran 3 dari 413 langkah

Mengompilasi dan Mengoptimalkan Prompt adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Makna Pengoptimalan dalam DSPy

Pengoptimalan DSPy (disebut kompilasi) menemukan konfigurasi prompt terbaik untuk program Anda berdasarkan kumpulan data pelatihan dan metrik. Pengoptimal menelusuri berbagai kemungkinan contoh few-shot, instruksi, dan demonstrasi penalaran.

Anda menjalankan kompilasi sekali, menyimpan hasilnya, lalu menerapkan program yang telah dioptimalkan. Saat inferensi, program hanya melakukan pemanggilan LLM yang cepat — tanpa beban pengoptimalan lagi.

Mendefinisikan Fungsi Metrik

Setiap pengoptimal DSPy memerlukan fungsi metrik yang menilai prediksi berdasarkan output yang diharapkan. Fungsi ini mengembalikan angka (atau boolean) — nilai yang lebih tinggi lebih baik.

Metrik adalah sinyal yang digunakan pengoptimal untuk menentukan apakah suatu konfigurasi prompt sudah baik.

# Metric: exact match on answer field
def exact_match_metric(example, prediction, trace=None):
    """
    example: a training example with .answer
    prediction: the module's output with .answer
    Returns 1.0 if correct, 0.0 otherwise
    """
    expected = example.answer.strip().lower()
    predicted = prediction.answer.strip().lower()
    return float(expected == predicted)

# Metric: F1 score for token overlap (common in QA)
def token_f1_metric(example, prediction, trace=None):
    gold_tokens = set(example.answer.lower().split())
    pred_tokens = set(prediction.answer.lower().split())
    if not pred_tokens:
        return 0.0
    precision = len(gold_tokens & pred_tokens) / len(pred_tokens)
    recall = len(gold_tokens & pred_tokens) / len(gold_tokens)
    if precision + recall == 0:
        return 0.0
    return 2 * precision * recall / (precision + recall)

Menyiapkan Kumpulan Data Pelatihan

DSPy memerlukan kumpulan data pelatihan yang berisi objek dspy.Example. Setiap contoh menentukan input dan output yang diharapkan. Bahkan 20–50 contoh sering kali sudah cukup untuk BootstrapFewShot.

import dspy

# Build training examples
trainset = [
    dspy.Example(
        question='What is the capital of Germany?',
        answer='Berlin'
    ).with_inputs('question'),

    dspy.Example(
        question='Who wrote Romeo and Juliet?',
        answer='William Shakespeare'
    ).with_inputs('question'),

    dspy.Example(
        question='What year did World War II end?',
        answer='1945'
    ).with_inputs('question'),
    # ... add more examples
]

print(f'Training set size: {len(trainset)} examples')
print(trainset[0].question, '->', trainset[0].answer)

Pengoptimal BootstrapFewShot

BootstrapFewShot adalah pengoptimal DSPy yang paling umum digunakan. Pengoptimal ini menjalankan program Anda pada kumpulan data pelatihan, mengumpulkan jejak yang berhasil (pasangan input-output yang memenuhi metrik), lalu menggunakan jejak tersebut sebagai demonstrasi few-shot dalam prompt yang dikompilasi.

import dspy
from dspy.teleprompt import BootstrapFewShot

# Define your program
class QA(dspy.Signature):
    """Answer factual questions."""
    question: str = dspy.InputField()
    answer: str = dspy.OutputField()

program = dspy.ChainOfThought(QA)

# Set up the optimizer
optimizer = BootstrapFewShot(
    metric=exact_match_metric,
    max_bootstrapped_demos=4,   # Up to 4 few-shot examples per predictor
    max_labeled_demos=4,        # Use labeled examples directly if available
)

# Compile!
compiled_program = optimizer.compile(program, trainset=trainset)
print('Compilation complete')

Pengoptimal MIPRO

MIPRO (Multi-prompt Instruction Proposal and Optimization) adalah pengoptimal yang lebih canggih. Pengoptimal ini tidak hanya memilih contoh few-shot, tetapi juga mencari teks instruksi yang lebih baik untuk disertakan dalam prompt.

MIPRO memerlukan lebih banyak pemanggilan LLM selama kompilasi, tetapi sering kali menghasilkan akurasi yang jauh lebih tinggi.

import dspy
from dspy.teleprompt import MIPROv2

class QA(dspy.Signature):
    """Answer factual questions."""
    question: str = dspy.InputField()
    answer: str = dspy.OutputField()

program = dspy.ChainOfThought(QA)

# MIPRO: optimizes both instructions AND few-shot examples
optimizer = MIPROv2(
    metric=exact_match_metric,
    auto='medium',      # 'light' / 'medium' / 'heavy' for optimization budget
    num_threads=4,      # Parallel evaluation threads
)

compiled_program = optimizer.compile(
    program,
    trainset=trainset,
    num_trials=20,       # Number of candidate prompts to evaluate
)
print('MIPRO compilation complete')

Seperti Apa Bentuk Prompt yang Dikompilasi

Setelah kompilasi, DSPy menyematkan demonstrasi few-shot yang telah dioptimalkan ke dalam prompt. Anda dapat memeriksanya dengan meninjau prediktor program yang telah dikompilasi.

import dspy

# After compiling, inspect the optimized state
compiled_program = dspy.ChainOfThought('question -> answer')
# (Assume this was returned by optimizer.compile(...))

# Inspect the demos that were found
for demo in compiled_program.demos:
    print('Input:', demo.question)
    print('Reasoning:', demo.get('reasoning', 'N/A'))
    print('Answer:', demo.answer)
    print('---')

# Save the compiled state
compiled_program.save('compiled_qa_program.json')
print('Saved compiled program')

Antarmuka teleprompter.compile()

Semua pengoptimal DSPy menggunakan antarmuka compile() yang sama. Konsistensi ini berarti Anda dapat mengganti pengoptimal tanpa mengubah kode program.

from dspy.teleprompt import BootstrapFewShot, MIPROv2, COPRO

# All optimizers use the same interface:
# compiled = optimizer.compile(program, trainset=trainset)

# BootstrapFewShot: fast, uses successful traces as demos
opt1 = BootstrapFewShot(metric=exact_match_metric)

# MIPRO: slower, optimizes instructions too
opt2 = MIPROv2(metric=exact_match_metric, auto='light')

# COPRO: coordinate descent over instruction proposals
opt3 = COPRO(metric=exact_match_metric, depth=3)

# Swap between them with one line change:
compiled = opt1.compile(program, trainset=trainset)
# or: compiled = opt2.compile(program, trainset=trainset)

BootstrapFewShotWithRandomSearch

BootstrapFewShotWithRandomSearch memperluas BootstrapFewShot dengan menghasilkan banyak kandidat kumpulan demonstrasi dan memilih kandidat dengan kinerja terbaik pada kumpulan validasi.

Ini merupakan jalan tengah yang baik antara kesederhanaan BootstrapFewShot dan kekuatan MIPRO.

from dspy.teleprompt import BootstrapFewShotWithRandomSearch

# Split data into train and validation
trainset = examples[:40]
devset = examples[40:60]

optimizer = BootstrapFewShotWithRandomSearch(
    metric=exact_match_metric,
    max_bootstrapped_demos=4,
    num_candidate_programs=8,  # Try 8 different demo sets
    num_threads=4,
)

compiled_program = optimizer.compile(
    program,
    trainset=trainset,
    valset=devset,  # Picks the best program based on validation
)
print('Best program selected from 8 candidates')

Pertimbangan Biaya Kompilasi

Kompilasi melakukan pemanggilan LLM tambahan untuk menghasilkan dan mengevaluasi prompt kandidat. Sesuaikan anggaran Anda:

  • BootstrapFewShot: sekitar 1–2 kali ukuran kumpulan data pelatihan dalam pemanggilan LLM
  • RandomSearch dengan 8 kandidat: sekitar 8–10 kali
  • MIPRO medium: sekitar 30–50 kali

Jalankan kompilasi secara luring, simpan hasilnya, lalu terapkan program yang telah disimpan. Biaya inferensi produksi Anda tidak berubah.

Memvalidasi Program yang Dikompilasi

Setelah kompilasi, selalu lakukan evaluasi pada kumpulan data pengujian yang disisihkan untuk memastikan bahwa program yang dioptimalkan benar-benar dapat digeneralisasikan. Jangan hanya memeriksa kinerja pada kumpulan data pelatihan.

import dspy

# Evaluate on test set
evaluate = dspy.Evaluate(
    devset=testset,
    metric=exact_match_metric,
    num_threads=4,
    display_progress=True,
)

# Compare uncompiled vs compiled
uncompiled_score = evaluate(uncompiled_program)
compiled_score = evaluate(compiled_program)

print(f'Uncompiled accuracy: {uncompiled_score:.1%}')
print(f'Compiled accuracy:   {compiled_score:.1%}')
print(f'Improvement: +{compiled_score - uncompiled_score:.1%}')

Menggabungkan Semuanya

Alur kerja pengoptimalan DSPy yang lengkap: definisikan signature → bangun modul → siapkan data pelatihan → pilih pengoptimal → kompilasikan → evaluasi → simpan. Inilah siklus lengkap dari gagasan hingga pipeline prompt yang dioptimalkan dan siap digunakan dalam produksi.

import dspy
from dspy.teleprompt import BootstrapFewShot

# 1. Configure LM
dspy.configure(lm=dspy.LM('openai/gpt-4o-mini', api_key='sk-...'))

# 2. Define signature and module
class QA(dspy.Signature):
    """Answer questions accurately."""
    question: str = dspy.InputField()
    answer: str = dspy.OutputField()

program = dspy.ChainOfThought(QA)

# 3. Compile
optimizer = BootstrapFewShot(metric=exact_match_metric)
compiled = optimizer.compile(program, trainset=trainset)

# 4. Save
compiled.save('production_qa.json')
print('Production program ready')

Pemeriksaan Pemahaman: BootstrapFewShot

Apa yang digunakan BootstrapFewShot dari kumpulan data pelatihan Anda untuk meningkatkan prompt yang dikompilasi?

Ringkasan: Kompilasi dan Pengoptimalan

Pengoptimalan DSPy mencari konfigurasi prompt terbaik menggunakan fungsi metrik dan kumpulan data pelatihan. BootstrapFewShot menemukan demonstrasi few-shot yang baik dari jejak yang berhasil. MIPROv2 juga mencari teks instruksi yang lebih baik. Semua pengoptimal menggunakan antarmuka compile(program, trainset=...) yang sama. Kompilasi adalah biaya luring satu kali — simpan hasilnya dengan program.save() dan terapkan program yang telah dioptimalkan tanpa biaya pengoptimalan tambahan saat inferensi.

Gratis untuk memulai

Belajar AI Prompt Engineering dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
53
Pelajaran
199

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengompilasi dan Mengoptimalkan Prompt” gratis?

Ya — teks lengkap “Mengompilasi dan Mengoptimalkan Prompt” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengompilasi dan Mengoptimalkan Prompt”?

BootstrapFewShot, MIPRO, dan pengoptimal DSPy lainnya dalam praktik. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?

Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Mengompilasi dan Mengoptimalkan Prompt” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?

Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengantar Framework DSPy
  2. Mendefinisikan Signature dan Modul
  3. Mengompilasi dan Mengoptimalkan Prompt
  4. Mengevaluasi Pipeline DSPy
← Kembali ke AI Prompt Engineering