7.9 KiB
Система разметки через GUI (автопрогоны)
Документ описывает практический контур, который используется оператором в интерфейсе
История автопрогонов: генерация вопросов, запуск прогонов, разметка ответов, закрытие кейсов и пост-анализ.
Дата актуализации: 2026-05-10
1. Назначение
Цель системы:
- Прогонять реалистичные пользовательские вопросы сериями.
- Видеть фактические ответы ассистента в диалоговом формате.
- Размечать качество ответов и управленческое решение по кейсу.
- Формировать очередь фикс-пакетов без ручной выгрузки логов в чат.
2. Где находится источник истины
- Канон поведения ассистента:
docs/TECH/assistant_canon.md
- Реестр возможностей:
docs/TECH/capabilities_registry.json
- Схема решений ручной разметки:
docs/TECH/manual_case_decision_schema.json
3. Основной сценарий оператора
Шаг 1. Настройка генерации
Оператор задает:
- режим генерации (
qwen_seed/codex_creative); - количество вопросов;
- "личность" автогенерации;
- prompt выбранной личности;
- автора генерации;
- флаг сохранения кейс-сета в
eval_cases.
Важно:
qwen_seed использует тот же активный LLM-контур, что и ответы ассистента
(тот же provider/model/baseUrl), но в роли генератора вопросов.
Шаг 2. Генерация пачки
По кнопке "Сгенерировать пачку" создается generation record.
Запрос:
POST /api/autoruns/autogen/generate
История доступна через:
GET /api/autoruns/autogen/history
Шаг 3. Ручная правка вопросов
Перед запуском оператор редактирует список "Вопросы к запуску":
- удаляет нерелевантные;
- правит формулировки;
- оставляет итоговую пачку для прогона.
Шаг 4. Запуск прогонов
Запуск идет асинхронно (на текущем этапе для assistant_stage1):
POST /api/eval/run-async/start
В payload передается итоговый массив questions[].
Шаг 5. Live-мониторинг
Статус job обновляется polling-ом:
GET /api/eval/run-async/:job_id
По мере обработки кейсов интерфейс подхватывает:
- прогон;
- кейсы;
- сообщения вопрос/ответ в диалоге.
Шаг 6. Разметка ответа
Размечается только сообщение role=assistant.
Через модалку задаются:
- rating
1..5; - comment;
manual_case_decision;- author.
Сохранение:
POST /api/autoruns/annotations
Шаг 7. Закрытие кейса
В комментариях доступен статус resolved:
- отметить выполненным;
- вернуть в открытые.
Запрос:
PATCH /api/autoruns/annotations/:annotation_id
Шаг 8. Фильтрация и пост-анализ
Доступно:
- фильтр по
manual_case_decision; - скрытие выполненных (
resolved=true); - обновление пост-анализа и очередей фиксов.
Запросы:
GET /api/autoruns/annotationsGET /api/autoruns/post-analysis
4. Решения ручной разметки (manual_case_decision)
Текущее множество:
covered_okcovered_but_bad_answercandidate_for_implementationneeds_routing_extensionout_of_scope_but_answer_softlyunsafe_question_limit_strictlyneeds_dialog_policy_fixneeds_capability_registry_updatebad_test_case
Queue mapping:
covered_ok->nonecovered_but_bad_answer->policy_fixcandidate_for_implementation->routing_extensionneeds_routing_extension->routing_extensionout_of_scope_but_answer_softly->soft_boundaryunsafe_question_limit_strictly->safety_policyneeds_dialog_policy_fix->policy_fixneeds_capability_registry_update->capability_registrybad_test_case->testset_hygiene
5. Хранилища данных
- Аннотации:
llm_normalizer/data/autorun_annotations/annotations.json
- История генерации:
llm_normalizer/data/autorun_generators/history.json
- Кейс-сеты генератора:
llm_normalizer/data/eval_cases/*.json
- Диалоги сессий:
llm_normalizer/data/assistant_sessions/*.json
6. API-карта раздела
История прогонов
GET /api/autoruns/historyGET /api/autoruns/history/:run_idGET /api/autoruns/history/:run_id/case/:case_id/dialog
Разметка
GET /api/autoruns/annotationsPOST /api/autoruns/annotationsPATCH /api/autoruns/annotations/:annotation_idGET /api/autoruns/manual-decision-schema
Пост-анализ
GET /api/autoruns/post-analysis
Автогенерация
GET /api/autoruns/autogen/personality-catalogPOST /api/autoruns/autogen/generateGET /api/autoruns/autogen/history
Асинхронный запуск
POST /api/eval/run-async/startGET /api/eval/run-async/:job_id
7. Тех-проверки после изменений
Минимальный чек:
- Генерация пачки вопросов работает.
- Async run запускается и отдает live-статус без падения.
- В диалоге видны пары вопрос/ответ.
- Аннотация сохраняется и редактируется повторно.
resolvedпереключается без рассинхрона в UI.- Фильтр "скрыть выполненные" корректно исключает
resolved=true. - Пост-анализ показывает очереди и кандидатов.
- Текст в интерфейсе читается без mojibake.
- Старые сохраненные автопрогоны с C1-control mojibake в
history.jsonи runtime job payload должны отдаваться через backend уже в восстановленной кириллице; контрольные примеры:БОЛЬШОЙ ОБЩИЙ,АЛЬТЕРНАТИВА.
Важно после правок encoding/autorun:
- перезапустить backend, чтобы UI получил новый repair-слой;
- обновить список автопрогонов в браузере;
- если replacement-character
U+FFFDостается видимым, сравнить API payloadGET /api/autoruns/autogen/historyс состоянием frontend/browser cache.
8. Ограничения текущей версии
- Async run ограничен
assistant_stage1. - Качество live-данных зависит от заполнения session-файлов на стороне рантайма.
- Пост-анализ основан на фактической ручной разметке; без нее очереди пустые.