DSPy: программирование языковых моделей вместо промптинга

«Вместо хрупких промптов вы пишете композиционный Python-код и используете DSPy, чтобы научить языковую модель выдавать высококачественные результаты.»

Что такое DSPy и для кого он?

DSPy — это фреймворк для программирования, а не промптинга языковых моделей. Аббревиатура расшифровывается как Declarative Self-improving Python.

Он позволяет быстро итерировать при создании модульных AI-систем и предлагает алгоритмы для оптимизации промптов и весов — будь то простые классификаторы, сложные RAG-пайплайны или агентные петли.

DSPy разработан исследователями Stanford NLP и делает акцент на программировании, уводя создание LM-пайплайнов от манипуляций с промптами в сторону настоящего кода.

Кому подходит:

  • ML-инженерам и NLP-исследователям, строящим сложные пайплайны
  • Командам, которые хотят избавиться от ручного «хака промптов»
  • Разработчикам RAG-систем и агентов
  • Компаниям, мигрирующим с крупных моделей на меньшие (как AWS с Amazon Nova)
ℹ Реальные кейсы
DSPy используется в Shopify (извлечение метаданных с ~550× снижением стоимости), Dropbox (оптимизация релевантности Dash), AWS (миграция промптов на Amazon Nova), JetBlue и Replit.

Архитектура и ключевые концепции

Программная модель 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):

ОптимайзерТипКогда использовать
BootstrapFewShotFew-shotБыстрый старт, малый датасет
BootstrapFewShotWithRandomSearchFew-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)
💡 Практический совет
Начните с MIPROv2 для быстрого бейзлайна, затем переключитесь на GEPA, как только напишете функцию метрики с обратной связью на естественном языке.

Совместимость с моделями

Одна и та же программа в 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 и др.)Бесплатно
⚠ Скрытые расходы
Основные затраты при использовании DSPy — это LLM API-запросы во время оптимизации. Запуск MIPROv2 или GEPA на сотнях примеров может стоить от нескольких до десятков долларов в зависимости от модели. Планируйте бюджет на оптимизацию заранее.

Плюсы и минусы

✅ Плюсы❌ Минусы
Автоматическая оптимизация промптов и весовКрутой порог вхождения для новичков
Модульная, читаемая архитектураМеньше готовых интеграций, чем у LangChain
Минимальный overhead (~3.53 ms)Оптимизация требует затрат на LLM API
Открытый исходный код (MIT)Меньше примеров и туториалов в сообществе
Поддержка любых LLM (cloud + local)GEPA и ReActV2 пока в экспериментальном статусе
Декларативный стиль — промпты адаптируются при смене моделиСтатическая типизация Signature непривычна для быстрого прототипирования
Рекордные бенчмарки (GEPA: +13% над MIPROv2)Меньшая экосистема, чем у LangChain

Сравнение с альтернативами

DSPy выигрывает в оптимизации промптов, когда у вас есть размеченные данные. LangChain лидирует по экосистеме, LlamaIndex — по качеству RAG.

ПараметрDSPyLangChainLlamaIndex
ПарадигмаПрограммирование + автооптимизацияОркестрация цепочекRAG-специализация
Оптимизация промптов✅ Автоматическая (GEPA, MIPROv2)❌ Ручная❌ Ручная
Порог вхожденияСредний–высокийНизкийСредний
Экосистема интеграцийРастущаяОгромнаяБольшая
Overhead (ms)~3.53~10~6
Локальные LLM
ЛицензияMITMITMIT
Лучший сценарийОптимизация под метрикуАгентные воркфлоу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: он не прячет сложность за магией, а предлагает системный инструментарий для тех, кто готов инвестировать в качество.