Создание эталонного набора тестов
Составьте 50–200 качественных пар (вход, ожидаемый вывод), охватывающих редкие случаи реального использования.
«Создание эталонного набора тестов» — бесплатный урок AI Agents на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Что такое золотой набор?
«Золотой набор тестов» (или «золотой набор») — это отобранная коллекция пар (входные данные, ожидаемый результат), которая определяет, как выглядит правильное поведение.
Каждое изменение сравнивается с этим набором.
Свойства хорошего золотого набора
- Разнообразный — охватывает распространённые AND пограничные случаи
- Отобран людьми — не создан автоматически
- Версионируемый — зафиксирован в вашем репозитории
- Документированный — для каждого случая указано обоснование
Сколько нужно случаев?
Ориентируйтесь на следующие значения:
- 50 случаев — минимально приемлемый набор
- 200 случаев — хорошее покрытие
- 1000 и более случаев — зрелый продукт
Качество важнее количества. 50 хорошо отобранных случаев лучше 500 случайных.
Источники случаев
- Интервью с пользователями — что спрашивают реальные пользователи
- Рабочие журналы — какие вопросы поступали
- Отчёты об ошибках — каждая ошибка становится оценкой
- Генерация состязательных случаев — попросите LLM сломать агента
Mining Bad Production Traces
for trace in last_week_traces():
if trace.has_thumbs_down or trace.had_error:
case = {
'input': trace.input,
'why_bad': trace.feedback_comment,
'expected': None # to be filled by human reviewer
}
save_to_review_queue(case)Ожидаемый результат: точный или эвристический
Есть два варианта ожидаемого результата:
- Точное совпадение — для извлечения данных, классификации и вычислений
- Эвристический — для открытых вопросов и ответов; оценивается наличие ключевых фактов
Heuristic Scoring
def score_answer(actual, expected_facts):
return sum(1 for f in expected_facts if f.lower() in actual.lower()) / len(expected_facts)
case = {
'input': 'What is our refund policy?',
'expected_facts': ['30 days', 'unopened', 'receipt required'],
'min_score': 0.66 # at least 2 of 3 facts mentioned
}
actual_answer = "You can return items within 30 days if they are unopened."
score = score_answer(actual_answer, case['expected_facts'])
print(f"Score: {score:.2f} (min required: {case['min_score']})")
Состязательные случаи
Включайте сложные случаи:
- Вопросы вне области применения («Какая погода на Марсе?»)
- Неоднозначные запросы
- Попытки внедрения инструкций в запрос
- Входные данные на иностранных языках
- Очень длинные входные данные
Версионирование золотого набора
Храните его в формате JSON в своём репозитории. Каждый PR, изменяющий набор, должен объяснять причину:
// gold-set.json
[
{
"id": "refund-policy-001",
"input": "What is your refund policy?",
"expected_facts": ["30 days", "unopened", "receipt required"],
"added_by": "alice@",
"added_at": "2025-08-12",
"reason": "Top customer support question"
}
]Разбиение на наборы для тестирования и проверки
Чтобы обнаружить переобучение, разделите данные на:
- Набор разработки — для итераций (вы видите эти данные)
- Набор тестирования — для измерений (вы НЕ настраиваете модель под него)
- Отложенный набор — используется только перед крупными выпусками
Разметка по Парето
Помечайте случаи по категориям, чтобы видеть, WHERE произошло ухудшение:
tag1 = {'tags': ['policy', 'common-question']}
tag2 = {'tags': ['math', 'edge-case']}
print(tag1)
print(tag2)
# Run eval and report:
print("Category 'policy': 0.92")
print("Category 'math': 0.68 <- regression here")
Критерии оценки
Для сложных результатов составляйте критерии оценки: что должно присутствовать, чего NOT должно быть, что предпочтительно:
rubric = {
'must_include': ['30 days'],
'must_not_include': ['no refunds'],
'preferably_includes': ['receipt']
}
for k, v in rubric.items():
print(f"{k}: {v}")
Источник случаев
Какой источник оценочных случаев даёт наиболее полезный сигнал?
Итоги
Более 50 отобранных случаев, полученных из реальных запросов пользователей и сбоев в рабочей среде. Версионируйте набор, размечайте его и разделяйте на наборы разработки, тестирования и отложенной проверки. Расширяйте его после каждой ошибки.
Часто задаваемые вопросы
Урок «Создание эталонного набора тестов» бесплатный?
Да — полный текст урока «Создание эталонного набора тестов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Создание эталонного набора тестов»?
Составьте 50–200 качественных пар (вход, ожидаемый вывод), охватывающих редкие случаи реального использования. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Создание эталонного набора тестов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Разработка агентов на основе оценивания
- Создание эталонного набора тестов
- Недостатки оценки с помощью LLM-судьи
- Наборы сравнительных тестов: SWE-Bench, GAIA, ToolBench