DSPy
DSPy es un framework de código abierto que crea canalizaciones de LLM a partir de firmas tipadas y módulos, y después optimiza sus prompts según una métrica.
DSPy es un framework de código abierto para Python que permite crear aplicaciones sobre modelos de lenguaje grandes (LLM) mediante código, en lugar de escribir las instrucciones a mano. El desarrollador declara qué recibe y qué devuelve cada paso, combina los pasos en un programa y permite que un optimizador de DSPy escriba y ajuste las instrucciones o los pesos del modelo para maximizar una métrica en un conjunto de ejemplos. El nombre significa Python declarativo que se mejora a sí mismo, y el proyecto se describe como el framework para programar modelos de lenguaje, no para darles instrucciones. Omar Khattab y sus colegas de Stanford lo presentaron en el artículo de octubre de 2023 DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines. En cuestión de minutos, unas pocas líneas de DSPy bastaron para que GPT-3.5 y Llama-2-13B-chat crearan flujos que superaban en más del 25 % y el 65 %, respectivamente, las instrucciones de pocos ejemplos estándar, y en hasta un 46 % y un 40 % los flujos que usaban ejemplos redactados por expertos.
Firmas, módulos y optimizadores#
- Firmas: declaraciones tipadas de las entradas y salidas de un paso, escritas en línea como
"question -> answer"o como una clase cuya cadena de documentación describe la tarea. Indican qué hace un paso y dejan que DSPy decida cómo redactar las instrucciones. - Módulos: estrategias para ejecutar una firma.
dspy.Predictllama al modelo una vez;dspy.ChainOfThoughtañade un campo de razonamiento antes de la respuesta, como en la generación de cadenas de pensamiento; ydspy.ReActejecuta un bucle que usa herramientas, al estilo de las instrucciones ReAct. Los módulos se combinan como las capas de PyTorch para crear programas de varios pasos, como un flujo de generación aumentada por recuperación (RAG) que redacta una consulta de búsqueda, recupera pasajes y responde a partir de ellos. - Adaptadores: convierten una firma en mensajes de chat para el modelo y analizan su respuesta para devolver campos tipados.
- Optimizadores: algoritmos que mejoran un programa según una métrica.
BootstrapFewShotejecuta el programa con ejemplos de entrenamiento y conserva como demostraciones las trazas que superan la métrica;MIPROv2busca entre las instrucciones y los conjuntos de demostraciones propuestos; yBootstrapFinetunedestila un programa en los pesos del modelo mediante ajuste fino.
El bucle de optimización refleja el entrenamiento de un modelo, con las instrucciones como parámetros:
El optimizador GEPA de 2025, disponible como dspy.GEPA, lee las trazas de ejecución del programa y los comentarios textuales, pide a un LLM que analice qué ha fallado y, a partir de ahí, evoluciona las instrucciones. En seis tareas, superó en un 6 % de media y hasta en un 20 % al método de aprendizaje por refuerzo GRPO, usando hasta 35 veces menos ejecuciones, y superó a MIPROv2 en más de un 10 %.
De la firma a las instrucciones#
DSPy genera las instrucciones a partir de la firma, por lo que el mismo programa se puede volver a optimizar para un modelo nuevo en lugar de reescribirlo. En este caso, la entrada es un resumen de detecciones de Ultralytics YOLO26: Results.verbose() devuelve un resultado del modo de predicción con el recuento por clase en una cadena breve, que una firma puede recibir como texto para que un optimizador ajuste el paso de razonamiento a partir de resultados reales de detección de objetos. No hace falta ningún modelo ni clave de API para dar formato a los mensajes:
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']}")El mensaje del sistema enumera los campos de entrada y salida, los marcadores [[ ## field ## ]] que DSPy usa para analizar la respuesta y la cadena de documentación, que define el objetivo; el mensaje del usuario contiene los recuentos del detector. Un optimizador mejora este programa reescribiendo ese objetivo y añadiendo demostraciones a los mensajes, sin modificar el código Python.
DSPy frente a términos relacionados#
- Ingeniería de prompts: redactar y revisar instrucciones a mano. DSPy convierte ese trabajo en un problema de optimización con una métrica y ejemplos.
- LangChain: framework de integraciones, herramientas y bucles de agentes para combinar aplicaciones de LLM, con instrucciones que mantiene el desarrollador.
- Ajuste de hiperparámetros: busca configuraciones de entrenamiento según una métrica de validación; es la analogía más cercana a la búsqueda de instrucciones de DSPy.
- Sistemas de IA compuestos: aplicaciones creadas a partir de varias llamadas a modelos, recuperadores y herramientas. DSPy se diseñó para optimizar estos flujos de principio a fin y ajustar las instrucciones de cada paso según la métrica final.










