# online-mining-v2

`online-mining-v2` 是线上数据挖掘 skill。它把 `elk-fetch` 作为默认线上数据源，把 `product-data` 作为挖掘结果的标准数据后处理链路。

## 设计目标

- 线上数据源默认走 ELK，而不是本地 parquet。
- 挖掘能力放在 skill 目录内，不注册新的平台工具。
- 所有脚本支持 JSON stdin/stdout，方便迁移到其他 Agent。
- 挖出的线上 case 不直接手写最终格式，而是转成 `product-data` 的 dataset draft，再进入 canonical record、校验和导出。

## 主要脚本

| 脚本 | 作用 |
| --- | --- |
| `scripts/elk_profile_index.py` | 采样索引 schema 和关键字段，帮助 Agent 判断字段可用性。 |
| `scripts/elk_search_cases.py` | 按 query/domain/prompt/model output/candidate domain 等条件搜索候选 case。 |
| `scripts/elk_fetch_by_request_ids.py` | 批量按 request id 拉取 main/pre_processing 原始摘要。 |
| `scripts/elk_join_request_logs.py` | 把 `arch-flat-nlp-log-f-*` 和 `pre-processing*` 按 request id 合并。 |
| `scripts/build_dataset_draft.py` | 把 review 后的线上 case 转成 product-data dataset draft text。 |
| `scripts/build_online_records.py` | 把 rid/候选 case 直接转成 canonical records，并可导出 records.csv、training.jsonl、eval_planning.csv。 |

## 数据源

- `main`：`arch-flat-nlp-log-f-*`
- `pre_processing`：`pre-processing*`

字段说明见 `knowledge/数据源字段说明.md`。

## 后处理

优先使用 `scripts/build_online_records.py` 一步完成线上候选到标准数据：

```json
{
  "request_ids": ["<rid>"],
  "lookback_days": 7,
  "dataset_label": "线上挖掘样本",
  "target": "Agent(tag=\"xxx\")",
  "complex": false,
  "output_dir": "output",
  "export_records": true,
  "export_training": false,
  "export_eval": false
}
```

它会补齐：

- `request_id`：主表 `request_id` / 前处理表 `requestId`
- `timestamp`：优先主表 `timestamp`
- `query`：优先前处理 query，缺失时用主表 query
- `prev_session`：从前处理 `promptModel` 的 `[对话历史]` 抽取，这是 planning 模型真实看到的 session
- `target`：优先用户输入，否则用前处理 `code/planningOriginalResult`，再用主表仲裁信息兜底
- `complex`：优先用户输入，默认 false

时间筛选支持：

- `date`: 单日，格式 `YYYYMMDD` 或 `YYYY-MM-DD`
- `date_from` + `date_to`: 起止日期，包含两端日期
- `lookback_days`: 最近 N 天，例如用户说“一周内”就传 `7`

如果需要拆开调试，后处理仍可复用 `skills/product-data/scripts/`：

1. `normalize_dataset_draft.py`
2. `validate_dataset_records.py`
3. `export_dataset_records.py`
4. 可选 `export_training_jsonl.py`
5. 可选 `export_planning_eval_csv.py`
