Tekoälyn prompt engineering · Oppitunti

Allekirjoitusten ja moduulien määrittäminen

Allekirjoitusten syntaksi, ChainOfThought, ReAct ja mukautetut DSPy-moduulit

Oppitunti 2/413 vaihetta

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)  # positive

ChainOfThought-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 miles

ReAct-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 automatically

Ohjelmien 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 result

Tietotesti: 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ä.

Aloita maksutta

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

  1. Johdatus DSPy-kehykseen
  2. Allekirjoitusten ja moduulien määrittäminen
  3. Kehotteiden kääntäminen ja optimointi
  4. DSPy-putkien arviointi
← Takaisin: Tekoälyn prompt engineering