Когда выбирать Promptfoo
Подходит
- Нужно быстро сравнить несколько моделей или версий промпта на одном наборе кейсов.
- Нужны регрессионные проверки промптов в CI/CD без написания тестового кода.
- Нужно проверить приложение на уязвимости: в инструмент встроены red teaming и сканирование.
- Команда предпочитает декларативную конфигурацию: кейсы и проверки в YAML.
Не подходит
- Тесты LLM должны жить в Python-проекте как обычные pytest-тесты — посмотрите DeepEval.
- Нужна трассировка реальных запросов в продакшене и разбор диалогов — берите платформу вроде Langfuse, LangSmith или Arize Phoenix.
- Нужны специализированные метрики RAG на Python с генерацией тестовых наборов — посмотрите Ragas.
Установка
npm install -g promptfoopip install promptfooПримеры тестов
Быстрый старт: три команды
1# создать пример-проект
2npx promptfoo@latest init --example getting-started
3
4# прогнать оценку
5npx promptfoo@latest eval
6
7# открыть результаты в браузере
8npx promptfoo@latest viewКоманды init, eval и view взяты из раздела Getting Started документации. Для npx нужен установленный Node.js.
Конфиг: промпт, две модели и проверки ответа
1description: Ответы бота поддержки
2prompts:
3 - 'Ты ассистент интернет-магазина. Ответь на вопрос: {{question}}'
4providers:
5 # замените на актуальные модели вашего провайдера
6 - openai:chat:gpt-5.4
7 - openai:chat:gpt-5.4-mini
8defaultTest:
9 assert:
10 # детерминированная проверка: в ответе есть нужное слово
11 - type: contains
12 value: возврат
13 # модельная проверка: критерий оценивает LLM
14 - type: llm-rubric
15 value: Ответ не выдумывает условия возврата и не обещает лишнего
16tests:
17 - vars:
18 question: Как вернуть товар?
19 - vars:
20 question: Можно ли вернуть товар через месяц?Структура (prompts, providers, defaultTest.assert, tests с vars) и типы проверок contains и llm-rubric соответствуют документации. Один набор проверок применяется ко всем кейсам, а результаты моделей сравниваются рядом.
Типичные ошибки
- Только детерминированные проверки
- contains и regex не понимают смысл: перифраз пройдёт мимо, а неверный ответ с нужным словом пройдёт. Добавляйте модельные проверки (llm-rubric и другие) для смысла и фактичности.
- Модельные проверки без калибровки
- llm-rubric и подобные типы полагаются на LLM-судью, а значит, у них есть собственные ошибки. Сверьте их вердикты с человеческой разметкой на небольшом наборе, прежде чем блокировать релиз.
- Порядок проверок
- В документации проверки делятся на детерминированные (is-json, equals, latency, cost и др.) и модельные. Дешёвые детерминированные проверки ставьте первыми: они быстрее и не дают шума.
- Версия Node.js в CI
- README указывает минимальную версию Node.js. Проверьте требование перед установкой в CI-образ, иначе прогон упадёт ещё до первого теста.
Вопросы на собеседовании по Promptfoo
- Чем детерминированные проверки в Promptfoo отличаются от модельных? Приведите по два примера.
- Как сравнить две версии промпта на одном наборе кейсов и решить, какая лучше?
- Зачем в evals нужен red teaming и чем он отличается от обычной проверки качества?
- Как встроить прогон evals в CI и по какому критерию блокировать релиз?
- Какие риски у llm-rubric и как их снизить?
Отработать ответы можно на мок-собеседовании.
Частые вопросы
Что такое Promptfoo?
Это CLI и библиотека для оценки и red teaming LLM-приложений с лицензией MIT. Кейсы и проверки описываются в YAML-конфиге, а результаты прогона сравниваются по моделям и промптам.
Промпты уходят на сторонние серверы при прогоне?
По документации, evals выполняются локально, и промпты не покидают вашу машину. Но запросы к самим моделям идут провайдеру, чьи модели вы подключили в конфиге.
Promptfoo остаётся open source после перехода в OpenAI?
Да. В README сказано, что Promptfoo теперь часть OpenAI, остаётся open source и распространяется под лицензией MIT.
Какие проверки ответа поддерживает Promptfoo?
Детерминированные (например, equals, contains, regex, is-json, latency, cost) и модельные (например, llm-rubric, g-eval, factuality, context-faithfulness, context-recall). Полный список смотрите в разделе assertions документации.