În loc să scrieți paragrafe lungi de instrucțiuni de tipul ‘Ești un expert, te rog să citești contextul și să răspunzi la întrebare:’, în DSPy definiți o Semnătură (Signature) scurtă și formală: context, question -> answer.
O semnătură specifică doar ce trebuie să facă modelul (intrările și ieșirile necesare), nu cum să o facă. Pe baza acestei semnături, DSPy instanțiază Module Declarative consacrate: dspy.Predict (execuție directă), dspy.ChainOfThought (adaugă automat raționament intern înainte de răspuns) sau dspy.ReAct (orchestrează apeluri de unelte externe).
Modulele DSPy pot fi compuse în clase Python curate care moștenesc dspy.Module (similar cu `torch.nn.Module` din PyTorch), oferind o structură orientată pe obiecte care poate fi testată, versionată și compilată algoritmic.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
dspy.Signature |
Definiția declarativă a câmpurilor de intrare (`InputField`) și de ieșire (`OutputField`). |
dspy.ChainOfThought(Signature) |
Modulul ce injectează automat un câmp intermediar `rationale` în procesul de rezolvare. |
dspy.Module |
Clasa de bază pentru crearea de conducte multi-pas cu metodă obligatorie `forward()`. |
dspy.InputField / dspy.OutputField |
Descriptorii cu tipuri opționale și descrieri concise ale datelor. |
Exemple practice și cod
Exemplul 1: Construirea unui modul DSPy de clasificare și rezumare a știrilor
Codul Python complet folosind semnături declarative.
import dspy
# 1. Configurăm modelul de limbaj dorit:
lm = dspy.LM('ollama/llama3.1:8b', api_base='http://localhost:11434')
dspy.configure(lm=lm)
# 2. Definim semnătura comportamentală:
class AnalizaStire(dspy.Signature):
"""Analizează un articol de știri, extrage categoria principală și oferă un rezumat scurt."""
articol_text = dspy.InputField(desc="Textul complet al știrii")
categorie = dspy.OutputField(desc="Una din: Tehnologie, Economie, Politică, Sport")
rezumat = dspy.OutputField(desc="Rezumat de maxim 2 propoziții în limba română")
# 3. Instanțiem modulul cu Chain-of-Thought nativ:
modul = dspy.ChainOfThought(AnalizaStire)
# 4. Executăm modulul pe o știre nouă:
rezultat = modul(articol_text="Banca Națională a menținut dobânda de referință la 6.5% pe fondul inflației...")
print("Categorie:", rezultat.categorie)
print("Rezumat:", rezultat.rezumat)
print("Raționament intern DSPy:", rezultat.rationale)
Rezultat & Impact
Execuție structurată curată fără nicio linie de prompt redactată manual.
Greșeli frecvente și bune practici
- Încercarea de a introduce instrucțiuni lungi de promptare în descrierea câmpurilor `InputField`; păstrați descrierile scurte și neutre, lăsând optimizatorul să găsească cel mai bun prompt.
- Omiterea configurării modelului de limbaj cu `dspy.configure()` înainte de instanțierea modulelor.