Автоматизація регресійного тестування промптів за допомогою Promptfoo

Ви оновили промпт для підтримки нового формату відповіді, а через тиждень модель почала галюцинувати на простих запитах — точність впала на 30%. Кожна зміна промпту може непомітно зламати сценарії, які працювали роками. В одному проекті зміна одного слова в промпті знизила точність на 30% і потребув

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Ви оновили промпт для підтримки нового формату відповіді, а через тиждень модель почала галюцинувати на простих запитах — точність впала на 30%. Кожна зміна промпту може непомітно зламати сценарії, які працювали роками. В одному проекті зміна одного слова в промпті знизила точність на 30% і потребувала тижня ручного тестування, щоб відловити регресію. Ми використовуємо Promptfoo, щоб за пару днів побудувати автоматичне регресійне тестування і назавжди забути про такі сюрпризи. Promptfoo дозволяє виконувати тестування в 5 разів швидше ручного і дає об'єктивні метрики, такі як LLM-rubric, ROUGE-N та contains-any, замість суб'єктивної оцінки. Це відкрите CLI-додаток з десятками типів assert'ів, яке інтегрується в будь-який CI/CD-пайплайн.

Наші інженери виконали 40+ проектів з інтеграції LLM, і в усіх випадках використання Promptfoo скоротило час на виявлення регресій з тижня до кількох хвилин. Ми налаштовуємо тести під конкретні сценарії: перевіряємо наявність обов'язкових фраз, відсутність заборонених слів, порівнюємо відповіді моделей і вимірюємо схожість з еталоном через ембеддінги. В результаті ви отримуєте прозорий процес, де кожен PR перевіряється автоматично, а якість промптів контролюється метриками.

Які проблеми вирішуємо

  • Регресії після змін промпту: нова умова може порушити роботу на інших кейсах. Promptfoo проганяє сотні тестів за секунди.
  • Нестабільність моделей: постачальник оновив модель, і вона почала видавати інший формат. Тести ловлять це до деплою.
  • Суб'єктивна оцінка: замість «здається, відповідає добре» — об'єктивні метрики (contains, LLM-rubric, ROUGE).
  • Відсутність CI/CD для промптів: розробку ведуть без контролю якості — це як комітити без юніт-тестів.
  • RAG-сценарії: перевірка коректності вилучення та релевантності відповіді на основі векторного пошуку.
  • QA для AI: гарантія, що модель не видає некоректні або unsafe відповіді в production.

Чому регресійне тестування промптів критичне?

LLM — імовірнісні системи. Одне слово в промпті може змінити всю семантику відповіді. Без автоматичних тестів ви випускаєте зміни наосліп. Promptfoo дає гарантію, що старі сценарії продовжують працювати, а нові не ламають існуючу логіку. Це особливо важливо в production-системах з тисячами запитів на день. Згідно з офіційною документацією, Promptfoo — це інструмент з відкритим кодом для оцінки та тестування LLM промптів. Він зарекомендував себе в проектах з об'ємом до 10 тисяч запитів на добу.

Як ми налаштовуємо Promptfoo під ваші задачі?

Ми починаємо з аудиту поточних промптів: збираємо всі використовувані шаблони, виділяємо ключові сценарії і пишемо тест-кейси з expect'ами. Типовий конфіг виглядає так:

providers: - openai:gpt-4o - openai:gpt-4o-mini - anthropic:claude-3-5-sonnet-20241022 prompts: - "Summarize the following text in 3 sentences: {{text}}" - "Create a concise 3-sentence summary of: {{text}}" tests: - vars: text: "Long article about machine learning..." assert: - type: contains value: "machine learning" - type: llm-rubric value: "The summary is accurate and covers the main points" - type: javascript value: "output.split('.').length >= 3" - vars: text: "Another test document..." assert: - type: not-contains value: "I cannot" - type: rouge-n value: reference_summary threshold: 0.5 

Ми використовуємо не всі assert'и підряд, а тільки ті, що реально потрібні. Часто додаємо кастомні перевірки через JavaScript: наприклад, що відповідь містить рівно 3 пункти в markdown. Це дає 100% впевненість у форматі виводу.

Як інтегрувати Promptfoo в CI/CD?

Достатньо додати одну команду у ваш workflow:

promptfoo eval --ci 

Приклад GitHub Actions:

- name: Run prompt tests run: npx promptfoo eval --ci 

Якщо тест падає, CI завершується з помилкою — PR не мержиться. Ми також налаштовуємо автоматичний перегляд звіту через promptfoo view, щоб команда бачила диф між версіями промптів.

Що входить в роботу

  • Аудит поточних промптів і виділення критичних сценаріїв.
  • Написання 10–50 тест-кейсів з assert'ами під ваші метрики.
  • Конфігурація Promptfoo і налаштування провайдерів.
  • Інтеграція в CI/CD (GitHub Actions, GitLab CI) з повідомленнями.
  • Документація і навчання команди: як додавати нові тести та інтерпретувати результати.

Процес роботи

  1. Аналіз промптів — збираємо поточні шаблони, виявляємо критичні кейси (до 2 годин).
  2. Проектування тестів — пишемо 10–50 тест-кейсів з assert'ами під ваші метрики.
  3. Реалізація — створюємо конфігурацію Promptfoo, налаштовуємо провайдерів і змінні.
  4. Тестування — запускаємо eval, фіксимо тести, що впали, уточнюємо вимоги.
  5. Деплой в CI/CD — додаємо крок в пайплайн, налаштовуємо повідомлення.

Строки

Роботи займають від 3 до 7 днів залежно від кількості промптів і складності assert'ів. Вартість розраховується індивідуально після аудиту. Отримайте безкоштовну консультацію — оцінимо ваш проект за один день.

Чек-ліст: що перевірити в тестах промптів

Тип перевірки Що ловить Приклад assert
contains Наявність обов'язкової фрази contains: "Hello"
not-contains Заборонені слова (відмови, інвективи) not-contains: "I cannot"
llm-rubric Якість відповіді (суб'єктивна оцінка LLM) llm-rubric: "Informative"
javascript Довільні перевірки (довжина, формат, JSON) output.length > 0
rouge-n Схожість з еталоном (для сумаризації) threshold: 0.5
contains-any Хоча б один з варіантів contains-any: ["good","bad"]

Порівняння Promptfoo з ручним тестуванням

Критерій Ручне тестування Promptfoo автоматизація
Час на один прогін 1–2 години на 10 кейсів 2–5 хвилин на 100 кейсів
Точність Суб'єктивна оцінка Об'єктивні метрики та assert'и
Масштабованість Обмежено людськими ресурсами Запуск на сотні тестів в CI
CI/CD інтеграція Вимагає ручного запуску Автоматично на кожен коміт
Приклад Python-скрипту для кастомної перевірки
import promptfoo results = promptfoo.evaluate({ "prompts": ["Classify sentiment: {{text}}"], "providers": ["openai:gpt-4o-mini"], "tests": [ { "vars": {"text": "Great product!"}, "assert": [{"type": "contains", "value": "positive"}] } ] }) print(f"Pass rate: {results.stats.successes}/{results.stats.total}") 

Наші інженери з 5+ річним досвідом в AI/ML виконали 40+ проектів з інтеграції LLM. Ми гарантуємо, що тестове покриття буде підтримуватися і розширюватися під ваші задачі. Promptfoo — не єдиний інструмент у стеку, але для регресійного тестування промптів він найбільш гнучкий і простий в інтеграції.

Замовте консультацію — ми покажемо, як Promptfoo вбудовується у ваш існуючий workflow, і оцінимо обсяг роботи за один день. Підхід «під ключ»: від тест-кейсів до CI/CD, з документацією та навчанням команди. Отримайте безкоштовний аудит промптів — зв'яжіться з нами!