Unul dintre cele mai mari avantaje ale framework-ului DSPy este decuplarea totală a fazei de dezvoltare/optimizare de faza de rulare în producție (Runtime). Nu este nevoie să rulați compilatorul sau optimizatorii la fiecare pornire a serverului de aplicație.
Odată ce procesul de compilare a atins scorul maxim dorit pe setul de validare, programul compilat este salvat pe disc într-un fișier JSON compact prin comanda program.save('production_rag.json'). Acest fișier conține toate instrucțiunile de sistem calibrate și demonstrațiile few-shot ideale.
În mediul de producție (de exemplu un API FastAPI sau un worker Celery), aplicația instanțiază modulul DSPy brut și încarcă fișierul JSON prin program.load('production_rag.json') în mai puțin de o milisecundă. Rularea este instantanee, predictibilă și consumă doar tokenii strict necesari fără niciun overhead suplimentar.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
program.save(path) |
Serializarea instrucțiunilor și a exemplelor optimizate într-un fișier JSON curat. |
program.load(path) |
Încărcarea instantanee a stării optimizate în memorie la pornirea serverului. |
Model Portability |
Posibilitatea de a re-compila același program Python pentru alt model de limbaj printr-o simplă schimbare de configurare. |
Zero-Overhead Inference |
În producție, DSPy funcționează ca un wrapper nativ ultra-rapid peste apelurile de API. |
Exemple practice și cod
Exemplul 1: Salvarea programului optimizat și încărcarea lui într-un API FastAPI
Fluxul complet de la faza de antrenare la servirea live prin API.
# 1. ÎN SCRIPTUL DE OPTIMIZARE (offline):
program_compilat = optimizator.compile(program_brut, trainset=date_antrenare)
program_compilat.save("agenti/asistent_suport_v1.json")
print("Program optimizat salvat pe disc!")
# -----------------------------------------------------
# 2. ÎN APLICAȚIA DE PRODUCȚIE (FastAPI):
from fastapi import FastAPI
import dspy
app = FastAPI()
# Inițializăm modelul și încărcăm programul compilat o singură dată la startup:
lm = dspy.LM('ollama/llama3.3:70b')
dspy.configure(lm=lm)
asistent = dspy.ChainOfThought("intrebare_client -> solutie_tehnica")
asistent.load("agenti/asistent_suport_v1.json")
@app.post("/asistenta")
def raspunde_client(intrebare: str):
rezultat = asistent(intrebare_client=intrebare)
return {"raspuns": rezultat.solutie_tehnica}
Rezultat & Impact
Servire în producție cu zero latență de compilare și rezultate optime garantate.
Greșeli frecvente și bune practici
- Încărcarea unui fișier JSON salvat pe o arhitectură de module cu semnături modificate, ceea ce provoacă erori de asociere a câmpurilor.
- Recompilarea programului la fiecare cerere HTTP de intrare în loc de încărcarea o singură dată a fișierului salvat la inițializarea serverului.