DSPy (Declarative Self-improving Python, după README-ul proiectului) este un framework Python dezvoltat la Stanford NLP. În loc să scrii prompturi lungi de mână, descrii ce intră și ce iese dintr-un pas (o semnătură), alegi un modul care o execută și lași un optimizator să caute instrucțiunile și exemplele care maximizează o metrică.
Proiectul vine din Demonstrate-Search-Predict (Khattab et al., decembrie 2022). Lucrarea „DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines” (Khattab et al., octombrie 2023) a arătat că pipeline-uri DSPy compilate automat au depășit few-shot prompting obișnuit, în general cu peste 25% la GPT-3.5 și cu peste 65% la llama2-13b-chat, pe sarcinile din lucrare.
Versiunea curentă din documentația oficială (dspy.ai) este 3.4.1; instalarea se face cu pip install -U dspy. Pentru API-ul detaliat vezi și secțiunea DSPy.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
dspy.LM / dspy.configure |
dspy.LM("furnizor/model") creează clientul pentru model; dspy.configure(lm=lm) îl setează ca model implicit pentru toate modulele. |
dspy.Signature |
Descrierea declarativă a intrărilor și ieșirilor: ca șir ("question -> answer") sau ca clasă cu câmpuri dspy.InputField și dspy.OutputField. Docstring-ul clasei devine descrierea sarcinii. |
dspy.Module |
Strategia care execută semnătura: dspy.Predict, dspy.ChainOfThought, dspy.ReAct, dspy.ProgramOfThought, dspy.Refine, dspy.BestOfN și altele. Modulele proprii moștenesc dspy.Module și definesc forward(). |
Optimizatori |
Algoritmi care ajustează instrucțiunile și/sau exemplele (în codul vechi apar sub numele de teleprompters): GEPA, MIPROv2, BootstrapFewShot, BootstrapFewShotWithRandomSearch, COPRO, SIMBA, BootstrapFinetune și alții. |
Metrică |
Funcție Python care primește exemplul și predicția și returnează un scor; prin convenție, între 0.0 și 1.0. Optimizatorul are nevoie de metrică și de exemple de antrenare. |
Exemple practice și scenarii reale
Exemplul 1: Semnătură, modul și apel
Modelul din dspy.LM este cel din exemplul de pe dspy.ai; poți folosi orice model acceptat.
import dspy
lm = dspy.LM("openai/gpt-5.4-nano")
dspy.configure(lm=lm)
class IntrebareRaspuns(dspy.Signature):
"""Răspunde la întrebare folosind doar contextul dat."""
context: str = dspy.InputField(desc="fragmente din documente")
intrebare: str = dspy.InputField()
raspuns: str = dspy.OutputField(desc="răspuns scurt, în română")
qa = dspy.ChainOfThought(IntrebareRaspuns)
rezultat = qa(context="...", intrebare="...")
print(rezultat.raspuns)
Exemplul 2: Optimizarea cu o metrică
trainset este o listă de dspy.Example(...).with_inputs("context", "intrebare"). BootstrapFewShot alege exemple demonstrative care trec metrica; GEPA și MIPROv2 rescriu și instrucțiunile.
def potrivire_exacta(example, pred, trace=None):
return float(example.raspuns.strip().lower() == pred.raspuns.strip().lower())
optimizator = dspy.BootstrapFewShot(metric=potrivire_exacta)
qa_optimizat = optimizator.compile(qa, trainset=trainset)
Greșeli frecvente și capcane
- Pornești optimizarea fără o metrică clară și fără un set de evaluare separat. Optimizatorul maximizează exact metrica dată; dacă ea măsoară altceva decât vrei, programul va fi optimizat pentru lucrul greșit.
- Copiezi cod din tutoriale vechi. Numele s-au schimbat între versiuni (teleprompters au devenit optimizers), iar modelul se configurează acum cu
dspy.LMșidspy.configure. - Consideri că optimizarea înlocuiește testarea. Programul optimizat trebuie evaluat pe date pe care optimizatorul nu le-a văzut.
Întrebări & Discuții: DSPy (Declarative Self-improving Python)
Ai o întrebare despre DSPy (Declarative Self-improving Python) sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.