DSPy: программирование LLM вместо промптинга
Обзор DSPy — фреймворка Stanford NLP для программной оптимизации LLM-пайплайнов вместо ручного промпт-инжиниринга.
DSPy: программирование языковых моделей вместо промптинга
«Вместо хрупких промптов вы пишете композиционный Python-код и используете DSPy, чтобы научить языковую модель выдавать высококачественные результаты.»
Что такое DSPy и для кого он?
DSPy — это фреймворк для программирования, а не промптинга языковых моделей. Аббревиатура расшифровывается как Declarative Self-improving Python.
Он позволяет быстро итерировать при создании модульных AI-систем и предлагает алгоритмы для оптимизации промптов и весов — будь то простые классификаторы, сложные RAG-пайплайны или агентные петли.
DSPy разработан исследователями Stanford NLP и делает акцент на программировании, уводя создание LM-пайплайнов от манипуляций с промптами в сторону настоящего кода.
Кому подходит:
- ML-инженерам и NLP-исследователям, строящим сложные пайплайны
- Командам, которые хотят избавиться от ручного «хака промптов»
- Разработчикам RAG-систем и агентов
- Компаниям, мигрирующим с крупных моделей на меньшие (как AWS с Amazon Nova)
Архитектура и ключевые концепции
Программная модель DSPy включает три высокоуровневые абстракции: Signatures (сигнатуры), Modules (модули) и Optimizers (оптимайзеры, ранее известные как teleprompters).
graph TD
A[Задача / данные] --> B[Signature\nвходы и выходы]
B --> C[Module\nChainOfThought / ReAct / ReActV2]
C --> D[Optimizer\nBootstrapFewShot / MIPROv2 / GEPA]
D --> E[Скомпилированная программа\nоптимизированные промпты / файнтюн]
E --> F[Продакшн LLM-пайплайн]
Signatures — типизированные задачи вместо строк
В DSPy задачи выражаются через структурированные Signatures (сигнатуры), а не промпты, что делает программы поддерживаемыми, модульными и оптимизируемыми.
LLM-взаимодействия определяются как типизированные классы Signature с полями ввода/вывода, компонуемые через модули (ChainOfThought, ReAct и др.), и оптимизируемые через автоматическую настройку промптов.
import dspy
# Подключаем LLM
lm = dspy.LM("openai/gpt-4o-mini")
dspy.configure(lm=lm)
# Определяем задачу через Signature
class SentimentClassifier(dspy.Signature):
"""Classify the sentiment of the given text."""
text: str = dspy.InputField()
sentiment: str = dspy.OutputField(desc="positive, negative, or neutral")
# Создаём модуль
classifier = dspy.Predict(SentimentClassifier)
result = classifier(text="DSPy makes prompt engineering obsolete!")
print(result.sentiment) # positive
Modules — модульные строительные блоки
DSPy предоставляет универсальные модули (например, ChainOfThought, ReAct и др.), которые заменяют трюки строкового промптинга.
# RAG-пайплайн в ~15 строк
class RAGPipeline(dspy.Module):
def __init__(self, retriever, k=3):
self.retrieve = dspy.Retrieve(k=k)
self.generate = dspy.ChainOfThought("context, question -> answer")
def forward(self, question):
context = self.retrieve(question).passages
return self.generate(context=context, question=question)
rag = RAGPipeline(retriever=my_retriever)
answer = rag(question="Что такое DSPy?")
В версии DSPy 3.3 появился ReActV2 — новая версия ReAct, построенная вокруг нативных вызовов инструментов. Он конвертирует вызываемые объекты в dspy.Tool, добавляет внутренний инструмент submit для финального вывода и обрабатывает неизвестные инструменты и исключения.
Optimizers — автоматическая оптимизация
DSPy вводит новые оптимайзеры — LM-управляемые алгоритмы, которые могут настраивать промпты и/или веса LLM-вызовов с учётом метрики, которую нужно максимизировать.
Всякий раз, когда вы изменяете код, данные, утверждения или метрику, можно перекомпилировать программу, и DSPy создаст новые эффективные промпты под ваши изменения.
Иерархия оптимайзеров DSPy (2026):
| Оптимайзер | Тип | Когда использовать |
|---|---|---|
BootstrapFewShot | Few-shot | Быстрый старт, малый датасет |
BootstrapFewShotWithRandomSearch | Few-shot + поиск | Чуть лучше качество |
MIPROv2 | Байесовский | Совместная оптимизация инструкций и демонстраций |
COPRO | Генерация инструкций | Задачи instruction-following |
GEPA | Эволюционный (Pareto) | Максимальное качество, бюджетно-эффективно |
GEPA — новейший флагман (ICLR 2026)
GEPA (Genetic-Pareto) заменяет скалярное вознаграждение на рефлексивную эволюцию промптов: он читает трассы выполнения, диагностирует сбои на естественном языке и поддерживает фронт Парето из разнообразных кандидатов. Результат: +13% над MIPROv2, +20% над GRPO при в 35× меньшем числе роллаутов.
На бенчмарке MATH GEPA-оптимизированные программы достигли 93% точности против 67% у базового ChainOfThought. Прирост в 26 пунктов достигнут только через улучшение инструкций — без few-shot примеров, архитектурных изменений и файнтюна.
import dspy
# Оптимизация с GEPA
optimizer = dspy.GEPA(metric=my_metric, auto="medium")
optimized_program = optimizer.compile(my_program, trainset=train_data)
Совместимость с моделями
Одна и та же программа в 10–20 строк на DSPy может быть скомпилирована в многоэтапные инструкции для GPT-4, детальные промпты для Llama2-13b или файнтюн для T5-base.
DSPy может обучать мощные модели вроде GPT-3.5/GPT-4 и локальные модели вроде T5-base или Llama2-13b быть значительно надёжнее при выполнении задач — с более высоким качеством и без специфических паттернов ошибок.
Тарифы и лицензия
DSPy — полностью открытый проект (лицензия MIT), размещённый на GitHub. Сам фреймворк бесплатен.
| Компонент | Стоимость |
|---|---|
| DSPy (фреймворк) | Бесплатно (MIT open-source) |
Установка (pip install dspy) | Бесплатно |
GEPA (pip install gepa) | Бесплатно |
| Затраты на LLM API (OpenAI, Anthropic и др.) | По тарифам провайдера |
| Локальные модели (Ollama, vLLM и др.) | Бесплатно |
Плюсы и минусы
| ✅ Плюсы | ❌ Минусы |
|---|---|
| Автоматическая оптимизация промптов и весов | Крутой порог вхождения для новичков |
| Модульная, читаемая архитектура | Меньше готовых интеграций, чем у LangChain |
| Минимальный overhead (~3.53 ms) | Оптимизация требует затрат на LLM API |
| Открытый исходный код (MIT) | Меньше примеров и туториалов в сообществе |
| Поддержка любых LLM (cloud + local) | GEPA и ReActV2 пока в экспериментальном статусе |
| Декларативный стиль — промпты адаптируются при смене модели | Статическая типизация Signature непривычна для быстрого прототипирования |
| Рекордные бенчмарки (GEPA: +13% над MIPROv2) | Меньшая экосистема, чем у LangChain |
Сравнение с альтернативами
DSPy выигрывает в оптимизации промптов, когда у вас есть размеченные данные. LangChain лидирует по экосистеме, LlamaIndex — по качеству RAG.
| Параметр | DSPy | LangChain | LlamaIndex |
|---|---|---|---|
| Парадигма | Программирование + автооптимизация | Оркестрация цепочек | RAG-специализация |
| Оптимизация промптов | ✅ Автоматическая (GEPA, MIPROv2) | ❌ Ручная | ❌ Ручная |
| Порог вхождения | Средний–высокий | Низкий | Средний |
| Экосистема интеграций | Растущая | Огромная | Большая |
| Overhead (ms) | ~3.53 | ~10 | ~6 |
| Локальные LLM | ✅ | ✅ | ✅ |
| Лицензия | MIT | MIT | MIT |
| Лучший сценарий | Оптимизация под метрику | Агентные воркфлоу | Document QA / поиск |
DSPy vs. LlamaIndex: LlamaIndex силён в retrieval-«сантехнике», DSPy — в программировании, оценке и оптимизации. Используйте LlamaIndex как источник данных для DSPy-программ.
DSPy может встраиваться в существующий стек как оптимизатор для конкретных prompt-чувствительных шагов без переписывания всего пайплайна.
- DSPy — если вам нужна автооптимизация под метрику и у вас есть хотя бы 20–100 размеченных примеров
- LangChain — если нужен максимум готовых интеграций и большая экосистема инструментов
- LlamaIndex — если строите RAG поверх документов с гибкой настройкой чанкинга и поиска
Вердикт
DSPy представляет новую парадигму: вместо написания промптов вы пишете программы с типизированными сигнатурами и позволяете фреймворку автоматически оптимизировать промпты и few-shot примеры.
Это означает конец «промпт-хакинга» как ремесла — и начало инженерного подхода к LLM. Фреймворк особенно выигрывает там, где качество важно и измеримо: классификация, многошаговые рассуждения, RAG с оценкой релевантности.
Кому подойдёт DSPy:
- ✅ ML-инженерам, строящим production LLM-системы
- ✅ Исследователям, сравнивающим разные LLM под одну задачу
- ✅ Командам с размеченными данными и измеримой метрикой качества
- ❌ Тем, кто хочет быстро сделать MVP без понимания концепций Signature/Module
- ❌ Тем, кто работает с нестандартными форматами без чёткой метрики
Рейтинг: 8.5/10
DSPy — один из самых интеллектуально честных фреймворков в экосистеме LLM: он не прячет сложность за магией, а предлагает системный инструментарий для тех, кто готов инвестировать в качество.