Un set de date DSPy este o listă de obiecte dspy.Example. Un Example se comportă ca un dicționar cu acces prin punct (ex.question) și poate avea orice câmpuri. dspy.Prediction, rezultatul modulelor, folosește aceeași structură, dar fără împărțirea în intrări și etichete.
with_inputs("question") întoarce o copie în care question este marcat ca intrare; celelalte câmpuri sunt etichete sau metadate. Evaluate și optimizatorii apelează programul cu program(**example.inputs()), iar metrica primește exemplul întreg. Fără with_inputs, inputs() ridică ValueError.
Documentația recomandă construirea listei direct în Python (din JSON, CSV, pandas) și păstrarea a trei părți separate: antrenare, validare și test. La GEPA, trainset dă exemplele pentru reflecție, valset alege programul întors, iar setul de test trebuie să rămână în afara ambelor. Pentru seturi publice, dspy.datasets conține clase precum HotPotQA și DataLoader.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
dspy.Example(**campuri) |
Creează un exemplu cu orice chei. |
with_inputs(*chei) |
Copie a exemplului cu cheile date marcate ca intrări. |
inputs() / labels() |
Exemple noi doar cu intrările, respectiv doar cu celelalte câmpuri. |
without(*chei) |
Copie fără cheile date. |
toDict() |
Dicționar Python simplu. |
dspy.datasets |
Seturi incluse (de exemplu HotPotQA) și DataLoader. |
Exemple practice și scenarii reale
Exemplul 1: Un exemplu cu intrare și etichetă
import dspy
ex = dspy.Example(question="Cine a scris Luceafărul?", answer="Mihai Eminescu").with_inputs("question")
print(ex.question)
print(ex.inputs()) # doar question
print(ex.labels()) # doar answer
Exemplul 2: Set de date dintr-un fișier JSONL, împărțit în trei
După exemplul din ghidul de metrici: 75% antrenare, 12,5% validare, 12,5% test.
import json
import random
import dspy
exemple = []
with open("intrebari.jsonl", encoding="utf-8") as f:
for linie in f:
rand = json.loads(linie)
exemple.append(
dspy.Example(question=rand["intrebare"], answer=rand["raspuns"]).with_inputs("question")
)
random.Random(0).shuffle(exemple)
n = len(exemple)
train = exemple[: int(n * 0.75)]
val = exemple[int(n * 0.75) : int(n * 0.875)]
test = exemple[int(n * 0.875) :]
Exemplul 3: Un set de date public
from dspy.datasets import HotPotQA
dataset = HotPotQA(train_seed=1, train_size=5, eval_seed=2023, dev_size=50, test_size=0)
print(dataset.train[0])
Greșeli frecvente și capcane
- Uiți
with_inputs. Programul nu știe ce câmpuri să primească, iarinputs()ridicăValueError. - Marchezi și eticheta ca intrare (
with_inputs("question", "answer")). Programul primește răspunsul corect, iar scorul nu mai înseamnă nimic. - Evaluezi pe aceleași exemple pe care ai optimizat. Păstrează un set de test pe care optimizatorul nu l-a văzut.