Ghid operator pentru DSPy
Ce face
DSPy este un framework pentru programarea declarativă a sistemelor cu modele de limbaj. În loc să tratezi promptul ca pe o incantație fragilă, definești interfața: ce intră și ce trebuie să iasă, de tipul question -> answer, context, question -> answer sau o clasă dspy.Signature cu câmpuri explicite.
Pe scurt: DSPy mută munca de la „mai schimbăm promptul până pare viu” la „definim semnătura, modulul, metrica și datele, apoi optimizăm sistematic”. Mai puțină vrăjitorie. Mai multă inginerie.
Skill-ul acoperă:
- programe LM declarative;
- module reutilizabile precum
Predict,ChainOfThought,ReActșiProgramOfThought; - pipeline-uri AI multi-stage;
- RAG, agenți cu tool-uri și clasificatoare;
- optimizare automată cu exemple și metrici;
- evaluare comparabilă între variante;
- configurare pentru provideri precum OpenAI, Anthropic Claude sau modele locale, dacă mediul are pachetele, cheile și serviciile necesare.
Vezi și All guides pentru restul capabilităților.
Când îmi folosește
Folosește DSPy când construiești ceva mai serios decât un prompt unic.
Exemple bune:
- un sistem de question answering cu pași multipli;
- un RAG care recuperează context, îl filtrează sau îl rerankează, apoi răspunde;
- un clasificator care trebuie testat pe exemple reale;
- un agent care folosește tool-uri definite explicit;
- un pipeline unde vrei să schimbi modelul fără să rescrii toată logica;
- o sarcină unde ai exemple de training sau validation și vrei optimizare măsurabilă.
Nu e prima alegere pentru un test de două minute. Pentru prototipuri foarte simple, un prompt manual este adesea suficient. DSPy devine util când ai nevoie de control, modularitate, evaluare și îmbunătățire repetabilă.
Cum îl invoc / declanșez
Sursa nu definește un trigger universal de chat pentru acest skill. Invocarea depinde de runtime-ul unde DSPy este disponibil și de proiectul în care rulează codul. Nu presupune că există un agent deja conectat, un retriever deja indexat sau chei API deja configurate.
Instalare de bază:
pip install dspyVersiune de development:
pip install git+https://github.com/stanfordnlp/dspy.gitProvideri opționali:
pip install dspy[openai]
pip install dspy[anthropic]
pip install dspy[all]În Python, configurezi modelul și definești o semnătură:
import dspy
lm = dspy.Claude(model="claude-sonnet-4-5")
dspy.settings.configure(lm=lm)
class QA(dspy.Signature):
"""Answer questions with short factual answers."""
question = dspy.InputField()
answer = dspy.OutputField(desc="short factual answer")
qa = dspy.Predict(QA)
response = qa(question="What is the capital of France?")
print(response.answer)Cheile API nu se pun în ghid, loguri sau cod public. Folosește mecanismul sigur al mediului: variabile de mediu, secret manager sau configurația runtime-ului.
Exemplu practic
Un RAG simplu primește o întrebare, recuperează pasaje relevante, apoi generează răspunsul.
import dspy
class RAG(dspy.Module):
def __init__(self, num_passages=3):
super().__init__()
self.retrieve = dspy.Retrieve(k=num_passages)
self.generate = dspy.ChainOfThought("context, question -> answer")
def forward(self, question):
context = self.retrieve(question).passages
return self.generate(context=context, question=question)
rag = RAG()Optimizare cu exemple și metrică:
from dspy.teleprompt import BootstrapFewShot
def validate_answer(example, pred, trace=None):
return example.answer.lower() in pred.answer.lower()
optimizer = BootstrapFewShot(metric=validate_answer)
optimized_rag = optimizer.compile(rag, trainset=trainset)Diferența importantă: nu doar speri că promptul e mai bun. Definești o metrică, dai exemple reprezentative și compilezi modulul. Dacă metrica e proastă, DSPy va optimiza direcția greșită cu o eleganță funerară.
Output / unde aterizează
Output-ul depinde de signature și de modulul folosit.
dspy.Predict întoarce câmpurile definite în semnătură, de exemplu answer. dspy.ChainOfThought poate întoarce și rationale, adică raționamentul generat înainte de răspuns. Un modul RAG poate întoarce răspuns, context, scoruri sau orice câmp definești tu în dspy.Prediction.
Modelele optimizate pot fi salvate și încărcate explicit:
optimized_qa.save("qa_model.json")
loaded_qa = dspy.ChainOfThought("question -> answer")
loaded_qa.load("qa_model.json")DSPy nu decide singur unde se publică rezultatele. Fișierele ajung unde le salvează codul tău. Datele folosite de retriever ajung în backend-ul configurat de proiect, nu într-un loc universal garantat.
Limite / gotchas
DSPy nu înlocuiește datele bune, metricile bune sau judecata tehnică. Optimizatoare precum BootstrapFewShot, MIPRO și BootstrapFinetune au nevoie de exemple reprezentative. Cu date slabe, obții o eroare optimizată. Mai curată. Tot eroare.
Providerii nu sunt disponibili doar pentru că apar în exemple. OpenAI, Anthropic, Ollama sau alte modele cer instalare, configurare, acces de rețea și credențiale valide. Nu include chei API în notebook-uri, repo-uri, capturi sau ghiduri publice.
Retrieval-ul nu apare magic. Pentru RAG ai nevoie de documente indexate și de un retriever configurat. Agenții cu ReAct pot folosi doar tool-urile pe care le definești explicit; nu primesc autonomie generală, acces nelimitat la date sau permisiunea de a face acțiuni externe fără controlul codului tău.
Folosește signature-uri descriptive. input -> output merge pentru joacă. Pentru sisteme reale, clasele dspy.Signature cu câmpuri documentate sunt mai ușor de testat, optimizat și întreținut.