Стало интересно, как в других командах с этим работают и какие практики реально используются.
Делаю AI-first продукты, и со временем упёрся в вопрос: как вообще понять, что поведение LLM «достаточно корректное», чтобы это можно было спокойно выкатывать в прод.
Для себя в итоге сделали легковесный тулсет поверх Vitest и Playwright для проверки LLM-ответов — но пока не уверен, насколько это вообще универсальная проблема и стоит ли это развивать дальше.
Хочу собрать реальные подходы (не теорию) и обсудить:
Как у вас сейчас выглядит процесс проверки того, что ответ LLM «достаточно корректный»?
В чём, по вашему опыту, самый большой разрыв между тестированием обычного кода и AI-фичей?
Если бы вам нужно было объяснить новому разработчику, почему ваша LLM-фича «работает», на что бы вы сослались?
Буду рад любым практическим кейсам — даже если всё пока на костылях
promptfoo пробовал — не зашёл в основном из-за YAML и отдельного DSL. В итоге сделал похожую штуку как плагин поверх Vitest + Playwright, чтобы не тащить ещё один слой абстракции
Соглашусь с тезисом про “тестируем поведение, а не exact match” — у себя делаю примерно то же самое, но через кастомные матчеры:
toMatchSemanticMeaning(expected, options?)
toSatisfyCriteria(rubric, options?)
toContainToolCall(name, args?)
toMatchResponseSchema(schema)
toContainText(text) / toNotContainText(text)
Но у меня это встроено в e2e слой, потому что продукт — это по сути динамический UI + чат. Там важно не только что ответил LLM, но и:
какие тулы вызвались
что вернулось в UI
как это повлияло на следующий шаг
Возможно, это действительно ближе к e2e, чем к чистым eval’ам - но мне пока кажется, что в AI-first продуктах это не совсем разделимые вещи.
Отдельный eval-слой (типа promptfoo) пока не стал выносить, но идея с golden dataset из прод-запросов - 100% согласен, это сейчас основной источник правды.
Для JS-стека — promptfoo. Yaml с тест-кейсами, LLM-as-judge оценщик, CI из коробки. Ключевой сдвиг мышления: тестируешь поведение, не exact-match — "нет ли галлюцинации на этом кейсе", "правильный формат ответа", "тональность ок". Накапливай golden dataset из реальных прод-запросов — это лучше синтетики.
p.s. твой Vitest+Playwright ок, но это e2e, а не eval