Menyusun dan Mengoptimumkan Gesaan
BootstrapFewShot, MIPRO dan pengoptimum DSPy lain secara praktikal.
Menyusun dan Mengoptimumkan Gesaan ialah pelajaran Kejuruteraan Arahan AI percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kejuruteraan Arahan AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kejuruteraan Arahan AI merangkumi sejumlah 4 pelajaran.
Maksud Pengoptimuman dalam DSPy
Pengoptimuman DSPy (dipanggil kompilasi) mencari konfigurasi gesaan terbaik untuk program anda berdasarkan set latihan dan metrik. Pengoptimum mencari antara kemungkinan contoh dengan beberapa contoh, arahan dan demonstrasi penaakulan.
Anda menjalankan kompilasi sekali, menyimpan hasilnya dan menggunakan program yang dioptimumkan. Pada masa inferens, program itu hanya membuat panggilan LLM yang pantas — tiada lagi beban tambahan pengoptimuman.
Mentakrifkan Fungsi Metrik
Setiap pengoptimum DSPy memerlukan fungsi metrik yang memberikan skor kepada ramalan berdasarkan keluaran yang dijangka. Fungsi ini mengembalikan nombor (atau nilai boolean) — lebih tinggi adalah lebih baik.
Metrik ialah isyarat yang digunakan oleh pengoptimum untuk menentukan sama ada sesuatu konfigurasi gesaan itu 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)Menyediakan Set Latihan
DSPy memerlukan set latihan yang mengandungi objek dspy.Example. Setiap contoh menentukan masukan dan keluaran yang dijangka. Malah 20–50 contoh selalunya mencukupi 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)Pengoptimum BootstrapFewShot
BootstrapFewShot ialah pengoptimum DSPy yang paling biasa. Ia menjalankan program anda pada set latihan, mengumpulkan jejak yang berjaya (pasangan masukan-keluaran yang melepasi metrik), dan menggunakan jejak tersebut sebagai demonstrasi dengan beberapa contoh dalam gesaan terkompil.
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')Pengoptimum MIPRO
MIPRO (Cadangan dan Pengoptimuman Arahan Berbilang Gesaan) ialah pengoptimum yang lebih berkuasa. Ia bukan sahaja memilih contoh dengan beberapa contoh, malah mencari teks arahan yang lebih baik untuk disertakan dalam gesaan.
MIPRO memerlukan lebih banyak panggilan LLM semasa kompilasi, tetapi selalunya mencapai ketepatan 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')Rupa Gesaan Terkompil
Selepas kompilasi, DSPy membenamkan demonstrasi dengan beberapa contoh yang dioptimumkan ke dalam gesaan. Anda boleh memeriksanya dengan meneliti peramal program terkompil.
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')Antara Muka teleprompter.compile()
Semua pengoptimum DSPy berkongsi antara muka compile() yang sama. Keseragaman ini bermakna anda boleh menukar pengoptimum tanpa mengubah kod 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 menjana banyak set demonstrasi calon dan memilih set yang berprestasi terbaik pada set pengesahan.
Ia ialah jalan tengah yang baik antara kesederhanaan BootstrapFewShot dengan kuasa 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 Kos Kompilasi
Kompilasi membuat panggilan LLM tambahan untuk menjana dan menilai gesaan calon. Sediakan belanjawan yang sewajarnya:
- BootstrapFewShot: kira-kira 1–2 kali saiz set latihan dalam panggilan LLM
- RandomSearch dengan 8 calon: kira-kira 8–10 kali
- MIPRO sederhana: kira-kira 30–50 kali
Jalankan kompilasi di luar talian, simpan hasilnya dan gunakan program yang disimpan. Kos inferens pengeluaran anda tidak berubah.
Mengesahkan Program Terkompil
Selepas kompilasi, sentiasa lakukan penilaian pada set ujian yang diketepikan untuk mengesahkan bahawa program yang dioptimumkan benar-benar dapat digeneralisasikan. Jangan hanya menyemak prestasi pada set latihan.
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 Kesemuanya
Aliran kerja pengoptimuman DSPy yang lengkap: takrifkan signature → bina modul → sediakan data latihan → pilih pengoptimum → kompilasikan → nilai → simpan. Inilah kitaran lengkap daripada idea kepada aliran kerja gesaan yang dioptimumkan dan sedia untuk pengeluaran.
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')Semakan Pengetahuan: BootstrapFewShot
Apakah yang digunakan oleh BootstrapFewShot daripada set latihan anda untuk menambah baik gesaan terkompil?
Imbas Kembali: Mengkompilasi dan Mengoptimumkan
Pengoptimuman DSPy mencari konfigurasi gesaan terbaik menggunakan fungsi metrik dan set latihan. BootstrapFewShot mencari demonstrasi dengan beberapa contoh yang baik daripada jejak yang berjaya. MIPROv2 turut mencari teks arahan yang lebih baik. Semua pengoptimum berkongsi antara muka compile(program, trainset=...). Kompilasi ialah kos luar talian sekali sahaja — simpan hasilnya dengan program.save() dan gunakan program yang dioptimumkan tanpa kos tambahan pada masa inferens.
Pelajari Kejuruteraan Arahan AI dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 53
- Pelajaran
- 199
Soalan Lazim
Adakah pelajaran “Menyusun dan Mengoptimumkan Gesaan” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kejuruteraan Arahan AI, termasuk “Menyusun dan Mengoptimumkan Gesaan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kejuruteraan Arahan AI merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menyusun dan Mengoptimumkan Gesaan”?
BootstrapFewShot, MIPRO dan pengoptimum DSPy lain secara praktikal. Anda berlatih Kejuruteraan Arahan AI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Kejuruteraan Arahan AI?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Kejuruteraan Arahan AI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Menyusun dan Mengoptimumkan Gesaan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kejuruteraan Arahan AI ini?
Ya. Setiap pelajaran Kejuruteraan Arahan AI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pengenalan kepada Rangka Kerja DSPy
- Mentakrifkan Tandatangan dan Modul
- Menyusun dan Mengoptimumkan Gesaan
- Menilai Pipeline DSPy