5.2 KiB
Domain Case Loop Repo Adapter
Документ фиксирует, как шаблонный пакет мультиагентной оркестрации привязывается к реальному репозиторию NDC_1C.
Что уже есть в проекте
- Ассистентный runtime с
address_queryиdeepветками. - Technical export в UI:
llm_normalizer/frontend/src/utils/conversationExport.ts
- Async single-case прогон:
POST /api/eval/run-async/startGET /api/eval/run-async/:job_id
- Session logs:
llm_normalizer/data/assistant_sessions/*.json
- Autoruns/annotations/post-analysis API:
llm_normalizer/backend/src/routes/autoRuns.ts
Что добавлено для project-scoped Codex automation
- root
.codex/:.codex/config.toml.codex/agents/orchestrator.toml.codex/agents/domain_coder.toml.codex/agents/domain_analyst.toml.codex/skills/domain-case-loop/...
- helper script:
scripts/domain_case_loop.py
- artifact root:
artifacts/domain_runs/
Почему это лучший путь для текущего репо
Мы не встраиваем новый orchestration runtime в продуктовый backend. Мы поднимаем отдельный Codex-driven outer loop, который использует уже существующие:
- assistant runtime;
- technical debug payload;
- session logs;
- async eval single-case flow.
Это позволяет автоматизировать текущую ручную схему без architecture drift.
Два режима baseline/rerun capture
1. Автоматический run-case
Использует живой backend:
- по умолчанию helper запускает кейс через
local / qwen2.5-14b-instruct-1m / http://127.0.0.1:1234/v1; - для переопределения доступны
--llm-provider,--llm-model,--llm-base-url,--llm-api-key.
python scripts/domain_case_loop.py run-case `
--domain open_contracts `
--question "какие есть открытые договора на март 2020" `
--analysis-date 2020-03-31 `
--expected-capability contracts_with_open_settlements_as_of_date `
--expected-result-mode confirmed_balance
Что делает:
- создает
artifacts/domain_runs/<case_id>/; - запускает
assistant_stage1на одном вопросе; - ждет completion;
- забирает session/report artifacts;
- сохраняет
baseline_output.md,baseline_debug.json,baseline_turn.jsonи связанные JSON.
2. Импорт уже скопированного техчата
Подходит для текущего исторического режима, где у пользователя уже есть markdown export:
python scripts/domain_case_loop.py import-export `
--domain open_contracts `
--input "C:\\Users\\DCTOUCH\\Desktop\\акие_есть_открытые_договора_на_март_2020.md"
Канонический JSON для аналитика
Главный вход аналитика теперь:
baseline_turn.jsonrerun_turn.json
Они содержат:
- вопрос;
- ответ;
technical_debug_payload;- session summary;
- run/session ids;
- report excerpt;
- ссылку на markdown export.
Правило завершения цикла
Кейс считается accepted, только если одновременно выполнено:
quality_score >= 80;- нет unresolved
P0; - rerun не маскирует heuristic output под confirmed answer.
Во всех остальных случаях итог должен быть:
partialblockedneeds_exact_capability
needs_exact_capability здесь означает не "закрыть кейс как чужой", а "доменный запрос валиден для проекта, но текущий контур еще не умеет его отрабатывать точно".
Политика для новых и неразмеченных доменов
Outer loop должен считать нормальным, что пользователь будет приносить кейсы из доменов, которые еще не размечены в текущем runtime.
Если baseline показывает, что:
- вопрос лежит внутри целевого project scope;
- 1С/MCP/данные проекта концептуально относятся к этому домену;
- ответ не получен из-за отсутствующего intent/route/capability/bootstrap;
то кейс нельзя автоматически считать out_of_scope.
Такой кейс должен переходить в режим domain enablement:
- явно зафиксировать, чего не хватает:
intent,route,capability,data access,contour bootstrap; - сформировать минимальную задачу на прокидывание контура;
- после этого повторно прогонять baseline/rerun уже как продуктовый кейс.