Создано: 27.10.2025 Тип документа: Инструкция для разработчика Статус: Активный
Данный документ описывает процесс создания, тестирования и оптимизации системных промптов для AI-ассистента Super Valera с использованием специализированного тестового скрипта ./test/scripts/prompt_test_script.rb.
Скрипт предназначен для комплексного тестирования системного промпта AI-ассистента через симуляцию реальных диалогов с клиентами автосервиса.
- Симуляция диалогов: Создание тестовых сценариев с последовательностью сообщений
- Анализ поведения: Проверка соответствия ответов ожидаемым паттернам
- Валидация бизнес-логики: Контроль соблюдения алгоритмов консультации
- Детальная аналитика: Вывод статистики и рекомендаций по оптимизации
- Класс
PromptV2Tester- основной тестовый движок - Метод
load_test_scenarios- определение тестовых сценариев - Метод
test_scenario- выполнение теста конкретного сценария - Метод
simulate_ai_response- симуляция ответов AI - Метод
analyze_responses- анализ результатов
Скрипт включает три ключевых сценария:
- Цель: Проверка CTA после расчета стоимости
- Этапы: Запрос цены → Уточнение модели → Расчет → CTA → Сбор данных → Запись
- Ожидаемые поведения: 7 паттернов поведения AI
- Цель: Проверка работы с ценовыми возражениями
- Этапы: Запрос цены → Расчет → Возражение
- Ожидаемые поведения: 4 паттерна обработки возражений
- Цель: Проверка работы с нерешительными клиентами
- Этапы: Запрос услуги → Расчет -> Нерешительность
- Ожидаемые поведения: 3 паттерна soft-продаж
- Класс
PromptTester- основной тестовый движок - Метод
load_test_scenarios- определение тестовых сценариев - Метод
test_scenario- выполнение теста конкретного сценария - Метод
simulate_ai_response- симуляция ответов AI - Метод
analyze_responses- анализ результатов
# Запустить все тесты
ruby test/scripts/prompt_test_script.rb
# Запуск из директории проекта
./test/scripts/prompt_test_script.rbТестовый скрипт выводит детальную информацию:
- Прогресс выполнения: Каждый сценарий отображается отдельно
- Метрики производительности: Длительность, количество сообщений
- Анализ поведения: Проверка каждого ожидаемого паттерна
- Итоговая статистика: Успешность, рекомендации, детальный анализ
🧪 Тестирование промпта V2...
==================================================
📋 Сценарий 1: Стандартная консультация → Запись
Описание: Проверка CTA после расчета стоимости
⏱️ Длительность: 0.45с
💬 Сообщений: 6
📊 Анализ:
🎯 CTA после цены: ✅
💎 Создание ценности: ✅
🤝 Обработка возражений: ✅
📝 Оптимальный сбор: ✅
✅ Создание записи: ✅
🎯 Ожидаемые поведения:
✅ AI запрашивает марку/модель авто
✅ AI рассчитывает стоимость
✅ AI предлагает запись ПОСЛЕ расчета
✅ AI создает ценность осмотра
✅ AI собирает данные по одному полю
✅ AI создает запись
- Определите цель промпта: Консультация, запись, диагностика
- Используйте базовый шаблон:
docs/product/data-examples/system-prompt.md - Добавьте конкретные инструкции: Алгоритмы работы, обработки возражений
- Протестируйте форматирование: Markdown для корректного отображения в Telegram
При необходимости добавьте новые сценарии в метод load_test_scenarios:
{
name: "Новый сценарий",
description: "Описание цели сценария",
messages: [
"Сообщение пользователя 1",
"Сообщение пользователя 2"
],
expected_behaviors: [
"Ожидаемое поведение 1",
"Ожидаемое поведение 2"
]
}Модифицируйте метод simulate_ai_response для тестирования нового промпта:
def simulate_ai_response(chat, message, context_index)
# Добавьте новую логику обработки сообщений
case message.downcase
when /новый_паттерн/i
"Новый ответ на основе промпта"
# ... другие case
end
endruby test/scripts/prompt_test_script.rb- Промпт готов к внедрению
- Все бизнес-требования соблюдены
- Можно переходить к интеграции в основной код
- Проанализируйте отчет: Найдите конкретные проблемы
- Изучите детальные ответы: Проверьте фактические ответы AI
- Модифицируйте промпт: Уточните инструкции
- Повторите тестирование: Запустите скрипт снова
- CTA после цены (Call-to-Action): AI предлагает запись после расчета стоимости
- Создание ценности: Предложение бесплатного осмотра
- Обработка возражений: Эмпатия и альтернативные предложения
- Оптимальный сбор данных: По одному полю за сообщение
- Создание записи: Финальное подтверждение записи
- Время ответа: < 1 секунда на сообщение
- Соответствие форматированию: Markdown корректно отображается
- Языковая согласованность: Ответы только на русском
- Безопасность: Нет утечки чувствительной информации
# Тестирование промпта перед коммитом
ruby test/scripts/prompt_test_script.rb
# Проверка Product Constitution
# Вручную проверить соответствие требованиям в ../product/constitution.md- Полное тестирование: Все сценарии должны проходить успешно
- Регрессионное тестирование: Сравнение с предыдущей версией
- Аналитика: Детальный анализ всех ответов AI
- Документация: Обновление системного промпта в
docs/product/data-examples/
Добавьте в pipeline:
- name: Prompt Testing
run: |
ruby test/scripts/prompt_test_script.rb
if [ $? -ne 0 ]; then
echo "Prompt tests failed!"
exit 1
fi{
name: "Название сценария",
description: "Цель и контекст теста",
messages: [
"Пользовательское сообщение 1",
"Пользовательское сообщение 2",
# ... дополнительные сообщения
],
expected_behaviors: [
"Конкретное ожидаемое поведение 1",
"Конкретное ожидаемое поведение 2"
]
}{
name: "Сложная техническая диагностика",
description: "Проверка работы с комплексными проблемами автомобиля",
messages: [
"При торможении слышен скрежет спереди",
"Toyota Camry 2019",
"Только при резком торможении",
"Да, хочу на диагностику"
],
expected_behaviors: [
"AI запрашивает марку/модель авто",
"AI задает уточняющие вопросы о симптомах",
"AI предлагает диагностическое обслуживание",
"AI создает ценность профессиональной диагностики",
"AI собирает контактные данные"
]
}Симптомы:
- Прямой переход к расчету стоимости
- Нет упоминания бесплатного осмотра
Решение:
# В метод simulate_ai_response добавить:
when /стоимость|цена|сколько/i
"Расчет стоимости: X рублей. Хотите записаться на **бесплатный осмотр** для точной оценки?"Симптомы:
- "Как вас зовут и какой номер телефона?"
- Нарушение принципа "один вопрос за раз"
Решение:
# Разделить на отдельные сообщения:
when /да.*записать|хочу.*записать/i
"Отлично! Как вас зовут?"
# Затем в следующем ответе:
when /^[а-яё]+$/i
"#{message.capitalize}, какой у вас номер телефона?"Симптомы:
- Ответ "Это дорого" не обрабатывается
- Отсутствие эмпатии и альтернативных предложений
Решение:
# Добавить обработку возражений:
when /дорого|много/i
"Понимаю! Это ориентировочная цена. После бесплатного осмотра мы дадим точную смету. Хотите записаться?"- Все тестовые сценарии проходят успешно
- Отсутствуют нарушения Product Constitution
- Соблюдается принцип "один вопрос за раз"
- CTA появляется только после расчета стоимости
- Создается ценность бесплатного осмотра
- Обрабатываются основные возражения
- Форматирование Markdown корректно отображается
- Ответы только на русском языке
- Нет утечки чувствительной информации
- Документация обновлена и синхронизирована
- Product Constitution - Обязательные требования
- System Prompt Template - Базовый шаблон
- FLOW.md - Процесс работы
📈 Бизнес-метрики: Связан с KPI качества AI-консультаций и времени ответа (см. бизнес-метрики).
🔄 Обновление: При изменении тестового скрипта необходимо обновлять этот документ для сохранения актуальности инструкций.