DSPy se instalează cu pip install dspy (sau uv add dspy) și cere Python 3.10 sau mai nou; versiunea curentă pe PyPI este 3.4.1. Legătura cu modelul se face prin dspy.LM, care primește un șir "furnizor/model" în formatul LiteLLM, de exemplu "openai/gpt-6-astra" sau "anthropic/claude-sonnet-5-5". Cheia API se dă prin api_key= sau prin variabila de mediu a furnizorului (de exemplu OPENAI_API_KEY).
Din DSPy 3.4, dspy.LM folosește implicit (engine="auto") motorul nativ lm15, inclus în DSPy, pentru rutele pe care le acceptă, și LiteLLM pentru restul. Un apel direct lm("text") întoarce o listă de șiruri. Forma OpenAI lm(messages=[...]) este depreciată în 3.4 și va fi eliminată în 3.5; în locul ei se trimite un dspy.lm15.Request, care întoarce un Response. Răspunsurile sunt puse în cache implicit (cache=True), în ~/.dspy_cache sau în directorul din DSPY_CACHEDIR.
dspy.configure(lm=lm) setează modelul implicit pentru toate modulele din proces. Documentația o descrie ca pe o inițializare făcută o singură dată: primul fir de execuție care o apelează devine proprietarul ei, iar apelurile din alte fire ridică RuntimeError (sesiunile IPython sunt exceptate). Pentru schimbări locale se folosește with dspy.context(lm=...), care funcționează și în cod async și în dspy.Parallel / Module.batch, dar nu în fire pornite direct cu threading.Thread. Modulele citesc modelul la apel, nu la construcție.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
model |
Șirul "furnizor/model", de exemplu "openai/gpt-6-luna". |
model_type |
"chat" (implicit), "text" sau "responses". |
temperature / max_tokens |
Parametrii de generare ai acestui model; implicit None (se folosesc valorile furnizorului). |
cache |
Implicit True: un apel identic întoarce răspunsul salvat. |
num_retries |
Implicit 3 reîncercări, cu așteptare exponențială (1, 2, 4… secunde). |
engine |
"auto" (implicit), "lm15" (doar motorul nativ) sau "litellm". |
api_key / api_base |
Argumente suplimentare transmise clientului (cheie, adresă de server). |
dspy.configure(...) |
Setări globale: lm, adapter, track_usage, async_max_workers și altele. |
dspy.context(...) |
Aceleași setări, doar în interiorul blocului with. |
dspy.inspect_history(n=1) |
Afișează ultimele n apeluri: mesajele trimise și răspunsul primit. |
Module.set_lm(lm) |
Setează modelul pentru toți predictorii unui program, fără a schimba setarea globală. |
Exemple practice și scenarii reale
Exemplul 1: Configurarea modelului implicit
Cheia este citită din OPENAI_API_KEY. Apelul direct este util doar pentru verificare; programele folosesc module.
import dspy
lm = dspy.LM("openai/gpt-6-astra")
dspy.configure(lm=lm)
print(lm("Ce este DSPy? Răspunde într-o propoziție.")) # listă de șiruri
Exemplul 2: Un model ieftin implicit și un model mai puternic pentru un singur apel
import dspy
ieftin = dspy.LM("openai/gpt-6-luna")
puternic = dspy.LM("anthropic/claude-sonnet-5-5", max_tokens=8000)
dspy.configure(lm=ieftin)
qa = dspy.ChainOfThought("question -> answer")
rez = qa(question="Ce este un algoritm greedy?") # gpt-6-luna
with dspy.context(lm=puternic):
rez = qa(question="Demonstrează că sqrt(2) e irațional.") # claude-sonnet-5-5
dspy.inspect_history(n=1) # promptul și răspunsul ultimului apel
Exemplul 3: Consumul de tokeni pe un apel
dspy.configure(lm=ieftin, track_usage=True)
rez = qa(question="Ce este un algoritm greedy?")
print(rez.get_lm_usage())
Exemplul 4: Cerere explicită în locul messages= (DSPy 3.4)
Forma recomandată de ghidul de migrare 3.4; Request.system ține instrucțiunile, Config opțiunile de generare.
from dspy.lm15 import Config, Message, Request
request = Request(
model=lm.model,
system="Fii concis.",
messages=(Message.user("Ce este DSPy?"),),
config=Config(max_tokens=200),
)
response = lm(request)
print(response.text)
Greșeli frecvente și capcane
- Copiezi
dspy.OpenAI(...)din tutoriale vechi. Clasele separate pe furnizori nu mai există în DSPy 3.x; foloseștedspy.LM("furnizor/model")șidspy.configure(lm=...). - Trimiți
lm(messages=[{"role": ..., "content": ...}]). Funcționează în 3.4 cuDeprecationWarning, dar va fi eliminat în 3.5; folosește undspy.lm15.Request. - Apelezi
dspy.configuredin mai multe fire sau în mijlocul programului. Configurează o dată la pornire și foloseștedspy.contextpentru schimbări locale. - Te miri că același apel întoarce mereu același text. Cache-ul este activ implicit; pentru eșantioane diferite folosește
cache=Falsesau unrollout_iddiferit, cu temperatură mai mare ca zero.
Întrebări & Exemple practice:
dspy.LM, dspy.configure și dspy.contextAi o întrebare despre dspy.LM, dspy.configure și dspy.context 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.