dspy.LM, dspy.configure și dspy.context în DSPy & Programare Algoritmică LLM

dspy.LM creează clientul pentru un model dat ca furnizor/model, dspy.configure îl setează ca model implicit pentru tot procesul, iar dspy.context îl schimbă doar într-un bloc de cod.

Sintaxă & invocare
lm = dspy.LM("openai/gpt-6-astra")
dspy.configure(lm=lm)
with dspy.context(lm=alt_lm):
    ...

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ște dspy.LM("furnizor/model") și dspy.configure(lm=...).
  • Trimiți lm(messages=[{"role": ..., "content": ...}]). Funcționează în 3.4 cu DeprecationWarning, dar va fi eliminat în 3.5; folosește un dspy.lm15.Request.
  • Apelezi dspy.configure din mai multe fire sau în mijlocul programului. Configurează o dată la pornire și folosește dspy.context pentru 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=False sau un rollout_id diferit, cu temperatură mai mare ca zero.

Noțiuni și module înrudite

Învață AI • Comunitate & Q&A

Întrebări & Exemple practice: dspy.LM, dspy.configure și dspy.context

Ai 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.

Comunitate AI Adaugă o întrebare sau distribuie un cod / prompt

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.