Цель: Построить фреймворк для оценки, который систематически тестирует и оценивает ваших AI-агентов, используя ту же локальную модель как агент под тестом, так и судью, чтобы вы могли с уверенностью улучшать подсказки перед выпуском.
При создании AI-агентов «выглядит нормально» — это недостаточно. Разработка, ориентированная на оценку, рассматривает выводы агента как код: сначала пишутся тесты, затем измеряется качество, и выпуск происходит только при достижении порога оценок.
В Zava Creative Writer (Часть 7) агент Editor уже выступает в роли лёгкого оценщика; он принимает решение ACCEPT или REVISE. Эта лабораторная работа формализует этот шаблон в воспроизводимый фреймворк оценки, который можно применять к любому агенту или пайплайну.
| Проблема | Решение |
|---|---|
| Изменения в подсказках тайно ухудшают качество | Золотой набор данных обнаруживает регрессии |
| Смещение «работает на одном примере» | Несколько тестовых случаев выявляют крайние случаи |
| Субъективная оценка качества | Правила + оценка судьи на базе LLM дают числовые показатели |
| Нет способа сравнить варианты подсказок | Параллельные прогонки с агрегированными оценками |
Золотой набор данных — это куратированный набор тестовых случаев с известными ожидаемыми результатами. Каждый тестовый случай включает:
- Вход: Подсказка или вопрос для агента
- Ожидаемый результат: Что должен содержать правильный или качественный ответ (ключевые слова, структура, факты)
- Категория: Группировка для отчётности (например, «фактическая точность», «тон», «полнота»)
Быстрые, детерминированные проверки, не требующие LLM:
| Проверка | Что проверяет |
|---|---|
| Ограничения по длине | Ответ не слишком короткий (ленивый) и не слишком длинный (болтливый) |
| Обязательные ключевые слова | В ответе упомянуты ожидаемые термины или сущности |
| Валидация формата | JSON парсится, присутствуют заголовки Markdown |
| Запрещённый контент | Нет выдуманных названий брендов, нет упоминаний конкурентов |
Используйте ту же локальную модель для оценки собственных выводов (или выводов с другим вариантом подсказки). Судья получает:
- Исходный вопрос
- Ответ агента
- Критерии оценки
И возвращает структурированную оценку. Это отражает шаблон Editor из Части 7, но применяется системно ко всей тестовой базе.
| Требование | Детали |
|---|---|
| Foundry Local CLI | Установлен с загруженной моделью |
| Среда выполнения | Python 3.9+ и/или Node.js 18+ и/или .NET 9+ SDK |
| Завершено | Часть 5: Отдельные агенты и Часть 6: Многоагентные рабочие процессы |
В рамках воркшопа приведён полный пример оценки, который тестирует агента Foundry Local на золотом наборе вопросов, связанных с Zava DIY.
🐍 Python
Настройка:
cd python
python -m venv venv
# Windows (PowerShell):
venv\Scripts\Activate.ps1
# macOS:
source venv/bin/activate
pip install -r requirements.txtЗапуск:
python foundry-local-eval.pyЧто происходит:
- Подключение к Foundry Local и загрузка модели
- Определение золотого набора из 5 тестовых случаев (вопросы о продуктах Zava)
- Запуск двух вариантов подсказок на каждом тестовом случае
- Оценка каждого ответа с помощью проверок по правилам (длина, ключевые слова, формат)
- Оценка каждого ответа LLM как судья (та же модель выставляет оценку качества от 1 до 5)
- Вывод сравнительной таблицы результатов для обоих вариантов подсказок
📦 JavaScript
Настройка:
cd javascript
npm installЗапуск:
node foundry-local-eval.mjsТа же пайплайн оценки: золотой набор, двойной прогон подсказок, оценка по правилам + LLM, таблица результатов.
💜 C#
Настройка:
cd csharp
dotnet restoreЗапуск:
dotnet run evalТа же пайплайн оценки: золотой набор, двойной прогон подсказок, оценка по правилам + LLM, таблица результатов.
Изучите тестовые случаи, определённые в примере оценки. Каждый тестовый случай содержит:
{
"input": "What tools do I need to build a deck?",
"expected": ["saw", "drill", "screws", "level"],
"category": "product-recommendation"
}
Вопросы для размышления:
- Почему ожидаемые значения — это ключевые слова, а не полные предложения?
- Сколько тестовых случаев нужно для надежной оценки?
- Какие категории вы бы добавили для собственного применения?
В фреймворке используются два слоя оценки:
✓ Length: 50-500 words → 1 point
✓ Keywords: 3/4 found → 0.75 points
✗ Forbidden: mentions "Home Depot" → 0 points
─────────────────────────────
Rule score: 0.58 / 1.0
Та же локальная модель выступает судьёй с структурированной рубрикой:
Rate this response on a scale of 1-5:
- 1: Completely wrong or irrelevant
- 2: Partially correct but missing key information
- 3: Adequate but could be improved
- 4: Good response with minor issues
- 5: Excellent, comprehensive, well-structured
Score: 4
Reasoning: The response correctly identifies all necessary tools
and provides practical advice, but could include safety equipment.
Вопросы для размышления:
- Когда вы бы доверяли проверкам по правилам больше, чем LLM как судье?
- Может ли модель надежно оценивать собственный вывод? Каковы ограничения?
- Как это сравнить с паттерном Editor из Части 7?
В примере запускаются два варианта подсказок на одних и тех же тестах:
| Вариант | Стиль системной подсказки |
|---|---|
| Базовый | Общий: "Вы — полезный помощник" |
| Специализированный | Детальный: "Вы — эксперт Zava DIY, который рекомендует конкретные продукты и даёт пошаговые инструкции" |
После запуска вы увидите такую таблицу оценок:
╔══════════════════════════════════════════════════════════════╗
║ EVALUATION SCORECARD ║
╠══════════════════════════════════════════════════════════════╣
║ Prompt Variant │ Rule Score │ LLM Score │ Combined ║
╠═══════════════════╪════════════╪═══════════╪════════════════╣
║ Baseline │ 0.62 │ 3.2 / 5 │ 0.62 ║
║ Specialised │ 0.81 │ 4.1 / 5 │ 0.81 ║
╚══════════════════════════════════════════════════════════════╝
Задания:
- Запустите оценку и отметьте результаты для каждого варианта
- Сделайте специализированную подсказку ещё более конкретной. Улучшается ли оценка?
- Добавьте третий вариант подсказки и сравните все три.
- Попробуйте поменять псевдоним модели (например,
phi-4-miniпротивphi-3.5-mini) и сравните результаты.
Используйте фреймворк оценки как шаблон для своих агентов:
- Определите свой золотой набор данных: напишите 5-10 тестовых случаев с ожидаемыми ключевыми словами.
- Напишите системную подсказку: инструкции для агента, которые хотите проверить.
- Запустите оценку: получите базовые оценки.
- Итеративно улучшайте: корректируйте подсказку, запускайте заново и сравнивайте.
- Установите порог: например, «не выпускать результат с общим баллом ниже 0.75».
Вернитесь к агенту Editor из Zava Creative Writer (zava-creative-writer-local/src/api/agents/editor/editor.py):
# Редактор является LLM в роли судьи в продакшене:
{"decision": "accept/revise", "editorFeedback": "...", "researchFeedback": "..."}Это тот же принцип, что и LLM как судья в Части 8, но встроенный в рабочий пайплайн, а не в оффлайн тестовый набор. Оба паттерна:
- Используют структурированный JSON в качестве вывода модели.
- Применяют критерии качества, заданные в системной подсказке.
- Принимают решение о прохождении/непрохождении.
Отличие: Editor работает в продакшене (на каждом запросе). Фреймворк оценки работает в разработке (до выпуска).
| Понятие | Вывод |
|---|---|
| Золотые наборы данных | Создавайте тесты заранее; они — ваши регрессионные тесты для AI |
| Проверки по правилам | Быстрые, детерминированные, ловят очевидные ошибки (длина, ключевые слова, формат) |
| LLM как судья | Тонкая оценка качества с использованием той же локальной модели |
| Сравнение подсказок | Запускайте несколько вариантов на одном тестовом наборе, чтобы выбрать лучший |
| Преимущество локального запуска | Вся оценка выполняется локально: нет затрат на API, лимитов скорости, данные не покидают устройство |
| Оценка до выпуска | Устанавливайте пороги качества и блокируйте релизы по результатам оценки |
- Масштабируйтесь: добавьте больше тестов и категорий в золотой набор.
- Автоматизируйте: интегрируйте оценку в ваш CI/CD.
- Продвинутые судьи: используйте крупную модель в роли судьи при тестировании вывода более маленькой.
- Отслеживайте динамику: сохраняйте результаты оценки для сравнения между версиями подсказок и моделей.
Продолжайте с Части 9: Распознавание голоса с Whisper, чтобы изучить преобразование речи в текст локально с использованием Foundry Local SDK.
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для важной информации рекомендуется обращаться к профессиональному переводу, выполненному человеком. Мы не несем ответственности за любые недоразумения или неверные толкования, возникшие в результате использования этого перевода.