Improve online mining record conversion

This commit is contained in:
wuyang6
2026-05-14 17:19:23 +08:00
parent e10cb6909b
commit c6b3233769
7 changed files with 651 additions and 63 deletions
+27 -3
View File
@@ -16,11 +16,36 @@
3.`elk_search_cases.py` 拉候选。
4.`elk_join_request_logs.py` 补全 main/pre_processing 字段。
5. 展示小批候选给用户 review。
6. 用户确认后,用 `build_dataset_draft.py` 转 dataset draft
7. `product-data` 脚本 normalize、validate、export
6. 用户确认后,优先`build_online_records.py` 直接生成 canonical records 和流通表格
7. 只有需要人工查看 draft 或混合生成数据时,才用 `build_dataset_draft.py` 转 dataset draft,再接 product-data
这个分支不生成新 query。
### rid 快速转样本流程
适用表达:
- “把这个 rid 的数据拉下来,作为测试数据”
- “这几个 request_id 转成我们的元数据”
- “线上命中的这批样本直接导出”
流程:
1. 整理 `request_ids``dataset_label``target``complex`、日期。
2. 如果没有日期,先按近 48 小时查;查不到要问用户补日期。
3. 调用 `build_online_records.py`
4. 检查返回的 `summaries`
- `query`
- `target`
- `target_source`
- `prev_session_count`
- `main_domain`
- `planning_result`
5. 告诉用户输出路径:
- `output/records.jsonl`
- `output/records.csv`
- 用户要求训练/评测时,再导出 `training.jsonl` / `eval_planning.csv`
## 分支 B:基于线上问题补充生成数据
适用表达:
@@ -51,4 +76,3 @@ tts:
```
不要默认展示完整 prompt。prompt 很长时只展示命中片段。
@@ -28,7 +28,7 @@
- `session_id``device_id`、设备类型。
- `intention.intent_arbitrator_info.llm_agent_info.agentType`
## pre_processing`pre-processing-info*`
## pre_processing`pre-processing*`
适合拿前处理和规划模型判断过程。
@@ -65,6 +65,13 @@
main.request_id == pre_processing.requestId
```
精确查询时优先使用 keyword 字段:
```text
main.request_id.keyword
pre_processing.requestId.keyword
```
join 后优先使用:
- query:优先 `pre_processing` 的 query,缺失时用 `main.query`
@@ -72,3 +79,33 @@ join 后优先使用:
- tts:优先 `main.to_speak`,再 `main.text``display_text`
- label 参考:模型输出用 `pre_processing.planning_result`,线上最终结果用 `main.domain` / `main.func`
## 转 canonical record 的字段映射
`build_online_records.py` 固定执行以下映射,模型不要手写转换逻辑:
| canonical 字段 | 来源 |
| --- | --- |
| `source.type` | 固定 `online` |
| `source.request_id` | 主表 `request_id` 或前处理表 `requestId` |
| `source.timestamp` | 优先主表 `timestamp`,缺失时用前处理表 `timestamp` |
| `turn.query` | 优先前处理 `responseBoby.nodes.0.core.query.query`,缺失时用主表 `query` |
| `turn.timestamp` | 同 `source.timestamp` |
| `prev_session` | 主表同 `session_id` 且 timestamp 早于当前请求的最多 10 轮,按时间升序排列 |
| `prev_session[].query` | 主表历史轮 `query` |
| `prev_session[].tts` | 主表历史轮 `to_speak/text/display_text`,没有时保留空字符串 |
| `prev_session[].timestamp` | 主表历史轮 `timestamp` |
| `context` | 先置 `{}`,后续由专用工具补充 |
| `label.dataset_label` | 用户输入的批次标签 |
| `label.target` | 用户输入 `target`;否则依次用前处理 `code``planningOriginalResult`、主表 `llm_agent_info.agentType`、主表 `domain` 推断 |
| `dimensions.complex` | 用户输入,默认 false |
| `meta` | 保存 `session_id/device_id/device/main_domain/main_func/planning_result/planning_code/hit_rules/candidate_domains/target_source` |
## 按 rid 转数据的固定流程
当用户说“把这个 rid 的数据拉下来作为测试数据”时:
1. 如果用户没给日期,先用近 48 小时查;查不到就问用户日期,不要继续生成空数据。
2. 调用 `build_online_records.py`,传 `request_ids``dataset_label`、必要时传 `target/complex/date`
3. 检查返回的 `summaries[].target_source``prev_session_count`
4. 展示 query、target、target_source、prev_session_count 给用户确认。
5. 产物默认在当前会话 `output/records.jsonl``output/records.csv`