Как перестать гадать на промптах и начать доверять нейросетям с помощью Promptfoo
Знакомая ситуация: вы полдня полируете промпт для GPT-4, он наконец-то начинает выдавать идеальные ответы, вы радостно деплоите фичу... и через час поддержка завалена скриншотами, где бот хамит пользователям или выдает секреты компании. Добро пожаловать в мир разработки на LLM, где детерминизм — это миф, а «оно работало на моем компьютере» звучит как злая шутка.
Когда мы пишем обычный код, у нас есть юнит-тесты. Когда мы работаем с нейросетями, мы часто полагаемся на «чуйку» и выборочную проверку пары ответов. Проект Promptfoo — это попытка принести в хаотичный мир промпт-инжиниринга строгий инженерный подход.
Что такое Promptfoo и зачем он в вашем стеке
Если вкратце, Promptfoo — это CLI-инструмент для тестирования и оценки качества работы LLM. Он позволяет сравнивать разные модели, версии промптов и параметры генерации не «на глаз», а на основе конкретных метрик и тестовых наборов данных.
Интересно, что проект ориентирован именно на разработчиков. Здесь нет тяжеловесных UI-конструкторов, зато есть конфиги в YAML, интеграция с CI/CD и возможность запускать тесты локально. Это тот случай, когда инструмент не мешает работать, а встраивается в привычный цикл разработки.
Главные фишки: от сравнения моделей до «красной команды»
1. Матричное тестирование промптов
Представьте, что у вас есть три варианта системного промпта и две модели: GPT-4o и Claude 3.5 Sonnet. Как понять, какая комбинация лучше справится с вашим кейсом? Promptfoo строит матрицу, где прогоняет каждый промпт через каждую модель на вашем наборе входных данных.

Вы сразу видите результаты в удобной таблице. Где-то модель «галлюцинирует», где-то ответ слишком длинный, а где-то — идеальное попадание.
2. Автоматизированные оценки (Evals)
Проверять сотни ответов вручную — сомнительное удовольствие. Promptfoo позволяет автоматизировать этот процесс. Вы можете задать ожидания (assertions):
- Ответ должен содержать определенные ключевые слова.
- Ответ не должен содержать JSON (или наоборот, должен быть валидным JSON).
- Семантическая схожесть с эталоном.
- И даже проверка другой нейросетью (LLM-as-a-judge).
3. Red Teaming: ищем уязвимости до хакеров
Это, пожалуй, самая мощная часть инструмента. Promptfoo умеет проводить автоматический аудит безопасности вашего LLM-приложения. Он имитирует атаки: пытается заставить бота выдать системные инструкции (prompt injection), обмануть фильтры цензуры или спровоцировать на токсичный ответ.

На выходе вы получаете детальный отчет о рисках. В моей практике это экономит недели ручного пентестинга.
Как это работает под капотом
Promptfoo написан на TypeScript и работает максимально быстро благодаря кэшированию. Если вы повторно запускаете тест с теми же параметрами, инструмент возьмет результат из локальной базы, не тратя ваши токены и время.
Конфигурация выглядит максимально просто и декларативно:
prompts: [prompt1.txt, prompt2.txt]
providers: [openai:gpt-4o, anthropic:messages:claude-3-5-sonnet-20240620]
tests:
- vars:
topic: "квантовая физика"
assert:
- type: contains
value: "кварк"
- type: javascript
value: output.length < 500
Все промпты и данные остаются у вас — инструмент работает локально, отправляя запросы только к выбранным вами API (или локальным моделям через Ollama).
Практические кейсы: когда бежать скачивать?
- Миграция на другую модель. Вы решили перейти с дорогой GPT-4 на более дешевую Llama 3. Promptfoo покажет, где новая модель «проседает» в качестве на ваших реальных данных.
- Оптимизация RAG-систем. Тестируйте не только промпты, но и разные стратегии поиска в базе знаний. Насколько релевантны куски текста, которые вы подсовываете нейросети?
- Защита бренда. Если вы делаете публичного чат-бота, Red Teaming поможет убедиться, что он не начнет советовать конкурентов или использовать ненормативную лексику под давлением хитрого пользователя.
Стоит ли пробовать?
Если ваш проект на LLM выходит за рамки «поиграться в консоли», то однозначно да. Promptfoo превращает магию промптов в измеримый процесс. Это как переход от ручного тестирования к автотестам в классической разработке — сначала кажется лишней тратой времени, но потом вы не понимаете, как жили без этого.
Проект активно развивается, у него отличное комьюнити в Discord и подробная документация. Учитывая, что он полностью Open Source (MIT), это отличный вклад в ваш инструментарий для работы с ИИ.
Готовы попробовать? Начните с простого:
npx promptfoo@latest init
И посмотрите, на что на самом деле способна ваша нейросеть.
