Mendefinisikan Signature dan Modul
Sintaks signature, ChainOfThought, ReAct, dan modul DSPy kustom.
Mendefinisikan Signature dan Modul adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 2 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.
Signature Adalah Kontrak Bertipe
Sebuah signature DSPy adalah kelas Python yang menyatakan input dan output dari suatu langkah penalaran. Anggaplah signature sebagai kontrak fungsi bertipe untuk pemanggilan LLM Anda.
Docstring menjadi deskripsi tugas. Anotasi kolom memberi tahu DSPy apa yang harus dihasilkan. Anda tidak pernah menulis teks prompt yang sebenarnya — DSPy menurunkannya dari deklarasi ini.
Mendefinisikan Signature Dasar
Signature minimal merupakan turunan dari dspy.Signature dan memberi anotasi pada kolom sebagai InputField atau OutputField. Docstring kelas menyediakan instruksi tugas.
import dspy
class QASignature(dspy.Signature):
"""Answer the question based on the given context."""
context: str = dspy.InputField(desc='Relevant background text')
question: str = dspy.InputField(desc='The question to answer')
answer: str = dspy.OutputField(desc='A concise answer')
# Inspect what DSPy sees
print(QASignature.instructions) # The docstring
print(list(QASignature.input_fields.keys())) # ['context', 'question']
print(list(QASignature.output_fields.keys())) # ['answer']Beberapa Kolom Output
Signature dapat memiliki beberapa kolom output. DSPy akan meminta model menghasilkan semuanya dalam satu pemanggilan. Hal ini berguna untuk mengekstrak informasi terstruktur.
import dspy
class EntityExtraction(dspy.Signature):
"""Extract named entities from the text."""
text: str = dspy.InputField()
people: list[str] = dspy.OutputField(desc='List of person names mentioned')
organizations: list[str] = dspy.OutputField(desc='List of organization names')
locations: list[str] = dspy.OutputField(desc='List of place names')
extractor = dspy.Predict(EntityExtraction)
result = extractor(text='Elon Musk founded SpaceX in Hawthorne, California.')
print(result.people, result.organizations, result.locations)Modul Predict
dspy.Predict adalah modul yang paling sederhana. Modul ini menerima signature dan secara langsung meminta LM menghasilkan output. Tidak ada kerangka penalaran yang ditambahkan — hanya prompt terstruktur yang sesuai dengan signature.
Gunakan Predict jika tugasnya sederhana dan tidak memerlukan langkah penalaran eksplisit.
import dspy
class Classify(dspy.Signature):
"""Classify the sentiment of the review."""
review: str = dspy.InputField()
sentiment: str = dspy.OutputField(desc='positive, negative, or neutral')
# Predict wraps the signature with a direct prompt
classifier = dspy.Predict(Classify)
result = classifier(review='The food was amazing and the service was excellent!')
print(result.sentiment) # positiveModul ChainOfThought
dspy.ChainOfThought melengkapi signature dengan kolom perantara reasoning. Model terlebih dahulu menuliskan penalarannya, lalu menghasilkan jawaban akhir.
Modul ini secara konsisten meningkatkan akurasi pada masalah bertahap tanpa Anda perlu menulis instruksi prompt chain-of-thought apa pun.
import dspy
class MathSolver(dspy.Signature):
"""Solve the math problem."""
problem: str = dspy.InputField()
answer: str = dspy.OutputField(desc='The numerical answer')
# ChainOfThought adds a 'reasoning' step automatically
solver = dspy.ChainOfThought(MathSolver)
result = solver(problem='If a train travels 60 mph for 2.5 hours, how far does it go?')
print(result.reasoning) # Step-by-step reasoning
print(result.answer) # 150 milesModul ReAct
dspy.ReAct menerapkan loop Reason + Act. Model bergantian antara langkah penalaran dan pemanggilan alat, sehingga modul ini ideal untuk agen yang perlu mencari, menghitung, atau mengambil data.
Anda menyediakan daftar alat (fungsi Python dengan docstring), lalu DSPy secara otomatis menangani penyisipan keduanya secara bergantian.
import dspy
def search_web(query: str) -> str:
"""Search the web and return relevant results."""
# In production, call a real search API
return f'Search results for: {query}'
def calculate(expression: str) -> str:
"""Evaluate a mathematical expression."""
return str(eval(expression))
class ResearchQA(dspy.Signature):
"""Answer the question using web search and calculation as needed."""
question: str = dspy.InputField()
answer: str = dspy.OutputField()
agent = dspy.ReAct(ResearchQA, tools=[search_web, calculate])
result = agent(question='What is 15% of 847?')
print(result.answer)Merangkai Modul Menjadi Program
Kekuatan sebenarnya muncul saat modul dirangkai menjadi program bertahap. Buat subkelas dspy.Module, definisikan submodul di dalam __init__, lalu implementasikan forward() untuk menghubungkan semuanya.
import dspy
class RetrieveAndAnswer(dspy.Module):
def __init__(self):
super().__init__()
self.retrieve = dspy.Retrieve(k=3) # Retrieves top-3 passages
self.generate = dspy.ChainOfThought('context, question -> answer')
def forward(self, question):
passages = self.retrieve(question).passages
context = '\n'.join(passages)
return self.generate(context=context, question=question)
# This is a complete RAG pipeline in ~10 lines
rag = RetrieveAndAnswer()
result = rag(question='What are the main causes of climate change?')
print(result.answer)Singkatan Signature Sebaris
Untuk kasus sederhana, DSPy menerima signature string sebaris: 'input1, input2 -> output1, output2'. Ini praktis untuk pembuatan prototipe cepat tanpa mendefinisikan kelas lengkap.
import dspy
# Full class signature
class Translate(dspy.Signature):
"""Translate text to French."""
text: str = dspy.InputField()
translation: str = dspy.OutputField()
# Equivalent inline shorthand
translator_v1 = dspy.Predict(Translate)
translator_v2 = dspy.Predict('text -> translation') # Less metadata
# Both work the same way
result = translator_v1(text='Hello world')
print(result.translation)Deskripsi Kolom Itu Penting
Parameter desc dalam InputField dan OutputField disertakan dalam prompt yang dihasilkan. Deskripsi yang baik memandu model secara tepat.
Anggaplah desc sebagai dokumentasi tingkat kolom yang muncul dalam prompt di samping nama kolom.
import dspy
class Summarize(dspy.Signature):
"""Summarize the article for a busy executive."""
article: str = dspy.InputField(
desc='The full article text to summarize'
)
summary: str = dspy.OutputField(
desc='3-5 bullet points highlighting key decisions and numbers'
)
confidence: float = dspy.OutputField(
desc='Your confidence in the summary accuracy from 0.0 to 1.0'
)
summarizer = dspy.Predict(Summarize)
# DSPy constructs a prompt using all the desc values automaticallyMenyimpan dan Memuat Program
Setelah pengoptimalan, simpan program yang telah dikompilasi agar Anda tidak perlu menjalankan pengoptimalan ulang setiap kali. DSPy membuat serialisasi status yang telah dioptimalkan ke file JSON.
import dspy
class QA(dspy.Signature):
"""Answer questions accurately."""
question: str = dspy.InputField()
answer: str = dspy.OutputField()
program = dspy.ChainOfThought(QA)
# After optimization, save the compiled state
program.save('optimized_qa.json')
# Load it later without re-running optimization
loaded_program = dspy.ChainOfThought(QA)
loaded_program.load('optimized_qa.json')
result = loaded_program(question='What is the speed of light?')
print(result.answer)Assertion untuk Batasan Output
Assertion DSPy memungkinkan Anda menyatakan batasan pada output. Jika model melanggar batasan tersebut, DSPy secara otomatis mencoba kembali dengan umpan balik perbaikan — Anda tidak perlu menulis logika percobaan ulang secara manual.
import dspy
class ShortAnswer(dspy.Signature):
"""Answer in at most 10 words."""
question: str = dspy.InputField()
answer: str = dspy.OutputField()
class ConstrainedQA(dspy.Module):
def __init__(self):
super().__init__()
self.predict = dspy.Predict(ShortAnswer)
def forward(self, question):
result = self.predict(question=question)
# Assert: answer must be at most 10 words
dspy.Assert(
len(result.answer.split()) <= 10,
'The answer must be 10 words or fewer.'
)
return resultPemeriksaan Pemahaman: ChainOfThought
Apa yang ditambahkan dspy.ChainOfThought dibandingkan dengan dspy.Predict saat menggunakan signature yang sama?
Ringkasan: Signature dan Modul
Signature DSPy adalah deklarasi kelas bertipe yang menjelaskan apa yang harus dilakukan oleh suatu langkah LLM — input, output, dan instruksi docstring. Modul seperti Predict, ChainOfThought, dan ReAct menerapkan strategi penalaran yang berbeda di sekitar sebuah signature. Anda merangkai beberapa modul di dalam subkelas dspy.Module untuk membangun pipeline bertahap. Nilai desc pada kolom memandu model dalam prompt yang dibuat otomatis, sedangkan Assertion menegakkan batasan output dengan percobaan ulang otomatis.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendefinisikan Signature dan Modul” gratis?
Ya — teks lengkap “Mendefinisikan Signature dan Modul” 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 “Mendefinisikan Signature dan Modul”?
Sintaks signature, ChainOfThought, ReAct, dan modul DSPy kustom. 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 2 dari 4.
Berapa lama pelajaran “Mendefinisikan Signature dan Modul” 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
- Pengantar Framework DSPy
- Mendefinisikan Signature dan Modul
- Mengompilasi dan Mengoptimalkan Prompt
- Mengevaluasi Pipeline DSPy