22. Prompt и Program Management¶
Зачем это нужно?¶
Вы изменили промпт, и агент стал работать хуже. Но вы не можете понять, что именно изменилось или откатить изменения. Без управления промптами вы не можете:
- Версионировать промпты
- Отслеживать изменения и их влияние
- Тестировать новые версии перед деплоем
- Откатывать плохие изменения
Prompt и Program Management — это контроль над поведением агента. Без него вы не можете безопасно изменять промпты в проде.
Реальный кейс¶
Ситуация: Вы обновили системный промпт, чтобы улучшить качество ответов. Через день пользователи жалуются, что агент стал хуже работать.
Проблема: Нет версионирования промптов, нет evals для проверки изменений. Невозможно понять, что именно изменилось или откатить изменения.
Решение: Версионирование промптов в Git, evals для проверки каждой версии, откат при ухудшении метрик. Теперь вы можете безопасно экспериментировать с промптами и откатывать плохие изменения.
Теория простыми словами¶
Что такое версионирование промптов?¶
Версионирование промптов — это хранение всех версий промпта с метаданными (автор, дата, описание изменений). Это позволяет откатить изменения или сравнить версии.
Что такое промпт-регрессии?¶
Промпт-регрессии — это ухудшение качества агента после изменения промпта. Evals помогают обнаружить регрессии до деплоя.
Как это работает (пошагово)¶
Шаг 1: Версионирование промптов¶
Храните промпты в Git или БД с версиями:
type PromptVersion struct {
ID string `json:"id"`
Version string `json:"version"`
Content string `json:"content"`
Author string `json:"author"`
CreatedAt time.Time `json:"created_at"`
Description string `json:"description"`
}
func getPromptVersion(id string, version string) (*PromptVersion, error) {
// Загружаем конкретную версию промпта
// Можно хранить в Git или БД
return nil, nil
}
Шаг 2: Промпт-регрессии через evals¶
Используйте evals для проверки каждой версии (см. Главу 08):
func testPromptVersion(prompt PromptVersion) (float64, error) {
// Запускаем evals для этой версии промпта
passRate := runEvals(prompt.Content)
// Сравниваем с предыдущей версией
prevVersion := getPreviousVersion(prompt.ID)
if prevVersion != nil {
prevPassRate := runEvals(prevVersion.Content)
if passRate < prevPassRate {
return passRate, fmt.Errorf("regression detected: %.2f < %.2f", passRate, prevPassRate)
}
}
return passRate, nil
}
Шаг 3: Feature flags¶
Используйте feature flags для включения/выключения функций без деплоя:
type FeatureFlags struct {
UseNewPrompt bool
UseNewModel bool
}
func getSystemPrompt(flags FeatureFlags) string {
if flags.UseNewPrompt {
return getPromptVersion("system", "v2.0").Content
}
return getPromptVersion("system", "v1.0").Content
}
Где это встраивать в нашем коде¶
Точка интеграции: System Prompt¶
В labs/lab06-incident/SOLUTION.md уже есть SOP в промпте. Версионируйте его:
func getSystemPrompt() string {
version := os.Getenv("PROMPT_VERSION")
if version == "" {
version = "latest"
}
prompt := getPromptVersion("incident_sop", version)
return prompt.Content
}
Типовые ошибки¶
Ошибка 1: Промпты не версионируются¶
Симптом: После изменения промпта агент стал работать хуже, но вы не можете откатить изменения.
Решение: Версионируйте промпты в Git или БД.
Ошибка 2: Нет evals для проверки изменений¶
Симптом: Изменения промпта деплоятся без проверки, регрессии обнаруживаются только в проде.
Решение: Используйте evals для проверки каждой версии перед деплоем.
Критерии сдачи / Чек-лист¶
✅ Сдано:
- Промпты версионируются
- Evals проверяют каждую версию
- Откат при ухудшении метрик
❌ Не сдано:
- Промпты не версионируются
- Нет evals для проверки
Связь с другими главами¶
- Глава 08: Evals и Надежность — Проверка качества промптов
- Глава 23: Evals в CI/CD — Автоматическая проверка
Навигация: ← Workflow и State Management в продакшене | Оглавление | Evals в CI/CD →