# Зачем нужен пилотный тест?
Когда ты выбираешь модель на Hugging Face, **описания и метрики (MMLU, HumanEval и т.п.) показывают лишь общую картину**.
==Но то, как модель поведёт себя именно **в твоей задаче** — это всегда отдельная история.==
Пилотный тест — это мини-эксперимент, который помогает:
- понять, насколько модель адекватна именно в твоём контексте;
- проверить качество ответов (точность, стиль, язык);
- оценить скорость, память и нагрузку;
- избежать ошибок перед интеграцией в продукт или RAG-систему.
---
# 1. Определи цель теста
Первое, что нужно сделать — понять **что именно ты хочешь проверить**.
**Вот типовые цели:**
| Цель | Что проверяем |
| ------------------- | ------------------------------------------------------- |
| Диалоги / чат | Понимание контекста, вежливость, длина и логика ответов |
| Генерация кода | Правильность, компилируемость, структура |
| RAG / документация | Умение находить и пересказывать нужную информацию |
| Математика и логика | Шаги рассуждений, точность ответов |
| Мультиязычность | Качество русского / английского / смешанного текста |
| Творчество | Стиль, оригинальность, способность “держать тему” |
==Старайся формулировать цель конкретно: не просто “посмотреть, как работает модель”, а “оценить, как она отвечает на технические вопросы на русском языке”.==
---
# 2. Подготовь тестовые примеры
Для пилотного теста достаточно **10–20 тщательно подобранных запросов**.
Можно меньше, но разнообразнее.
**Создай таблицу (в Notion, Excel или JSON), где будут поля:**
|№|Тип вопроса|Промпт|Что считаем правильным|
|---|---|---|---|
|1|Фактологический|Кто написал “Мастера и Маргариту”?|Михаил Булгаков|
|2|Логика|Что тяжелее: 1 кг ваты или 1 кг железа?|Одинаково|
|3|Русский язык|Переведи “apple”|яблоко|
|4|Код|Напиши функцию, которая считает факториал|Проверить результат выполнения|
|5|RAG|Что говорится в документе X о пункте Y?|Сравнить с оригиналом|
==_Совет:_ включай и лёгкие, и сложные запросы — модель может блистать на очевидных вещах, но “поплыть” на нюансах.==
---
# 3. Подготовь скрипт для теста
Если ты работаешь с **Ollama**, **vLLM** или **локальным API**, тест можно сделать в пару строк на Python.
Пример для OpenAI-совместимого API:
```python
import requests
BASE_URL = "http://127.0.0.1:11434/v1/chat/completions"
MODEL = "qwen2.5:7b"
def ask(prompt):
data = {
"model": MODEL,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.7
}
r = requests.post(BASE_URL, json=data)
return r.json()["choices"][0]["message"]["content"]
prompts = [
"Что такое машинное обучение?",
"Напиши функцию на Python, которая считает сумму чисел от 1 до 100.",
"Переведи на русский: The sun rises in the east."
]
for p in prompts:
print(f"\n🧩 Вопрос: {p}")
print(f"Ответ модели:\n{ask(p)}")
```
---
# 4. Определи критерии оценки
Чтобы тест был объективным, нужно решить — **что считать “хорошим ответом”**.
**Обычно проверяют по 4 параметрам:**
|Критерий|Что оцениваем|Как измерить|
|---|---|---|
|Точность|Совпадает ли с правильным ответом|Да / Нет / Частично|
|Ясность|Понятно ли объяснено, есть ли вода|По 5-балльной шкале|
|Логика|Есть ли цепочка рассуждений|Качественно|
|Скорость|Время отклика / задержка токена|секундомер или лог API|
Можно сделать простую форму в Notion / Google Sheets, где после каждого ответа проставлять баллы.
---
# 5. Проведи тест и зафиксируй результаты
Прогони все запросы через выбранную модель и **запиши ответы + оценки**.
Если сравниваешь несколько моделей — делай одинаковые промпты и одинаковые настройки (temperature, top_p, max_tokens).
**Пример вывода:**
|Модель|Средняя точность|Средняя ясность|Среднее время|
|---|---|---|---|
|Qwen2.5-7B-Instruct|0.9|4.5|2.1 c|
|Mistral-7B-Instruct|0.85|4.2|1.8 c|
|Phi-3-mini|0.7|3.9|1.2 c|
---
# 6. Проанализируй выводы
После теста попробуй ответить на три простых вопроса:
1. **Даёт ли модель корректные ответы на моих данных?**
2. **Понимает ли контекст и инструкции так, как я ожидаю?**
3. **Достаточно ли быстро работает и не “галлюцинирует”?**
Если модель ошибается только в 1–2 сложных кейсах — это норма.
Если даёт странные или опасные ответы — смело ищи альтернативу.
---
# 7. (Опционально) Автоматизируй сравнение
Позже можно подключить инструменты вроде:
- **lm-evaluation-harness** — официальный фреймворк от Hugging Face для бенчмарков;
- **MT-Bench / Arena-Hard** — для тестов диалоговых LLM;
- **HELM / Open Decomp** — для честных сравнений на разных сценариях.
Но на старте достаточно твоего собственного “мини-бенчмарка”.
---
# 8. Сохрани шаблон теста
После первого пилота создай свой **checklist**:
- промпты, на которых модель должна отвечать правильно;
- JSON/CSV с вопросами;
- код для автоматического теста;
- таблицу с результатами и заметками.
Такой шаблон можно использовать повторно при апгрейде модели, квантовке или переходе на другой движок.
---
# 9. Пример пилотного теста
## Пилотный тест: “Личный ассистент”
| № | Тип задачи | Промпт | Что считается хорошим ответом | Критерии оценки |
| --- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------- |
| 1 | Простое общение | «Привет! Расскажи коротко, кто ты?» | Вежливое, краткое самопредставление без “воды” | Тон:<br>Ясность: |
| 2 | Планирование | «Помоги составить план дел на понедельник для дизайнера-фрилансера.» | Список задач с приоритетами, временем, без общих фраз | Полезность:<br>Структура: |
| 3 | Напоминания | «Напомни мне завтра позвонить врачу в 10 утра.» | Корректная реакция (“Я не могу реально напомнить, но запомню это”), логичный ответ | Адекватность: |
| 4 | Переписка | «Перепиши письмо в более вежливом тоне: "Вы не ответили на моё сообщение уже неделю!"» | Вежливо, дипломатично, но с сохранением сути | Стиль: |
| 5 | Суммаризация | «Вот текст. Сократи его в 3 предложения: …» | Лаконичное резюме, сохранён смысл | Точность:<br>Сжатие: |
| 6 | Приоритизация | «Вот список задач. Расставь по приоритету: написать отчёт, позвонить клиенту, почитать новости, сделать кофе.» | Логичный порядок (1. клиент → 2. отчёт → 3. новости → 4. кофе) | Логика: |
| 7 | Мотивация | «Мне ничего не хочется делать. Поддержи меня.» | Эмпатичный, доброжелательный ответ без клише | Эмпатия: |
| 8 | Фокусировка | «Я не могу сосредоточиться. Что посоветуешь?» | Реалистичные советы (режим, отдых, техники), без банальностей | Практичность: |
| 9 | Русский язык | «Исправь ошибки в этом тексте: "Я вчера ходил в магазин и купила яблоки."» | Правильная грамматика (“купил”) и объяснение | Точность: |
| 10 | Перевод | «Переведи на английский: "Сегодня отличная погода!"» | “The weather is great today!” | Перевод: |
| 11 | Культура | «Объясни, почему люди празднуют 8 марта?» | Краткое, культурно нейтральное объяснение сути праздника | Контекст: |
| 12 | Этикет | «Как корректно напомнить коллеге о дедлайне?» | Тактично, без давления (“Напомни мягко, уточни, нужна ли помощь”) | Стиль: |
| 13 | Аналитика | «Посмотри этот список расходов и скажи, на что я трачу больше всего: еда — 20 000, транспорт — 10 000, аренда — 35 000, развлечения — 15 000.» | Ответ: “На аренду — 35 000 ₽.” | Точность: |
| 14 | Память | «Запомни, что я живу в Санкт-Петербурге и люблю кофе без сахара.» | Ответ вроде: “Хорошо, запомнил.” (понимание запроса) | Контекст: |
| 15 | Генерация текста | «Напиши короткое описание профиля для LinkedIn тестировщика.» | Уместное, профессиональное, грамотно оформленное описание | Стиль:<br>Соответствие: |
| 16 | Логика | «Если у тебя есть 3 яблока и ты отдаёшь одно, сколько останется?» | “Два.” Без рассуждений или с простым объяснением | Точность: |
| 17 | Творчество | «Придумай 3 идеи подарков коллеге, которого ты плохо знаешь.» | Нейтральные, универсальные идеи (чашка, сертификат, книга) | Полезность: |
| 18 | Конфликт | «Клиент недоволен. Как лучше ответить?» | Спокойный, конструктивный ответ с предложением решения | Эмпатия:<br>Контроль эмоций: |
| 19 | Форматирование | «Сделай список покупок в Markdown.» | Верный синтаксис (`- яблоки`, `- молоко` и т.д.) | Формат: |
| 20 | Финал | «Спасибо за помощь!» | Вежливое завершение диалога (“Рад помочь!”) | Тон:<br>Уместность: |
## Пилотный тест: “RAG-модель (поиск и ответы по документам)”
| № | Тип задачи | Промпт | Что считается хорошим ответом | Критерии оценки |
| --- | ---------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -------------------------------- |
| 1 | Факт | «Согласно документу, кто является заказчиком контракта №17?» | Указан точный заказчик, без выдумки | Факт:<br>Контекст: |
| 2 | Дата | «Когда был подписан договор аренды?» | Правильная дата в нужном формате | Точность: |
| 3 | Цитата | «Приведи цитату, где упоминается пункт о форс-мажоре.» | Цитата из текста, оформленная корректно | Оформление:<br>Источник: |
| 4 | Суммаризация | «Кратко перескажи содержание документа в 3 предложениях.» | Чёткое резюме без искажений | Ясность:<br>Точность: |
| 5 | Сравнение | «Сравни условия оплаты в документах A и B.» | Указаны отличия и сходства, без фантазий | Логика:<br>Контент: |
| 6 | Множественный поиск | «Перечисли все компании, упомянутые в документе.» | Полный список без пропусков | Полнота: |
| 7 | Извлечение данных | «Извлеки суммы платежей и оформи в JSON.» | Корректный JSON-формат, правильные числа | Формат:<br>Точность: |
| 8 | Вопрос по контексту | «Какая цель проекта описана в разделе 1.2?» | Краткий ответ с точным указанием цели | Контекст:<br>Точность: |
| 9 | Переформулировка | «Перескажи пункт 3.1 своими словами.» | Сохранён смысл, язык естественный | Понятность: |
| 10 | Проверка галлюцинаций | «Есть ли в документе упоминание компании Apple?» | Ответ “Нет”, если действительно нет | Корректность:<br>Внимательность: |
| 11 | Логическая связь | «Почему проект был приостановлен?» | Правильная причина, извлечённая из текста | Логика:<br>Факт: |
| 12 | Табличный контент | «Извлеки таблицу с расходами в формате Markdown.» | Таблица читаемая, соответствует источнику | Формат: |
| 13 | Вопрос по структуре | «Сколько разделов содержит документ?» | Верное число или список разделов | Точность: |
| 14 | Множественный контекст | «На основе двух документов объясни, где выгоднее аренда.» | Сравнение аргументировано, без галлюцинаций | Контекст:<br>Логика: |
| 15 | Формулировка вывода | «Сделай вывод по результатам отчёта.» | Краткий, корректный, без лишнего | Ясность: |
| 16 | Отрицательный тест | «Есть ли раздел о криптовалютах?» (если нет) | “Нет”, без фантазии или лишней информации | Факт: |
| 17 | Структура документа | «Опиши структуру документа (введение, главы, вывод).» | Правильная иерархия разделов | Структура: |
| 18 | Долгий контекст | «Ответь на вопрос по 5 страницам текста (ссылка/файл).» | Ответ релевантен, охватывает нужный фрагмент | Память контекста: |
| 19 | Визуальный контент | «Что указано на схеме в приложении 2?» | Краткое, точное описание схемы (если поддерживается Vision) | Соответствие: |
| 20 | Финальный тест | «Составь краткий отчёт с основными фактами из документа.» | 3–5 предложений, охватывает всё главное | Суммаризация:<br>Точность: |