AI-инжиниринг

DSPy: промпты как код - компилируй, не пиши руками

Цели урока

  • Понять почему ручной prompt engineering не масштабируется и хрупок
  • Освоить три абстракции DSPy: Signature, Module, Program
  • Разобраться как работают оптимизаторы BootstrapFewShot и MIPROv2
  • Собрать оптимизированный RAG pipeline с измерением качества до и после

ChatGPT вышел в 2022. За год в LinkedIn появилось 10 000 вакансий 'Prompt Engineer'. К 2025 большинство из них занял код. Stanford DSPy показал: если задать метрику и тренировочные данные, компилятор находит промпт лучше любого человека. Phi-3 mini с оптимизированными DSPy-промптами обошёл GPT-4 на нескольких NLP бенчмарках - при разнице в размере в 50 раз.

  • Компания JetBlue использует DSPy для маршрутизации запросов - accuracy вырос с 71% до 89% без смены модели
  • Weaviate интегрировал DSPy как стандартный слой оптимизации для RAG-пайплайнов в production
  • Phi-3 mini (3.8B параметров) с DSPy оптимизацией превзошёл GPT-4 на benchmark HotpotQA
  • DSPy используется в 50+ academic papers 2024-2025 как baseline для prompt optimization

От ручных промптов к компиляторам

**2022 - Chain-of-Thought (Wei et al.)**: 'думай пошагово' как универсальная фраза, которую инженеры вставляли вручную. **2023 - Automatic Prompt Engineer (Zhou et al.)**: первая попытка генерировать промпты автоматически через LLM. **Октябрь 2023 - DSPy (Khattab et al., Stanford)**: промпт как абстракция компилятора, не как ручной артефакт. **2024 - TextGrad**: текстовые 'градиенты' от LLM как механизм обратного распространения. **2024 - MIPROv2**: байесовская оптимизация Signature + few-shot примеров одновременно, лучший оптимизатор DSPy на данный момент. Переход занял два года - от промптов как текста к промптам как программам.

Предварительные знания

  • Паттерны промптов для production: system/user/assistant, few-shot, chain-of-thought
  • Evaluation: как понять что LLM не сломался после деплоя

Проблема ручного prompt engineering

ChatGPT вышел в 2022. За год в LinkedIn появилось 10 000 вакансий 'Prompt Engineer'. К 2025 большинство из них занял код. Не потому что промпты стали неважны - а потому что ручное написание промптов не масштабируется.

Ручные промпты - это код без компилятора. Инженер часами подбирает формулировки, тестирует на 20 примерах, деплоит. Через месяц OpenAI обновляет модель. Промпт, который давал 87% accuracy, теперь даёт 71%. Начинается всё сначала.

ПроблемаСимптомМасштаб
ХрупкостьПромпт 'сломался' после обновления моделиGPT-3.5 -> GPT-4 -> GPT-4o - каждый раз заново
СубъективностьДва инженера пишут разные промпты на одну задачуНет объективной метрики выбора
НепереносимостьПромпт для GPT-4o не работает на ClaudeVendor lock-in на уровне текста
Масштаб100 задач = 100 промптов вручнуюO(N) усилий на O(N) задач

Корень проблемы - путаница между **задачей** и **инструкцией**. Задача стабильна: 'классифицировать тональность'. Инструкция нестабильна: зависит от модели, примеров, формата вывода. DSPy разделяет их.

Исследование Sclar et al. (2023) показало: изменение промпта на один токен может изменить accuracy на 10-15%. Это означает что ручной промпт - случайная точка в огромном пространстве возможных инструкций, а не оптимум.

Почему ручной промпт-инжиниринг не масштабируется?

DSPy: объявляй задачу, не пиши промпт

Stanford DSPy (Khattab et al., 2023) - фреймворк где промпт не пишется вручную. Вместо этого объявляется **Signature** (что на входе, что на выходе), **Module** (как обрабатывать), **Program** (pipeline из модулей). Компилятор находит оптимальные промпты автоматически.

Аналогия с компиляторами точная. В C нет смысла вручную расставлять регистры процессора - компилятор делает это лучше. В DSPy нет смысла вручную писать 'Think step by step' - оптимизатор находит лучшие инструкции через обратное распространение по метрике.

**Встроенные модули DSPy** - готовые стратегии обработки:

МодульЧто делаетКогда использовать
PredictПрямой вызов LLM по SignatureПростая классификация, extraction
ChainOfThoughtДобавляет reasoning перед ответомСложные задачи, math, multi-step
ReActReasoning + Action - вызывает toolsАгенты с инструментами
RetrieveПоиск в vector storeRAG-компоненты
ProgramOfThoughtГенерирует и выполняет кодВычисления, структурированная обработка

DSPy Signature поддерживает аннотации типов Python - это позволяет валидировать выход LLM автоматически. Если модель вернула невалидный JSON или неправильный тип, DSPy повторяет запрос автоматически (до 3 раз).

В DSPy Signature описывает...

Оптимизаторы DSPy: BootstrapFewShot, MIPROv2, BayesianSignatureOptimizer

Сердце DSPy - оптимизаторы (раньше назывались teleprompters). Метрика качества работает как функция потерь в нейронных сетях: оптимизатор ищет промпт, максимизирующий метрику на тренировочных примерах. Backward pass не через веса - через пространство возможных инструкций.

ОптимизаторКак работаетКогда использовать
BootstrapFewShotГенерирует few-shot примеры автоматически из training setМало данных (10-50 примеров), быстрый старт
MIPROv2Байесовская оптимизация: перебирает инструкции + примеры одновременно50-500 примеров, баланс качества и скорости
BayesianSignatureOptimizerОптимизирует формулировку Signature (не только примеры)Когда задача плохо определена изначально
BootstrapFewShotWithRandomSearchRandom search по пространству промптовBaseline, когда другие оптимизаторы нестабильны

Что происходит внутри MIPROv2: генерируются кандидатные инструкции (от 10 до 50), для каждой запускается evaluation на subset тренировочных данных, байесовская оптимизация определяет следующую кандидатную инструкцию. Результат - промпт, который конкретная модель понимает лучше всего для конкретной задачи.

Оптимизация требует LLM-вызовов. MIPROv2 с medium=50 итерациями и датасетом из 100 примеров делает примерно 5 000 вызовов. На gpt-4o-mini это около USD 0.5-2. Запускать один раз, сохранять результат - не повторять при каждом деплое.

Что выполняет роль 'функции потерь' при оптимизации в DSPy?

Практика: RAG pipeline на DSPy с оценкой

Конкретный сценарий: RAG-система для технической документации. Baseline - ручной промпт, 68% F1 на golden dataset. После оптимизации MIPROv2 - 84% F1. Без изменения модели, без изменения кода retrieval.

Что изменилось внутри после оптимизации - можно посмотреть:

TextGrad (Yuksekgonul et al., 2024) и Adalflow - альтернативы DSPy. TextGrad использует буквальные текстовые 'градиенты': LLM объясняет почему ответ неверен, это объяснение используется для улучшения промпта. Adalflow - более лёгкий фреймворк с акцентом на production-деплой.

При смене модели с GPT-4o на Claude, оптимизированный DSPy-промпт нужно...

DSPy нужен только для исследований - в production проще писать промпты вручную

DSPy экономит часы при каждой смене модели и даёт воспроизводимые результаты - это production-инструмент

При смене GPT-4o на Claude 3.5 ручной промпт требует переработки. DSPy Program перекомпилируется за 10-30 минут. При 10+ моделях в портфеле или частых model upgrades, экономия линейно растёт.

Оптимизатор DSPy перебирает все возможные промпты - это слишком долго

MIPROv2 использует байесовскую оптимизацию: 50-200 оцениваний, не миллионы - занимает 10-30 минут

Байесовский оптимизатор учится на каждой итерации и направляет поиск в перспективные области пространства промптов. Это не grid search, а умный поиск с posterior обновлением.

Итоги

  • Ручной промпт - хрупкая точка в пространстве инструкций, ломается при обновлении модели
  • DSPy разделяет задачу (Signature) и инструкцию (промпт) - компилятор генерирует промпт автоматически
  • Метрика-функция = градиент; оптимизатор максимизирует метрику на тренировочных данных
  • MIPROv2 - байесовская оптимизация, 50-200 LLM-вызовов, даёт +10-25% vs ручного промпта
  • При смене модели: перекомпилировать, не переписывать - это главное преимущество подхода

Вопросы для размышления

  • Какие задачи в текущем проекте используют жёстко заданные промпты? Насколько они хрупки при смене модели?
  • Что было бы метрикой для оптимизации в конкретном pipeline - F1, accuracy, или что-то доменное?
  • DSPy оптимизирует промпты на тренировочном наборе - как убедиться что метрика не переобучается под него?

Связанные темы

DSPy автоматизирует промпты. Fine-tuning идёт дальше - встраивает знания в веса модели.

  • Evaluation и golden datasets — Метрика DSPy - это то же самое что evaluation pipeline: нужны хорошие тестовые данные
  • Fine-tuning — Альтернативный путь - вместо оптимизации промпта, обучить модель на задаче
  • Advanced RAG — DSPy позволяет оптимизировать весь RAG-pipeline как единую программу

Связанные уроки

  • aie-06-prompt-patterns
  • aie-31-evaluation
  • aie-13-advanced-rag
  • aie-36-fine-tuning
  • aie-29-cost-management
DSPy: промпты как код - компилируй, не пиши руками

0

1

Войти