🗺️ Хранитель датасета: QA в нейросетевом Средиземье 💾
Глава 4. ⛏️ Гномы деплоят арсенал: кладовая Эребора под версионированием 🏦
За полтора-два года область прошла путь, на который классическому тестированию понадобились десятилетия: от самодельных скриптов с промптом-судьёй 📜 к зрелой экосистеме инструментов 🛠️. Команды в продакшене обычно используют два-три инструмента одновременно, и стек сложился до конфигурации по умолчанию ⚙️.
Центральная фигура — DeepEval, который заслуженно называют «pytest для LLM» 🧪: четырнадцать и более готовых метрик — faithfulness, hallucination, bias, toxicity — с пороговыми значениями и вердиктом «прошёл/упал» прямо в CI ✅. Работает с любыми провайдерами: облачными API и локальными моделями через Ollama 🦙. Для инженера, привыкшего к ассертам и пайплайнам, вход максимально естественный: метрика — это ассерт, порог — условие падения, отчёт — привычный отчёт, только вместо числа прохождений — распределение оценок.
Специализация на RAG — Ragas, де-факто стандарт отрасли. Его главная идея: разложить качество на составляющие 🔬, потому что в RAG проблема может жить на любом этаже. Context precision и context recall оценивают поиск: релевантны ли найденные документы и найдено ли всё нужное. Faithfulness и answer relevancy оценивают генерацию: опирается ли ответ на контекст и отвечает ли на вопрос. Без такого разделения баг в поиске маскируется под баг в модели, а команда месяцами чинит не то, что сломано, — классика любой многослойной архитектуры, только теперь этажи разговаривают на естественном языке 🗣️.
Promptfoo — конфигурация в YAML, сравнение промптов и моделей бок о бок, матрицы результатов, встроенный red-teaming. Самая драматичная новость сезона: OpenAI купила Promptfoo 🤝. Проект остался открытым, но былой статус вендор-нейтрального арбитра превратился в вопрос идеологии: канонический арбитр спора принадлежит одной из сторон спора ⚠️.
Третий контур — платформы наблюдаемости: LangSmith, Langfuse, Arize Phoenix, Opik 📡. Трассировка каждого вызова, онлайн-оценка на живом трафике, дашборды стоимости и латентности, привязка качества к версиям промптов и моделей. Langfuse особенно подкупает свободной лицензией и self-host — для компаний, у которых слова «данные пользователей» вызывают рефлекторное покачивание головой юристов 👔.
Если свести выбор в одну строку: DeepEval — для метрик качества в CI, когда нужны пороги и вердикты на каждый релиз; Ragas — для RAG-метрик, когда поиск и генерацию важно смотреть по отдельности; Promptfoo — для сравнения версий промптов бок о бок; garak и PyRIT — для регулярных атак по чек-листу; Langfuse — для трассировки и дашбордов в проде. Выбор, как видно, устроен не «либо-либо», а как конвейер 🏭: у каждого инструмента своя смена, и пропуск любого звена бьёт по соседнему ⛓️.
Добавим сюда нагрузочную историю: AI-сервисы дороги и медлительны 🐢, поэтому latency измеряется в перцентилях ⏱️, стоимость — в токенах на запрос, а SLO формулируется как «95-й перцентиль не дольше X секунд, бюджет на ответ не больше Y» 💸. Деградация под нагрузкой — тоже тест-кейс, просто дорогой в исполнении: его прогон отдельные команды закладывают в маркетинговый бюджет. И главное предупреждение, которое вендоры уже пишут себе под нос 🤫: «faithfulness» в DeepEval и «faithfulness» в Ragas — не одна и та же метрика. Внутри каждой библиотеки сидит свой промпт-судья со своей рубрикой, и цифры между ними несравнимы. Практический вывод: пинуйте версии 📌, размечайте подмножество вручную и валидируйте метрики на своих данных, а не на чужих дашбордах.
И последнее, что не отменяется никакими инструментами: слабый или устаревший датасет обесценивает любой фреймворк. Ни один инструмент не компенсирует тест-кейсы, не отражающие реальное использование продукта. Качество оценки упирается в качество кейсов, а кейсы пишет человек. Скептики добавляют: если инструмент идеален, а датасет слаб, отчёт получится безупречно точным и совершенно бесполезным 💎. У QA-инженера появилась новая роль — куратор истины 🏛️: его работа теперь не ставить галочки, а спрашивать правильно — редкое и ценное умение ❓.