中文翻译暂不可用,显示俄语原文。
Реализовать golden dataset для агента
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Реализовать golden dataset для агента
1. Цель задачи
Научиться создавать размеченный «золотой» набор данных (golden dataset), который служит эталоном для тестирования и оценки агентов. Разработать 100 пар «входной запрос → trajectory|ожидаемая траектория агента (последовательность действий, вызовы инструментов, наблюдения)» и обеспечить согласованность разметки между аннотаторами (Inter‑annotator agreement >0.85). Такой датасет позволяет автоматизировать тестирование|регрессионное тестирование и сравнивать разные версии агентов.
Ключевой результат Файл golden_dataset_v1.json со 100 примерами и отчёт о согласованности разметки (Cohen’s κ ≥ 0.85).
2. Исходные данные
| Что нужно | Откуда взять |
|---|---|
| Действующий агент (реальный или симуляция) | Собственный пет-проект (например, LangGraph) или открытый референс (OpenAI Function Calling, ReAct) |
| 100 исходных запросов к агенту | Сгенерировать вручную или взять из логов / тестовых сценариев |
| Инструмент для совместной разметки | Google Sheets, Airtable, Label Studio или простой CSV + Git |
| Скрипт для вычисления согласованности | Python с библиотеками scikit-learn, pandas |
| 2–3 аннотатора | Участники команды (включая автора) |
Если нет реального агента — симулируем:
- Создать простого агента на Python с помощью LangChain / LangGraph, который умеет отвечать на вопросы по документации (например, по pandas). Агент имеет инструменты:
search_docs,calculate. - Для каждого из 100 запросов запустить агента (любой моделью, качество не важно) и записать его фактические шаги – это сырая запись траектории.
- Аннотаторы будут не просто копировать сырые шаги, а создавать идеальную, эталонную траекторию – то есть минимально необходимые действия для правильного ответа.
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Агент (референс) | LangChain / LangGraph / OpenAI Function Call | Генерация сырых траекторий, понимание возможных шагов |
| Разметка | Google Sheets / Airtable / Label Studio | Коллективная аннотация и ревью |
| Версионирование данных | Git + CSV / JSON | Хранение и контроль версий |
| Анализ согласованности | Python (scikit‑learn, pandas) | Расчёт Cohen’s κ / Fleiss’ κ для последовательностей |
| Метрики качества | custom script | Вычисление agreement, визуализация расхождений |
4. Этапы выполнения
Этап 1: Определение схемы разметки и подготовка датасета (1–2 часа)
Действия
-
Определить структуру траектории агента
Каждая траектория – это последовательность шагов. Шаг состоит из:step_id(int),- action (строка – название вызванного инструмента или
final_answer), input_summary(краткое описание, что передано в инструмент),output_summary(ожидаемый результат вызова).
Пример:
{ "query": "Какая средняя продажа за декабрь 2024?", "expected_trajectory": [ {"step": 1, "action": "search_docs", "input_summary": "поиск отчёта по продажам за декабрь", "output_summary": "данные по продажам"}, {"step": 2, "action": "calculate", "input_summary": "среднее по столбцу Revenue", "output_summary": "12345.67"}, {"step": 3, "action": "final_answer", "input_summary": "12345.67", "output_summary": "Средняя продажа: 12345.67"} ] } -
Подготовить 100 запросов
Сгенерировать запросы, покрывающие разные сценарии (простые, требующие одного инструмента, сложные с несколькими шагами, граничные случаи).
Записать в файл queries.csv с колонками:query_id,query_text. -
Развернуть инструмент разметки
Создать Google Sheet с колонками:query_id,query_text,annotator_name,trajectory_json, status. Предусмотреть валидацию: ячейкаtrajectory_jsonдолжна содержать валидный JSON по схеме.
Ожидаемый результат этапа
Готовая схема траектории, 100 запросов в файле, настроенная таблица для разметки.
Этап 2: Первый раунд аннотации (3–4 часа)
Действия
- Разделить 100 запросов на 3 набора (например, по 40 / 30 / 30) для каждого аннотатора, с перекрытием не менее 30% (т.е. минимум 30 общих запросов для всех аннотаторов).
- Каждый аннотатор для каждого своего запроса заполняет колонку
trajectory_json– последовательность действий, которая, по его мнению, должна быть выполнена агентом для правильного ответа.
Важно: аннотаторы не видят траектории друг друга. - Зафиксировать время – не более 2 минут на один пример (180 минут на 90 примеров с учётом повторений).
Ожидаемый результат этапа
Таблица с размеченными траекториями от 2–3 аннотаторов, как минимум 30 запросов размечены всеми.
Этап 3: Измерение согласованности и разрешение конфликтов (1–2 часа)
Действия
-
Экспортировать данные в CSV, написать Python-скрипт
compute_agreement.py, который:- Для каждого общего запроса вычисляет попарное совпадение последовательностей (например, с помощью расстояния Левенштейна на уровне действий и нормализации к [0,1]).
- Строит матрицу согласия и вычисляет Cohen’s κ (для 2 аннотаторов) или Fleiss’ κ (для 3+) на основе бинарной метрики «шаг совпадает / не совпадает».
- Выводит средний κ по всем запросам.
-
Проверить порог 0.85. Если κ < 0.85:
- Проанализировать запросы с наибольшими расхождениями.
- Провести совместную сессию: обсудить неоднозначные случаи и уточнить правила разметки (например, считать ли порядок шагов жёстким или допускать перестановки).
- Внести изменения в схему, если необходимо (добавить новые действия, уточнить описания).
-
Повторить разметку только для запросов с расхождениями (не более 10–15 штук).
Ожидаемый результат этапа
Отчёт с вычисленным κ, список уточнённых правил, исправленные траектории в таблице.
Этап 4: Финальная консолидация и формирование golden dataset (1 час)
Действия
-
Для каждого запроса выбрать эталонную траекторию:
- Если все аннотаторы согласны – берём любую.
- Если есть разногласия после обсуждения – берём траекторию, одобренную большинством или лидом.
-
Собрать финальный датасет в формате JSON:
[ { "query_id": "001", "query": "Какая средняя продажа за декабрь 2024?", "expected_trajectory": [ {"step": 1, "action": "search_docs", "input": "продажи декабрь 2024", "expected_output": "DataFrame с продажами"}, {"step": 2, "action": "calculate", "input": "среднее по Revenue", "expected_output": "12345.67"} ] }, ... ] -
Выложить датасет в Git (например, data/golden_dataset_v1.json) и добавить краткое описание в README.md.
-
Приложить скрипт
compute_agreement.pyи финальный отчёт с метриками.
Ожидаемый результат этапа
Готовый golden dataset и инструменты для его воспроизведения.
Этап 5: Автоматизация проверки (опционально, 1 час)
Действия
- Написать тест, который скармливает каждый запрос агенту и сравнивает полученную траекторию с ожидаемой.
- Использовать семантическое сравнение (например, через эмбеддинги шагов) для допуска небольших вариаций.
- Сохранить отчёт о прохождении тестов – golden_test_report.html.
Ожидаемый результат этапа
CI-пайплайн (или локальный скрипт), который запускает агента на golden dataset и выдаёт метрику точности траекторий.
5. Критерии приемки (Definition of Done)
- Создан файл golden_dataset_v1.json со 100 примерами.
- Каждый пример содержит
query_id, query, expected_trajectory как массив шагов. - Inter‑annotator agreement (Cohen’s κ / Fleiss’ κ) ≥ 0.85 по общей выборке.
- Исходные сырые разметки сохранены (CSV/JSON) для аудита.
- Написан скрипт
compute_agreement.py, воспроизводимый и документированный. - В репозитории есть README.md с описанием структуры датасета и правил разметки.
- Минимум 2 аннотатора участвовали в разметке каждого из 30 общих запросов.
- Все расхождения разрешены и зафиксированы в разделе
notesк датасету (или в отдельном файлеdiscrepancies.md).
6. Ожидаемый результат
- Основной артефакт файл golden_dataset_v1.json – 100 записей с ожидаемыми траекториями.
- Сопутствующие файлы
- Опционально скрипт
test_agent_on_golden.pyдля автоматической валидации агента.
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Аннотаторы по-разному понимают «идеальную траекторию» | Перед разметкой провести калибровку на 5 примерах, обсудить и зафиксировать правила в документе |
| Некоторые запросы допускают несколько правильных путей | Разрешить альтернативные траектории, пометив их как allowed_variations |
| Сложность вычисления согласованности для последовательностей | Использовать не просто точное совпадение строк, а метрику на основе edit distance + бинарное пороговое значение (например, ≥0.9) |
| Аннотаторы выгорают при разметке 100 примеров | Разбить на 2–3 раунда, дать перерыв, оплатить время (если в рамках работы) |
| Технические ошибки при экспорте/импорте JSON | Использовать валидацию JSON Schema на стороне таблицы (см. Google Sheets Apps Script) |
8. Бюджет времени (оценка)
| Этап | Время (часы) |
|---|---|
| Этап 1: Подготовка схемы и запросов | 1..2 |
| Этап 2: Первый раунд аннотации (3 аннотатора по 2 часа) | 6 (суммарно) |
| Этап 3: Измерение согласованности и разрешение конфликтов | 2..3 |
| Этап 4: Финальная консолидация и формирование датасета | 1 |
| Этап 5: Автоматизация проверки (опционально) | 1 |
| Итого | 11..13 |
Примечание: Для первого раза рекомендуется выделить 2 дня по 6–7 часов, включая синхронизацию аннотаторов.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 101 | Разработка тестовых наборов для агентов |
| 103 | Метрики качества траекторий агента |
| 104 | Автоматическое сравнение траекторий (sequence alignment) |
| 107 | Label studio для разметки диалогов |
| 109 | Cohen’s kappa и Fleiss’ kappa для категориальных данных |
| 114 | Версионирование датасетов и данных |
| 119 | Оценка агента на golden dataset в CI |
| 125 | Генерация синтетических запросов для тестирования |
| 130 | Кросс-валидация разметки несколькими аннотаторами |
10. Чек-лист самопроверки
- Я выбрал агента с чётко определёнными инструментами и действиями.
- Я подготовил 100 запросов, которые покрывают разнообразные сценарии.
- Я создал Google Sheet / Airtable с колонками, включая JSON для траектории.
- Я привлёк минимум двух коллег для аннотации и организовал перекрытие.
- Я написал и запустил скрипт для вычисления Cohen’s κ / Fleiss’ κ.
- Я разрешил все расхождения и записал окончательные траектории.
- Я экспортировал финальный датасет в golden_dataset_v1.json согласно схеме.
- В README описаны правила разметки и формат данных.
- Я проверил, что датасет можно использовать для регрессионного тестирования агента.