DSPy
DSPy ist ein Open-Source-Framework, das LLM-Pipelines aus typisierten Signaturen und Modulen erstellt und anschließend ihre Prompts anhand einer Metrik optimiert.
DSPy ist ein quelloffenes Python-Framework zum Erstellen von Anwendungen für große Sprachmodelle (LLMs) als Code statt mit manuell verfassten Prompts. Entwickler deklarieren die Eingaben und Ausgaben jedes Schritts, kombinieren die Schritte zu einem Programm und lassen einen DSPy-Optimierer Prompts oder die Gewichte des Modells erstellen und abstimmen, um eine Metrik anhand einer Beispielsammlung zu maximieren. Der Name steht für Declarative Self-improving Python. Das Projekt beschreibt sich selbst als Framework zum Programmieren von Sprachmodellen statt zum Prompten. Omar Khattab und Kollegen von Stanford stellten DSPy im Oktober 2023 im Beitrag DSPy: Deklarative Aufrufe von Sprachmodellen zu selbstverbessernden Pipelines kompilieren vor. Innerhalb weniger Minuten nach der Kompilierung konnten sich mit wenigen Zeilen DSPy Pipelines für GPT-3.5 und Llama-2-13B-chat erstellen lassen, die standardmäßiges Few-Shot-Prompting um mehr als 25 % beziehungsweise 65 % und Pipelines mit von Experten verfassten Beispielen um bis zu 46 % beziehungsweise 40 % übertrafen.
Signaturen, Module und Optimierer#
- Signaturen: Typisierte Deklarationen der Eingaben und Ausgaben eines Schritts. Sie werden direkt als
"question -> answer"oder als Klasse formuliert, deren Docstring die Aufgabe beschreibt. Sie legen fest, was ein Schritt tut, und überlassen DSPy die Formulierung des Prompts. - Module: Strategien zur Ausführung einer Signatur.
dspy.Predictruft das Modell einmal auf,dspy.ChainOfThoughtfügt vor der Antwort ein Feld für Schlussfolgerungen ein, wie beim Chain-of-Thought-Prompting, unddspy.ReActführt eine Schleife mit Werkzeugen im Stil des ReAct-Promptings aus. Module lassen sich wie PyTorch-Schichten zu mehrstufigen Programmen kombinieren, etwa zu einer Retrieval-Augmented-Generation-Pipeline (RAG), die eine Suchanfrage formuliert, Passagen abruft und daraus eine Antwort erstellt. - Adapter: Wandeln eine Signatur in Chatnachrichten für das Modell um und analysieren die Antwort, um die typisierten Felder zurückzugewinnen.
- Optimierer: Algorithmen, die ein Programm anhand einer Metrik verbessern.
BootstrapFewShotführt das Programm mit Trainingsbeispielen aus und behält Ablaufprotokolle, die die Metrik erfüllen, als Beispiele bei.MIPROv2durchsucht mögliche Anweisungen und Beispielsammlungen.BootstrapFinetunedestilliert ein Programm durch Feinabstimmung in Modellgewichte.
Die Optimierungsschleife ähnelt dem Training eines Modells, wobei Prompts die Parameter bilden:
Der Optimierer GEPA aus dem Jahr 2025, verfügbar als dspy.GEPA, liest die Ausführungsprotokolle und das Textfeedback des Programms. Er lässt ein LLM darüber nachdenken, was schiefgelaufen ist, und entwickelt die Anweisungen daraufhin weiter. Bei sechs Aufgaben übertraf er das bestärkende Lernen mit der Methode GRPO im Durchschnitt um 6 % und um bis zu 20 %, während er bis zu 35-mal weniger Rollouts benötigte. MIPROv2 übertraf er um mehr als 10 %.
Von der Signatur zum Prompt#
DSPy erzeugt den Prompt aus der Signatur. Daher lässt sich dasselbe Programm für ein neues Modell erneut optimieren, statt es neu zu schreiben. Hier dienen Erkennungsübersichten von Ultralytics YOLO26 als Eingabe: Results.verbose() gibt ein Ergebnis im Vorhersagemodus als kurze Zeichenfolge mit Häufigkeiten pro Klasse zurück. Eine Signatur kann diesen Text entgegennehmen, sodass ein Optimierer den Reasoning-Schritt anhand echter Ausgaben der Objekterkennung abstimmt. Zum Formatieren der Nachrichten sind weder ein Modell noch ein API-Schlüssel erforderlich:
import dspy
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
class SceneQA(dspy.Signature):
"""Answer a question about a photo from the objects a detector found in it."""
detections: str = dspy.InputField()
question: str = dspy.InputField()
answer: str = dspy.OutputField()
# The adapter turns the signature and inputs into the chat messages the model will receive
inputs = {"detections": results[0].verbose(), "question": "How many people are in the photo?"}
messages = dspy.ChatAdapter().format(SceneQA, demos=[], inputs=inputs)
for message in messages:
print(f"--- {message['role']} ---\n{message['content']}")Die Systemnachricht führt die Eingabe- und Ausgabefelder, die Markierungen [[ ## field ## ]], mit denen DSPy die Antwort analysiert, und den Docstring als Ziel auf. Die Benutzernachricht enthält die Zählwerte des Detektors. Ein Optimierer verbessert dieses Programm, indem er das Ziel umformuliert und den Nachrichten Beispiele hinzufügt, ohne den Python-Code zu ändern.
DSPy im Vergleich zu verwandten Begriffen#
- Prompt-Engineering: Prompts von Hand verfassen und überarbeiten. DSPy macht daraus ein Optimierungsproblem mit einer Metrik und Beispielen.
- LangChain: Ein Framework mit Integrationen, Werkzeugen und Agentenschleifen zum Kombinieren von LLM-Anwendungen. Die Prompts werden dabei vom Entwickler gepflegt.
- Hyperparameterabstimmung: Durchsucht Trainingseinstellungen anhand einer Validierungsmetrik und ist die ähnlichste Analogie dazu, wie DSPy Prompts durchsucht.
- Zusammengesetzte KI-Systeme: Anwendungen aus mehreren Modellaufrufen, Abrufsystemen und Werkzeugen. DSPy wurde dafür entwickelt, solche Pipelines vollständig zu optimieren und den Prompt jedes Schritts anhand der endgültigen Metrik abzustimmen.










