167 lines
5.5 KiB
Markdown
167 lines
5.5 KiB
Markdown
# NDC AI First Layer (LLM Normalizer Playground)
|
||
|
||
Локальный модуль `front + back` для нормализации бухгалтерских запросов через OpenAI token.
|
||
|
||
Ключевые свойства:
|
||
- русифицированный GUI (терминология `NDC`);
|
||
- backend-proxy (ключ не уходит во фронт);
|
||
- Responses API + structured JSON schema `normalized_query_v1` / `normalized_query_v2` / `normalized_query_v2_0_1`;
|
||
- trace/history/eval;
|
||
- совместимый `accounting-agent` namespace для будущей интеграции в `dc_node`.
|
||
|
||
## Быстрый запуск (Windows)
|
||
|
||
1. Опционально: отдельная среда Miniconda
|
||
|
||
```powershell
|
||
conda create -n ndc-gui nodejs=22 -y
|
||
conda activate ndc-gui
|
||
```
|
||
|
||
2. Backend
|
||
|
||
```powershell
|
||
cd X:\1C\NDC_1C\llm_normalizer\backend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
3. Frontend (в новом терминале)
|
||
|
||
```powershell
|
||
cd X:\1C\NDC_1C\llm_normalizer\frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
4. Открыть GUI
|
||
|
||
- `http://localhost:5174`
|
||
|
||
Backend по умолчанию:
|
||
- `http://localhost:8787`
|
||
|
||
Чтобы включить live-probe в 1С через MCP (для `hybrid_store_plus_live` и `live_mcp_drilldown`), задайте переменные перед запуском backend:
|
||
|
||
```powershell
|
||
$env:FEATURE_ASSISTANT_MCP_RUNTIME_V1='1'
|
||
$env:ASSISTANT_MCP_PROXY_URL='http://127.0.0.1:6003'
|
||
$env:ASSISTANT_MCP_CHANNEL='default'
|
||
```
|
||
|
||
## Запуск из одной папки (VS Code)
|
||
|
||
Открой в VS Code папку:
|
||
- `X:\1C\NDC_1C\llm_normalizer`
|
||
|
||
Дальше 2 варианта:
|
||
|
||
1. Через Tasks:
|
||
- `Terminal -> Run Task -> NDC: Install All` (первый раз)
|
||
- `Terminal -> Run Task -> NDC: Dev All (Backend + Frontend)`
|
||
|
||
2. Через одну команду в терминале:
|
||
|
||
```powershell
|
||
cd X:\1C\NDC_1C\llm_normalizer
|
||
start-dev.cmd
|
||
```
|
||
|
||
С live-MCP (прокси 1С на `127.0.0.1:6003`):
|
||
|
||
```powershell
|
||
cd X:\1C\NDC_1C\llm_normalizer
|
||
start-dev-mcp.cmd
|
||
```
|
||
|
||
Или:
|
||
|
||
```powershell
|
||
cd X:\1C\NDC_1C\llm_normalizer
|
||
npm.cmd run dev:all
|
||
```
|
||
|
||
## Основные endpoint-ы
|
||
|
||
- `POST /api/openai/test-connection`
|
||
- `POST /api/normalize`
|
||
- `POST /api/eval/run`
|
||
- `GET /api/history`
|
||
- `GET /api/history/:trace_id`
|
||
- `POST /api/presets/save`
|
||
- `GET /api/presets`
|
||
- `GET /api/health`
|
||
- `GET /api/accounting-agent/v1/health`
|
||
|
||
## Где хранятся данные
|
||
|
||
- traces: `llm_normalizer/data/traces`
|
||
- presets: `llm_normalizer/data/presets`
|
||
- eval cases/reports: `llm_normalizer/data/eval_cases`
|
||
|
||
Для `POST /api/eval/run` поддержан batch-ввод через `rawQuestions` (разделитель `;` или пустая строка).
|
||
|
||
## Тесты backend
|
||
|
||
```powershell
|
||
cd X:\1C\NDC_1C\llm_normalizer\backend
|
||
npm test
|
||
```
|
||
|
||
## История автопрогонов и разметка
|
||
|
||
В интерфейсе есть отдельный режим `История автопрогонов` с операционным циклом:
|
||
|
||
1. Настроить генерацию вопросов (режим, количество, личность, prompt личности).
|
||
2. Сгенерировать пачку вопросов.
|
||
3. Отредактировать вопросы перед запуском.
|
||
4. Запустить асинхронный прогон (`assistant_stage1`, `single-pass-strict`).
|
||
5. Смотреть диалог прогона в live-режиме (polling статуса + сообщения по кейсам).
|
||
6. Разметить ответы ассистента:
|
||
- рейтинг `1..5`,
|
||
- комментарий,
|
||
- `manual_case_decision`,
|
||
- автор.
|
||
7. Отметить кейс выполненным (`resolved`) или вернуть в открытые.
|
||
8. Смотреть пост-анализ и очереди фиксов по категориям.
|
||
|
||
### Важный момент по `qwen_seed`
|
||
|
||
`qwen_seed` использует тот же активный LLM-контур подключения, что и ответы ассистента
|
||
(тот же provider/model/baseUrl), но в другой роли: генератор вопросов.
|
||
|
||
### Основные API для автопрогонов
|
||
|
||
- `GET /api/autoruns/history`
|
||
- `GET /api/autoruns/history/:run_id`
|
||
- `GET /api/autoruns/history/:run_id/case/:case_id/dialog`
|
||
- `GET /api/autoruns/annotations`
|
||
- `POST /api/autoruns/annotations`
|
||
- `PATCH /api/autoruns/annotations/:annotation_id`
|
||
- `GET /api/autoruns/manual-decision-schema`
|
||
- `GET /api/autoruns/post-analysis`
|
||
- `GET /api/autoruns/autogen/history`
|
||
- `GET /api/autoruns/autogen/personality-catalog`
|
||
- `POST /api/autoruns/autogen/generate`
|
||
- `POST /api/eval/run-async/start`
|
||
- `GET /api/eval/run-async/:job_id`
|
||
|
||
### Где лежат данные автопрогонов
|
||
|
||
- аннотации и ручная разметка:
|
||
- `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`
|
||
|
||
### Канонические техдоки
|
||
|
||
- `docs/TECH/assistant_canon.md`
|
||
- `docs/TECH/capabilities_registry.json`
|
||
- `docs/TECH/manual_case_decision_schema.json`
|
||
- `docs/TECH/ui_markup_system.md`
|
||
- `docs/TECH/history_colibration.md`
|