中文翻译暂不可用,显示俄语原文。
Создать benchmark для агентов
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Создать benchmark для агентов
1. Цель задачи
Разработать эталонный набор тестов (benchmark) из 200 запросов для оценки качества AI-агентов, выполняющих многошаговые действия. Каждый запрос сопровождается эталонной траекторией — последовательностью действий, которые агент должен совершить для успешного завершения задачи. Ключевой результат готовый датасет в формате JSON, метрики и скрипт оценки, позволяющие измерить успешность агента на golden set из 20 запросов с порогом >0.9.
2. Исходные данные
| Что нужно | Откуда взять |
|---|---|
| 200 запросов (prompts) с описанием задачи | Сгенерировать синтетически с помощью LLM (GPT-4o mini) и вручную отобрать 30 для golden set |
| Ожидаемые траектории для каждого запроса (список шагов) | Разработать экспертно на основе логики выполнения задачи; для golden set — утвердить после проверки независимым ревьювером |
| Среда выполнения агента (если требуется) | Симулировать через вызовы API (OpenAI/Anthropic) в контролируемом режиме без живых внешних сервисов |
| Эталонный агент для пилотирования | Простая реализация ReAct-агента на LangChain с ограниченным набором инструментов (калькулятор, поиск в Wikipedia, чтение файлов) |
Если нет реального инструмента — симулируем:
- Генерация запросов — использовать
openai.ChatCompletionс промптом, запрашивающим реалистичные задачи для агента (например, "Спланируй поездку в Берлин: найди билеты, отель, составь список достопримечательностей"). - Генерация эталонных траекторий — после ручного написания 5 примеров, дообучить LLM на этих примерах (few-shot) и автоматически сгенерировать траектории для остальных, затем проверить и откорректировать.
- Среда выполнения — вместо реального веб-браузера или API использовать мок-объекты с возможностью возврата предопределённых ответов (mock servers на
flask).
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Язык программирования | Python 3.11+ | Разработка скриптов, генерация данных, оценка |
| Генерация данных | OpenAI API (GPT-4o mini / GPT-4o), langchain | Создание запросов и траекторий |
| Хранение benchmark | JSON (файл benchmark.json) | Фиксация датасета |
| Агент для пилотирования | LangChain (ReAct) + инструменты (WikipediaAPIWrapper, Calculator, FileSystemTool) | Тестирование benchmark |
| Метрики | Собственный Python-скрипт | Вычисление точности шагов, полноты, успешности |
| Версионирование | Git + DVC (опционально) | Отслеживание изменений в датасете |
| CI/CD | GitHub Actions (опционально) | Автоматический запуск тестов при изменении |
4. Этапы выполнения
Этап 1: Определение домена и структуры benchmark (2 часа)
Действия
- Выбрать 3–4 домена, где агенты проявляют полезность: онлайн-бронирование, работа с документами, поиск информации, планирование.
- Определить типы траекторий: последовательные (линейные), ветвящиеся (условные), циклические (повторяющиеся попытки).
- Разработать единый формат записи запроса и траектории. Пример структуры JSON:
{ "id": "task_001", "domain": "travel", "prompt": "Забронируй билет на поезд из Москвы в Санкт-Петербург на 15 мая...", "golden_trajectory": [ {"action": "search_flights", "parameters": {"from": "Москва", "to": "СПб", "date": "2025-05-15"}}, {"action": "select_option", "parameters": {"index": 2}}, {"action": "confirm_booking", "parameters": {"email": "user@example.com"}} ], "expected_outcome": "Билет куплен, письмо отправлено", "allowed_actions": ["search_flights", "select_option", "confirm_booking"], "hard_constraints": ["Обязательно email"] } - Зафиксировать 5 правил валидации траекторий (например, каждый шаг должен быть атомарным, не должно быть лишних действий).
Ожидаемый результат этапа Документ-спецификация benchmark с примерами формата и правилами.
Этап 2: Генерация 200 запросов с ожидаемыми траекториями (8 часов)
Действия
- Написать скрипт
generate_benchmark.py, который: - Запустить генерацию: 50 запросов на домен (4 домена = 200). Пример промпта:
Сгенерируй задачу для AI-агента в домене "travel". Задача должна включать 3-5 шагов. Верни JSON с полями: id (task_001), prompt, golden_trajectory (массив объектов с action и parameters). Используй список разрешённых действий: search_flights, search_hotels, book_ticket, confirm_payment. Пример вывода: {"id": "task_001", "prompt": "Забронируй перелёт Москва-Париж...", "golden_trajectory": [{"action": "search_flights", ...}]} - Вручную проверить и отредактировать первые 20 запросов (golden set). Для этого:
- Запустить каждого из 20 промптов на эталонном агенте (из этапа 3).
- Сравнить траекторию агента с предложенной LLM; при расхождении скорректировать golden_trajectory.
- Оставшиеся 180 запросов пропустить через автоматическую валидацию:
- Проверить, что все шаги используют только разрешённые действия.
- Проверить, что траектория не пуста и не содержит дублирующихся шагов.
- Отбраковать невалидные (ожидать не более 5% брака); при большем проценте — улучшить промпт.
Ожидаемый результат этапа Файл benchmark_v1.json с 200 запросами, из которых 20 помечены как "golden": true.
Этап 3: Разработка метрик и скрипта оценки (3 часа)
Действия
- Определить метрики:
success_rate— доля задач, где агент в точности повторил golden_trajectory (порядок и действия совпадают).partial_accuracy— доля шагов, совпадающих с golden (без учёта порядка).coverage— доля запросов, где агент выполнил хотя бы один шаг.exact_match(только для golden set) — 1 если все шаги совпали, иначе 0.success_rate_golden— success_rate на golden set.
- Написать скрипт
evaluate.py, который: - Реализовать функцию
fuzzy_compareдля случая, когда agent_trajectory содержит дополнительные шаги:def trajectory_match(golden, actual): # greedy matching: для каждого шага golden ищем совпадение в actual used = set() matches = 0 for step in golden: for i, a_step in enumerate(actual): if i in used: continue if actions_match(step, a_step): matches += 1 used.add(i) break return matches / len(golden) if golden else 0 - Создать dummy-лог агента для проверки скрипта.
Ожидаемый результат этапа Рабочий скрипт evaluate.py, который выводит метрики в консоль и сохраняет результаты в eval_results.json.
Этап 4: Пилотирование на эталонном агенте (4 часа)
Действия
- Собрать простого ReAct-агента на LangChain:
- Использовать ChatOpenAI (GPT-4o-mini) как "мозг".
- Подключить инструменты: Wikipedia, Calculator, FileSystem (только чтение), SimpleWebSearch (mock, возвращает заранее заданные страницы).
- Код агента в
agent.py.
- Ограничить max_iterations до 10 шагов.
- Запустить агента на всех 200 запросах (можно с использованием asyncio для ускорения) и сохранить логи в
agent_logs/. - Прогнать
evaluate.pyна полученных логах. - Проанализировать слабые места: на каких запросах success_rate низкий? Если на golden set success_rate < 0.9:
- Исправить ошибки в golden_trajectory (возможно, они неоптимальны).
- Улучшить инструкции для агента (system prompt).
- Повторить замер до достижения порога >0.9.
- Зафиксировать финальные версии benchmark и логов.
Ожидаемый результат этапа Подтверждение, что эталонный агент проходит golden set с success_rate >0.9; таблица метрик по всем 200 задачам.
Этап 5: Документация и упаковка (2 часа)
Действия
- Оформить репозиторий со структурой:
benchmark_agent/ ├── data/ │ ├── benchmark.json │ └── golden_indices.txt (список id golden-задач) ├── agent/ │ ├── agent.py │ └── tools.py ├── evaluate/ │ ├── metrics.py │ └── evaluate.py ├── generate/ │ └── generate_benchmark.py └── README.md - Написать README с описанием:
- Формат benchmark.
- Инструкция по запуску оценки.
- Пример использования.
- Запустить линтеры (ruff, black) и убедиться в чистоте кода.
- Сделать commit и push в ветку
main.
Ожидаемый результат этапа Публичный репозиторий с полностью документированным benchmark.
5. Критерии приемки (Definition of Done)
- Файл
benchmark.jsonсодержит ровно 200 записей с корректной структурой (id, prompt, golden_trajectory, allowed_actions). - 20 записей помечены флагом
"golden": true. - Все шаги траекторий используют только разрешённые действия из соответствующего списка.
- Скрипт
evaluate.pyзапускается без ошибок и выводит success_rate, partial_accuracy, coverage. - При прогоне на golden set через эталонного агента (ReAct)
success_rate_golden >= 0.9. - В репозитории есть документация (README), описывающая формат и использование.
- Код отформатирован согласно PEP8 (ruff score A).
- Генерация benchmark воспроизводима: при повторном запуске
generate_benchmark.pyс тем же seed получается идентичный результат.
6. Ожидаемый результат
Основной артефакт — папка benchmark_agent/, содержащая:
data/benchmark.json— эталонный датасет из 200 запросов и траекторий.evaluate/evaluate.py— скрипт для автоматической оценки агента.agent/agent.py— пример эталонного агента для пилотирования.README.md— документация.
Дополнительные результаты: eval_results.json с метриками для эталонного агента, лог выполнения agent_logs/.
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Траектории, сгенерированные LLM, содержат логические ошибки | Ручная валидация golden set (20 запросов) + автоматическая проверка на соответствие allowed_actions |
| Агент не может выполнить задачу из-за неоднозначности промпта | Добавить в benchmark поле "clarifications": "вопрос, который нужно задать пользователю" или указать обязательные шаги |
| Несовпадение формата шагов (лишние пробелы, разные названия действий) | Нормализация при сравнении: привести к lowercase, удалить лишние параметры |
| Время выполнения всех 200 запросов через API слишком велико (лимиты, стоимость) | Использовать симуляцию среды (mock tools) и модель GPT-4o-mini; при необходимости — кэшировать ответы |
| Порог 0.9 на golden set недостижим из-за сложности задач | Разделить benchmark на уровни (easy/medium/hard); для golden set отобрать только лёгкие задачи, пока не будет улучшен агент |
8. Бюджет времени (оценка)
| Этап | Время (часы) |
|---|---|
| 1. Определение домена и структуры | 2 |
| 2. Генерация 200 запросов и траекторий | 8 |
| 3. Разработка метрик и скрипта оценки | 3 |
| 4. Пилотирование на эталонном агенте | 4 |
| 5. Документация и упаковка | 2 |
| Итого | 19 |
Примечание Для первого выполнения задачи рекомендуется увеличить бюджет до 24 часов, заложив 5 часов на отладку и доработку golden set.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 12 | Метрики для сравнения последовательностей действий (edit distance, LCS) |
| 45 | Промпт-инжиниринг для генерации тестовых данных |
| 78 | Способы оценки качества траекторий агента (Process Reward Model) |
| 112 | Форматы представления benchmark в JSON и YAML |
| 189 | Эффективная симуляция окружения для тестирования агентов (mock tools) |
| 215 | Критерии выбора golden set и split train/test/validation |
| 278 | Методы детекции неоднозначностей в задачах для агентов |
| 301 | Интеграция LLM-валидатора для автоматической проверки траекторий |
| 456 | Бенчмарки для web-агентов (WebArena, AgentBench) — референсные датасеты |
| 522 | Оптимизация стоимости генерации данных (batching, caching) |
10. Чек-лист самопроверки
- Я убедился, что все 200 запросов имеют корректный JSON без синтаксических ошибок.
- Я прогнал evaluate.py на двух случайных golden-задачах и получил ожидаемые метрики.
- Я сравнил три сгенерированные траектории с ручными и убедился в их разумности.
- Я проверил, что скрипт generate_benchmark.py воспроизводим (одинаковый seed → одинаковый вывод).
- Я прочитал README так, как если бы я был новым пользователем, и выполнил шаги "install → evaluate" без ошибок.