# 中控仲裁日志

> "中控"= central intent arbitrator，决定一条 query 路由到哪个 domain/agent（`controlCopilot` / `iotCopilot` / `productAgent` / 闲聊 / ...）。

## 在哪查

主 NLP 表 `arch-flat-nlp-log-f-*` 里的 **`intention.intent_arbitrator_info`** 嵌套对象。`main` preset 直接能读，**不需要新 preset**。

⚠️ **坑**：顶层 `intent_arbitrator_info`（不带 `intention.`）通常是 `null`——同名但不同位置，别取错。

> Kibana URL 形如 `akelk.pt.ai.srv/app/discover#/?...index:b0bd62cb-...&query:(...request_id:...)`，这个 Kibana 前端虽然走 akelk 域名，底层 ES 就是 akaiservice 主表。

## 关键字段

路径前缀 `intention.intent_arbitrator_info`：

**仲裁结果**
- `predict_result_domain` / `l2_domain` / `l2_func` / `before_final_rule_domain` — 各阶段判出的 domain
- `single_result_domain` / `multi_result_domain` — 单轮 / 多轮结果
- `dialog_status` — 对话状态（`FINISH` / ...）

**仲裁打分**
- `score_domains` (dict) — 各候选 domain 的 `score` + `func`，仲裁打分原始数据
  - 例：`controlCopilot:1.0`, `soundboxControl:0.97`, `default:0.05`

**仲裁等级**
- `arbitrator_level` — 仲裁等级（如 `Agent_LLM` 表示走 LLM agent 路径）
- `is_llm_allowed` / `is_new_agent_logic`

**LLM agent 命中**
- `llm_agent_info`：
  - `isEffective` — 是否生效
  - `agentType` — 类型（如 `车载控制`）
  - `agentName` — 名称（如 `controlCopilot|iotCopilot|productAgent`）
  - `agentSubType`
- `hit_rules` — 命中的召回规则（如 `[agent_llm_recall_controlCopilot]`）

**LLM 仲裁子流程**
- `llm_strategy_info`：`llm_domain` / `llm_intent` / `llm_strategy_stage` / `before_llm_*`

**confidence**
- `intent_confidence_information`

## 命令模板

```bash
# 整个仲裁对象
python elk_query.py <rid> --json-path intention.intent_arbitrator_info

# 命中的 agent + 召回规则 + 仲裁等级（速览）
python elk_query.py <rid> \
  --fields request_id,query,domain,intention.intent_arbitrator_info.llm_agent_info,intention.intent_arbitrator_info.hit_rules,intention.intent_arbitrator_info.arbitrator_level

# 各候选 domain 的仲裁打分
python elk_query.py <rid> --json-path intention.intent_arbitrator_info.score_domains
```

## 字段 schema

完整 schema 见 [`../INDEX_CATALOG.md`](../INDEX_CATALOG.md) 中 `arch-flat-nlp-log-f-*` 一节。
