Урок 16Продвинутая

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: от сигнатуры к скомпилированной программе

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

Исследуй сигнатуры, модули, оптимизаторы и компиляцию

Пайплайн DSPy
Сигнатура

"context, question -> answer"

Модуль

ChainOfThought(QA)

Оптимизатор

BootstrapFewShot + метрика

Compiled промпт

Автооптимизирован с лучшими примерами

Частые вопросы

Что такое 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 году. Он отличается читаемостью кода благодаря значимым отступам. Вопрос: Когда Python был впервые выпущен?
Ответ

На основе предоставленного контекста, Python был впервые выпущен в 1991 году. Он был создан Гвидо ван Россумом и известен своей читаемостью кода благодаря значимым отступам.

Токены:65/42
Время:380ms
Качество:
С techniques-dspy
С техникой
Промпт
Программа DSPy (скомпилирована BootstrapFewShot): Сигнатура: "context, question -> answer" Модуль: ChainOfThought(QA) --- Автоподобранные демонстрации --- Context: "Мария Кюри получила Нобелевскую премию по физике в 1903 и по химии в 1911 году." Question: "Сколько Нобелевских премий получила Мария Кюри?" Reasoning: Контекст говорит об одной в 1903 и одной в 1911. Answer: 2 Context: "Великая Китайская стена строилась на протяжении веков, наиболее известные участки построены при династии Мин (1368-1644)." Question: "Какая династия построила самые известные участки?" Reasoning: Контекст явно указывает на династию Мин. Answer: Династия Мин --- Текущий запрос --- Context: "Язык Python был создан Гвидо ван Россумом и выпущен в 1991 году." Question: "Когда Python был впервые выпущен?"
Ответ

Reasoning: Контекст прямо указывает, что Python был "впервые выпущен в 1991 году." Answer: 1991

👁️Сигнатура DSPy объявляет: context + question -> answer
🧠Компилятор автоматически выбрал 2 качественные демонстрации из обучающих данных
🧠Модуль ChainOfThought добавляет явное рассуждение перед ответом
Результат: краткий, фактический ответ с цепочкой рассуждений — без лишнего текста
Токены:210/18
Время:250ms
Качество:
Почему это работает

Ручной промпт дал правильный, но многословный ответ с ненужным пересказом. Скомпилированный DSPy промпт дал краткий, сфокусированный ответ, потому что компилятор подобрал демонстрации, обучающие модель нужному формату.

1 / 2

Квиз по уроку

1 из 4

1.Что такое сигнатура DSPy?

Практика

Создайте бесплатный аккаунт для решения челленджей

3 челленджей с AI-проверкой для этого урока

Связанные уроки:ApeChain Of ThoughtPrompt Chaining

Этот урок — часть структурированного курса по LLM.

Мой путь обучения