# Зачем нужен пилотный тест? Когда ты выбираешь модель на 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>Точность: |