DSPy — программирование языковых моделей
Декларативные сигнатуры, модули и компиляторы
Проблема: Вы часами подбирали идеальный промпт. Потом модель обновилась — и он сломался. Перешли на другую LLM — снова сломался. Как создавать промпты, которые переживают изменения?
Решение: Программируй, а не промпти
DSPy (Declarative Self-improving Python) — фреймворк от Stanford NLP, который заменяет хрупкие ручные промпты декларативными программами. Вместо того чтобы угадывать идеальную формулировку, ты описываешь форму задачи через сигнатуру (signature) — какой вход и какой выход ожидается — затем выбираешь модуль рассуждения (Predict, ChainOfThought, ReAct), а компилятор сам генерирует и подстраивает реальный промпт под твои данные и метрику. Главный лозунг — «программируй, а не промпти»: ты пишешь Python, который объявляет намерение, а DSPy подбирает строку, на которой конкретная модель работает лучше всего.
Как это работает
Три слоя складываются друг на друга. Сигнатура вида context, question -> answer объявляет поля и их типы. Модуль (module) оборачивает сигнатуру в стратегию рассуждения — например, dspy.ChainOfThought заставляет модель думать пошагово перед ответом. Наконец, оптимизатор (optimizer, его ещё называют teleprompter), такой как BootstrapFewShot или MIPROv2, прогоняет твою программу на небольшом наборе размеченных примеров, измеряет результат заданной тобой метрикой и ищет лучшую комбинацию few-shot примеров и инструкций. На выходе — скомпилированная программа: конкретный воспроизводимый промпт, который можно сохранить, версионировать и перезапустить. Поскольку промпт генерируется, а не печатается вручную, смена базовой модели означает перекомпиляцию, а не переписывание всего руками.
Когда применять — и компромиссы
Бери DSPy, когда у тебя есть многошаговый пайплайн (поиск + рассуждение + извлечение), измеримая метрика и небольшой набор размеченных примеров — именно там ручной подбор промптов превращается в угадайку. Особенно хорошо он сочетается с RAG и многошаговыми вопросами, где взаимодействует много под-промптов. Компромиссы тоже реальны: есть порог входа, компиляция делает лишние вызовы модели (это время и деньги), а хорошая метрика обязательна — без неё оптимизатору нечего оптимизировать. Для одного разового промпта обычный промптинг быстрее. Конкретный пример: классификатор тикетов поддержки. Ты пишешь сигнатуру ticket -> category, оборачиваешь в dspy.Predict, задаёшь метрику, которая возвращает 1, когда предсказанная категория совпала с меткой, и даёшь оптимизатору 50 размеченных тикетов. BootstrapFewShot перебирает разные наборы примеров, оставляет те, что поднимают точность, и выдаёт финальный промпт — никакого ручного подбора примеров, а ту же программу можно перекомпилировать под более дешёвую или новую модель за минуты.
Представьте это как ORM для баз данных:
- 1. Определи сигнатуру: Опиши поля ввода -> вывода: "context, question -> answer"
- 2. Выбери модуль: Выбери паттерн рассуждения: Predict, ChainOfThought, ReAct или ProgramOfThought
- 3. Скомпилируй оптимизатором: BootstrapFewShot или MIPRO автоматически подбирает лучшие примеры и инструкции по метрике
- 4. Деплой скомпилированной программы: Оптимизированная программа работает с любой LLM — портабельна и воспроизводима
Где это используется?
- NLP-пайплайны: Цепочки модулей (суммаризация -> классификация -> извлечение) с автооптимизированными промптами на каждом шаге
- Оптимизация RAG: Автоматическая оптимизация запросов к поиску и генерации ответов вместе для лучших результатов
- Многошаговые вопросы: Сложные вопросы, требующие нескольких шагов рассуждения — DSPy выстраивает цепочку модулей и оптимизирует весь пайплайн
- Классификация: Автоподобранные промпты с лучшими few-shot примерами, выбранными компилятором для ваших данных
Интересный факт: DSPy создан той же группой Stanford NLP, что разработала ColBERT и Baleen. Название "DSPy" обыгрывает подход PyTorch nn.Module — сигнатуры как размерности тензоров, модули как слои нейросети.
Попробуйте сами!
Исследуй интерактивную визуализацию ниже, чтобы увидеть, как DSPy превращает ручной промпт в скомпилированную оптимизированную программу.
DSPy: программирование языковых моделей
Исследуй сигнатуры, модули, оптимизаторы и компиляцию
"context, question -> answer"
ChainOfThought(QA)
BootstrapFewShot + метрика
Автооптимизирован с лучшими примерами
Частые вопросы
Что такое DSPy и чем он отличается от ручного промптинга?
DSPy — фреймворк от Stanford NLP, который превращает вызовы LLM в декларативные функции (сигнатуры) вместо ручных текстовых шаблонов. Вы описываете ЧТО хотите (input -> output), выбираете модуль рассуждения (Predict, ChainOfThought, ReAct), а компилятор автоматически оптимизирует промпт с few-shot примерами и инструкциями.
Что такое компиляторы DSPy и как они работают?
Компиляторы DSPy, такие как BootstrapFewShot и MIPRO, автоматически оптимизируют промпты. BootstrapFewShot запускает программу на обучающих данных, оценивает выходы метрикой и выбирает лучшие примеры для few-shot демонстраций. MIPRO идёт дальше — также оптимизирует сами инструкции.
Когда стоит использовать DSPy вместо ручного написания промптов?
DSPy хорош для сложных многошаговых пайплайнов, когда нужны модель-агностичные промпты (портируемые между OpenAI, Anthropic, open-source), или когда качество промптов критично и есть размеченные данные + функция метрики. Для простых разовых промптов ручной подход может быть быстрее.
Попробуй сам
Интерактивное демо этой техники
Построить систему ответов на вопросы: принимает контекст и вопрос, возвращает точный ответ
На основе предоставленного контекста, Python был впервые выпущен в 1991 году. Он был создан Гвидо ван Россумом и известен своей читаемостью кода благодаря значимым отступам.
Reasoning: Контекст прямо указывает, что Python был "впервые выпущен в 1991 году." Answer: 1991
Ручной промпт дал правильный, но многословный ответ с ненужным пересказом. Скомпилированный DSPy промпт дал краткий, сфокусированный ответ, потому что компилятор подобрал демонстрации, обучающие модель нужному формату.
Создайте бесплатный аккаунт для решения челленджей
3 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения