Allekirjoitusten ja moduulien määrittäminen
Allekirjoitusten syntaksi, ChainOfThought, ReAct ja mukautetut DSPy-moduulit
Allekirjoitusten ja moduulien määrittäminen on ilmainen Tekoälyn prompt engineering-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Tekoälyn prompt engineering-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Signatuurit ovat tyypitettyjä sopimuksia
DSPyn signatuuri on Python-luokka, joka ilmoittaa päättelyvaiheen syötteet ja tulosteet. Ajatelkaa sitä tyypitettynä funktiosopimuksena LLM-kutsulle.
Docstringistä tulee tehtävän kuvaus. Kenttien annotaatiot kertovat DSPylle, mitä sen tulee tuottaa. Varsinaista kehotetekstiä ei tarvitse kirjoittaa — DSPy johtaa sen tästä ilmoituksesta.
Perussignatuurin määrittäminen
Minimaalinen signatuuri perii luokan dspy.Signature ja merkitsee kentät tyypeillä InputField tai OutputField. Luokan docstring sisältää tehtävän ohjeen.
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']Useita tulostekenttiä
Signatuurissa voi olla useita tulostekenttiä. DSPy ohjaa mallin tuottamaan ne kaikki yhdellä kutsulla. Tämä on hyödyllistä jäsenneltyjen tietojen poiminnassa.
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)Predict-moduuli
dspy.Predict on yksinkertaisin moduuli. Se ottaa signatuurin ja pyytää kielimallia tuottamaan tulosteen suoraan. Se ei lisää päättelyrakenteita, vaan muodostaa signatuuria vastaavan jäsennellyn kehotteen.
Käyttäkää Predict-moduulia, kun tehtävä on suoraviivainen eikä edellytä nimenomaisia päättelyvaiheita.
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) # positiveChainOfThought-moduuli
dspy.ChainOfThought täydentää signatuuria ylimääräisellä reasoning-kentällä. Malli kirjoittaa ensin päättelynsä auki ja tuottaa sen jälkeen lopullisen vastauksen.
Tämä parantaa johdonmukaisesti monivaiheisten ongelmien tarkkuutta ilman, että Teidän tarvitsee kirjoittaa chain-of-thought-kehotteiden ohjeita.
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 milesReAct-moduuli
dspy.ReAct toteuttaa Reason + Act -silmukan. Malli vuorottelee päättelyvaiheiden ja työkalukutsujen välillä, joten se sopii erinomaisesti agenteille, joiden on haettava tietoa, laskettava tai noudettava dataa.
Annatte sille luettelon työkaluista eli Python-funktioista, joissa on docstringit, ja DSPy huolehtii vuorottelusta automaattisesti.
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)Moduulien koostaminen ohjelmiksi
Varsinainen hyöty saadaan koostamalla moduuleja monivaiheisiksi ohjelmiksi. Perikää dspy.Module, määritelkää alimuodulit __init__-metodissa ja toteuttakaa forward() niiden yhdistämiseksi.
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)Signatuurin lyhyt muoto
Yksinkertaisissa tapauksissa DSPy hyväksyy merkkijonona ilmoitetun signatuurin: 'input1, input2 -> output1, output2'. Tämä on kätevää nopeassa prototyyppien luonnissa ilman kokonaisen luokan määrittämistä.
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)Kenttien kuvauksilla on merkitystä
InputField- ja OutputField-kenttien desc-parametri sisällytetään muodostettuun kehotteeseen. Hyvät kuvaukset ohjaavat mallia täsmällisesti.
Ajatelkaa desc-parametria kenttäkohtaisena dokumentaationa, joka näkyy kehotteessa kentän nimen vieressä.
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 automaticallyOhjelmien tallentaminen ja lataaminen
Optimoinnin jälkeen tallentakaa käännetty ohjelma, jotta optimointia ei tarvitse suorittaa uudelleen joka kerta. DSPy serialisoi optimoidun tilan JSON-tiedostoon.
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)Assertions tulosteiden rajoitteisiin
DSPyn Assertions-toiminnolla voitte ilmoittaa tulosteille asetettavat rajoitteet. Jos malli rikkoo rajoitetta, DSPy yrittää automaattisesti uudelleen korjaavan palautteen avulla — manuaalista uudelleenyrityslogiikkaa ei tarvita.
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 resultTietotesti: ChainOfThought
Mitä dspy.ChainOfThought lisää verrattuna dspy.Predict-moduuliin, kun käytössä on sama signatuuri?
Kertaus: signatuurit ja moduulit
DSPyn signatuurit ovat tyypitettyjä luokkailmoituksia, jotka kuvaavat, mitä LLM-vaiheen tulee tehdä — syötteet, tulosteet ja docstring-ohje. Moduulit, kuten Predict, ChainOfThought ja ReAct, toteuttavat erilaisia päättelystrategioita signatuurin ympärillä. Koostamalla useita moduuleja dspy.Module-aliluokassa rakennatte monivaiheisia putkistoja. Kenttien desc-arvot ohjaavat mallia automaattisesti muodostetussa kehotteessa, ja Assertions valvovat tulosteiden rajoitteita automaattisilla uudelleenyrityksillä.
Opi Tekoälyn prompt engineering tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 199
Usein kysytyt kysymykset
Onko oppitunti ”Allekirjoitusten ja moduulien määrittäminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Tekoälyn prompt engineering-oppimispolun 3 oppituntia, myös oppitunnin “Allekirjoitusten ja moduulien määrittäminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Allekirjoitusten ja moduulien määrittäminen”?
Allekirjoitusten syntaksi, ChainOfThought, ReAct ja mukautetut DSPy-moduulit Harjoittelet Tekoälyn prompt engineering-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyn prompt engineering-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyn prompt engineering-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Allekirjoitusten ja moduulien määrittäminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyn prompt engineering-oppitunnilla?
Kyllä. Jokainen Tekoälyn prompt engineering-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Johdatus DSPy-kehykseen
- Allekirjoitusten ja moduulien määrittäminen
- Kehotteiden kääntäminen ja optimointi
- DSPy-putkien arviointi