Navigácia
AI

DSPy: ako nahradiť ručné promptovanie kompiláciou promptov

30 októbra, 2026 techy.sk

Ručné ladenie dlhých textových promptov je krehké. Po zmene modelu sa často rozsypú a dajú sa ťažko testovať. Open-source framework DSPy, ktorý vznikol na Stanfordovej univerzite, pristupuje k problému inak: prompt berie ako súčasť programu a nechá ho optimalizovať na dátach.

Prečo ručné promptovanie naráža na limity

Väčšina projektov začína rovnako. Vývojár napíše dlhú inštrukciu, dolaďuje slová a skúša príklady. Funguje to, kým sa nezmení model, vstupné dáta alebo požiadavka. Potom treba všetko ladiť odznova a nik presne nevie, ktorá úprava textu pomohla. Neznamená to, že ručné promptovanie je mŕtve. Na prototypy a jednoduché úlohy stačí. Pri systémoch, ktoré treba merať a udržiavať, však začína prekážať.

Čo je DSPy

DSPy nahrádza písanie promptov deklaratívnym popisom úlohy. Vo frameworku definuješ:

  • Signature: čo vstupuje do modelu a čo má vyjsť, vrátane krátkeho popisu úlohy.
  • Modul: ako sa úloha rieši, napríklad priamou odpoveďou alebo postupným uvažovaním.
  • Metriku: funkciu, ktorá povie, či je odpoveď správna.
  • Optimalizátor: algoritmus, ktorý upraví prompt a ukážky tak, aby metrika vyšla čo najlepšie. Pôvodne sa nazýval teleprompter.

Príklad: analýza sentimentu

Namiesto textu typu „odpovedaj iba jedným slovom“ opíšeš vstup a výstup. Názov modelu v kóde je len zástupný, doplň ho podľa svojho poskytovateľa.

import dspy
from typing import Literal

dspy.configure(lm=dspy.LM("poskytovatel/nazov-modelu"))

class SentimentAnalysis(dspy.Signature):
    """Urči sentiment zákazníckej recenzie."""
    review: str = dspy.InputField(desc="Zákaznícka recenzia produktu")
    sentiment: Literal["pozitívna", "negatívna", "neutrálna"] = dspy.OutputField()

predictor = dspy.Predict(SentimentAnalysis)
result = predictor(review="Notebook sa neustále prehrieva, neodporúčam!")
print(result.sentiment)

Všimni si, že DSPy inštrukcie úplne neodstraňuje. Krátky popis úlohy v dokumentačnom reťazci signatúry zostáva. Zmena je v tom, že finálny text promptu skladá framework a vie ho neskôr upraviť.

Čo je „kompilácia“

Kompilácia znamená spustenie optimalizátora na tvojich dátach. Potrebuješ niekoľko označených príkladov a metriku:

from dspy.teleprompt import BootstrapFewShot

trainset = [
    dspy.Example(review="Skvelý displej, som spokojný.", sentiment="pozitívna").with_inputs("review"),
    dspy.Example(review="Po týždni prestal fungovať.", sentiment="negatívna").with_inputs("review"),
    # ... ďalšie príklady
]

def metric(example, pred, trace=None):
    return example.sentiment == pred.sentiment

optimizer = BootstrapFewShot(metric=metric, max_bootstrapped_demos=4)
compiled = optimizer.compile(predictor, trainset=trainset)
compiled.save("sentiment.json")

Pozor na častý omyl. BootstrapFewShot netvorí nové inštrukcie. Vyberá a generuje ukážky, ktoré model pri tejto úlohe zvládol správne, a vkladá ich do promptu. Inštrukcie dokáže vylepšovať iný optimalizátor, MIPROv2, ktorý upravuje inštrukcie aj ukážky spoločne. Odporúča sa ho skúsiť, keď máš viac príkladov, približne päťdesiat a viac. Jeho beh stojí viac volaní modelu.

Čo sa stane pri zmene modelu

Ak zmeníš model, v kóde zmeníš len jeho nastavenie a optimalizáciu spustíš znova. Framework tak nájde prompt a ukážky vhodné pre nový model. Nezaručuje to dokonalý výsledok, preto treba výkon znovu zmerať na testovacích dátach.

Kedy sa DSPy oplatí a kedy nie

  • Oplatí sa: pri úlohách, ktoré vieš merať, pri viacstupňových pipeline a pri systémoch, ktoré sa budú dlho udržiavať.
  • Neoplatí sa: pri jednorazovom skripte, pri úlohách bez jasnej metriky a pri malom počte dát.
  • Náklady: optimalizácia spotrebúva volania modelu a potrebuje označené príklady.

Čo si z toho odniesť

DSPy posúva myslenie od ladenia textu k návrhu systému, ktorý sa dá testovať a znovu optimalizovať. Nie je to zázračná náhrada promptovania a nevyrieši zlé dáta alebo nejasnú metriku. Pre tímy, ktoré s jazykovými modelmi pracujú dlhodobo, je to však zaujímavý spôsob, ako urobiť výsledky opakovateľnými.

Zdieľať článok

Mohlo by vás zaujímať