DSPy
O DSPy é um framework de código aberto que cria pipelines de LLMs a partir de assinaturas tipadas e módulos e, em seguida, otimiza os prompts com base em uma métrica.
O DSPy é uma estrutura Python de código aberto para criar aplicações com modelos de linguagem grandes (LLMs) como código, em vez de usar prompts escritos manualmente. O desenvolvedor declara o que cada etapa recebe e retorna, combina essas etapas em um programa e deixa que um otimizador do DSPy escreva e ajuste os prompts — ou os pesos do modelo — para maximizar uma métrica em um conjunto de exemplos. O nome significa Python declarativo autoaprimorável, e o projeto se descreve como uma estrutura para programar modelos de linguagem, em vez de apenas criar prompts. Omar Khattab e colegas de Stanford o apresentaram no artigo de outubro de 2023 DSPy: compilando chamadas declarativas de modelos de linguagem em pipelines autoaprimoráveis. Em poucos minutos de compilação, algumas linhas de DSPy permitiram que GPT-3.5 e Llama-2-13B-chat criassem pipelines que superaram em mais de 25% e 65%, respectivamente, os prompts padrão de poucos exemplos, e superaram em até 46% e 40% os pipelines que usavam demonstrações escritas por especialistas.
Assinaturas, módulos e otimizadores#
- Assinaturas: declarações tipadas das entradas e saídas de uma etapa, escritas diretamente como
"question -> answer"ou como uma classe cuja docstring especifica a tarefa. Elas indicam o que uma etapa faz e deixam a formulação do prompt a cargo do DSPy. - Módulos: estratégias para executar uma assinatura.
dspy.Predictchama o modelo uma vez,dspy.ChainOfThoughtadiciona um campo de raciocínio antes da resposta, como no prompting de cadeia de pensamento, edspy.ReActexecuta um ciclo que usa ferramentas, no estilo do prompting ReAct. Os módulos se combinam como camadas do PyTorch para formar programas com várias etapas, como um pipeline de geração aumentada por recuperação (RAG) que escreve uma consulta de busca, recupera passagens e responde com base nelas. - Adaptadores: convertem uma assinatura em mensagens de chat para o modelo e analisam a resposta, convertendo-a novamente em campos tipados.
- Otimizadores: algoritmos que aprimoram um programa com base em uma métrica.
BootstrapFewShotexecuta o programa em exemplos de treinamento e mantém como demonstrações os rastros que passam na métrica,MIPROv2pesquisa entre instruções propostas e conjuntos de demonstrações, eBootstrapFinetunedestila um programa nos pesos do modelo por meio de ajuste fino.
O ciclo de otimização se parece com o treinamento de um modelo, usando prompts como parâmetros:
O otimizador GEPA de 2025, disponível como dspy.GEPA, lê os rastros de execução do programa e o feedback textual, faz um LLM refletir sobre o que deu errado e, a partir daí, evolui as instruções. Em seis tarefas, superou em média 6% — e em até 20% — o método de aprendizado por reforço GRPO, usando até 35 vezes menos rollouts; também superou o MIPROv2 em mais de 10%.
Da assinatura ao prompt#
O DSPy escreve o prompt a partir da assinatura, então o mesmo programa pode ser reotimizado para um novo modelo, em vez de ser reescrito. Aqui, a entrada é um resumo de detecção do Ultralytics YOLO26: Results.verbose() retorna um resultado do modo de predição como contagens por classe em uma string curta, que uma assinatura pode receber como texto para que um otimizador ajuste a etapa de raciocínio usando saídas reais de detecção de objetos. Não é necessário ter um modelo nem uma chave de API para formatar as mensagens:
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']}")A mensagem do sistema lista os campos de entrada e saída, os marcadores [[ ## field ## ]] que o DSPy usa para analisar a resposta e a docstring como objetivo; a mensagem do usuário contém as contagens do detector. Um otimizador aprimora esse programa reescrevendo o objetivo e adicionando demonstrações às mensagens, sem alterar o código Python.
DSPy em comparação com termos relacionados#
- Engenharia de prompts: escrever e revisar prompts manualmente. O DSPy transforma esse trabalho em um problema de otimização com uma métrica e exemplos.
- LangChain: uma estrutura de integrações, ferramentas e ciclos de agentes para compor aplicações com LLMs, cujos prompts são mantidos pelo desenvolvedor.
- Ajuste de hiperparâmetros: pesquisa configurações de treinamento com base em uma métrica de validação; é a analogia mais próxima de como o DSPy pesquisa prompts.
- Sistemas de IA compostos: aplicações construídas com várias chamadas a modelos, recuperadores e ferramentas. O DSPy foi projetado para otimizar esses pipelines de ponta a ponta, ajustando o prompt de cada etapa com base na métrica final.










