205 lines
6.0 KiB
Markdown
205 lines
6.0 KiB
Markdown
---
|
||
name: online-mining-v2
|
||
description: 使用 ELK 作为默认线上数据源挖掘线上 case,并复用 product-data 的 canonical record 与导出流程。
|
||
when_to_use: 当用户希望从线上日志中按 query/domain/model prompt/model output/候选 domain 等条件挖掘样本、review 命中质量、形成专项评测集或训练数据时使用。
|
||
aliases: online-mining-elk, elk-mining, 线上挖掘v2
|
||
allowed_tools: read_file, write_file, grep_search, glob_search, ask_user_question, python_exec, python_package
|
||
---
|
||
|
||
# Online Mining v2
|
||
|
||
使用这个 skill 处理“线上日志需求 -> ELK 挖掘策略 -> 候选样本 review -> product-data 标准数据”的工作流。
|
||
|
||
本 skill 不新增平台注册工具。能力都在 `skills/online-mining-v2/scripts/` 下,通过 `python_exec` 的 `script_path` 模式执行;如果迁移到其他 Agent,也可以直接运行这些脚本。
|
||
|
||
## 能力组织
|
||
|
||
```text
|
||
skills/online-mining-v2/
|
||
SKILL.md
|
||
README.md
|
||
knowledge/
|
||
数据源字段说明.md
|
||
工作流.md
|
||
scripts/
|
||
online_mining_common.py
|
||
elk_profile_index.py
|
||
elk_search_cases.py
|
||
elk_fetch_by_request_ids.py
|
||
elk_join_request_logs.py
|
||
build_dataset_draft.py
|
||
```
|
||
|
||
默认数据源:
|
||
|
||
- `pre-processing-info*`:前处理日志,适合拿模型 prompt、模型输出、候选 domain、`excellent_domains_result`。
|
||
- `arch-flat-nlp-log-f-*`:主 NLP 日志,适合拿最终 `query`、`domain`、`func`、`session_id`、`device_id`、`device`、`tts/text/to_speak`。
|
||
|
||
后处理全部复用 `product-data`:
|
||
|
||
- `skills/product-data/scripts/normalize_dataset_draft.py`
|
||
- `skills/product-data/scripts/validate_dataset_records.py`
|
||
- `skills/product-data/scripts/export_dataset_records.py`
|
||
- `skills/product-data/scripts/export_training_jsonl.py`
|
||
- `skills/product-data/scripts/export_planning_eval_csv.py`
|
||
|
||
## 依赖
|
||
|
||
如果 `python_exec` 返回缺少 `elasticsearch` 或 `urllib3`,先安装:
|
||
|
||
```json
|
||
{
|
||
"action": "install",
|
||
"packages": ["elasticsearch<8", "urllib3"],
|
||
"timeout_seconds": 120
|
||
}
|
||
```
|
||
|
||
不要用 `bash` 手写临时脚本查询 ELK;优先使用本 skill 的 portable scripts。
|
||
|
||
## 关键工作流
|
||
|
||
### 1. 先理解需求,不直接挖
|
||
|
||
从用户输入整理挖掘目标:
|
||
|
||
- 目标问题:要评估准确率、构建评测集,还是补充训练数据。
|
||
- 目标标签:如 `Agent(tag="地图导航")`、`Summarize()`。
|
||
- 复杂度:`complex=true/false` 是否明确。
|
||
- 线上筛选特征:query 关键词/正则、domain、func、候选 domain、模型输出、prompt 特征、设备、日期。
|
||
- review 策略:先抽多少条给用户看,通常先 20 到 100 条。
|
||
|
||
缺少目标标签或关键筛选字段时,先问用户,不要直接导出数据。
|
||
|
||
### 2. 探索表和字段
|
||
|
||
需要确认表字段时,执行:
|
||
|
||
```json
|
||
{
|
||
"script_path": "skills/online-mining-v2/scripts/elk_profile_index.py",
|
||
"stdin": {
|
||
"sources": ["main", "pre_processing"],
|
||
"date": "20260512",
|
||
"sample_size": 20
|
||
},
|
||
"timeout_seconds": 120,
|
||
"max_output_chars": 20000
|
||
}
|
||
```
|
||
|
||
### 3. 搜索候选
|
||
|
||
按策略搜索:
|
||
|
||
```json
|
||
{
|
||
"script_path": "skills/online-mining-v2/scripts/elk_search_cases.py",
|
||
"stdin": {
|
||
"source": "pre_processing",
|
||
"date": "20260512",
|
||
"size": 50,
|
||
"scan_size": 500,
|
||
"filters": {
|
||
"query_contains": ["总结一下"],
|
||
"planning_result_contains": ["Summarize"]
|
||
}
|
||
},
|
||
"timeout_seconds": 180,
|
||
"max_output_chars": 30000
|
||
}
|
||
```
|
||
|
||
`source=main` 适合按最终 `domain` / `func` / `query` 搜索。`source=pre_processing` 适合按 `planningOriginalResult`、`promptModel`、`excellent_domains_result`、候选 domain 搜索。
|
||
|
||
### 4. 补全双表信息
|
||
|
||
候选里只有一张表信息时,用 request id 补全:
|
||
|
||
```json
|
||
{
|
||
"script_path": "skills/online-mining-v2/scripts/elk_join_request_logs.py",
|
||
"stdin": {
|
||
"request_ids": ["xxx", "yyy"],
|
||
"date": "20260512"
|
||
},
|
||
"timeout_seconds": 180,
|
||
"max_output_chars": 30000
|
||
}
|
||
```
|
||
|
||
### 5. 给用户 review
|
||
|
||
展示候选样本时只展示必要字段:
|
||
|
||
- request_id
|
||
- query
|
||
- main.domain / main.func
|
||
- pre.planning_result
|
||
- pre.hit_rules
|
||
- pre.candidate_domains
|
||
- session_id / device_id
|
||
- tts/text
|
||
|
||
不要一次贴大量 prompt。需要看 prompt 时只展示截断摘要,或保存到会话 output 目录。
|
||
|
||
### 6. 用户确认后转成 product-data draft
|
||
|
||
线上候选直接作为样本时,先生成 dataset draft text:
|
||
|
||
```json
|
||
{
|
||
"script_path": "skills/online-mining-v2/scripts/build_dataset_draft.py",
|
||
"stdin": {
|
||
"dataset_label": "总结类线上专项",
|
||
"target": "Summarize()",
|
||
"complex": false,
|
||
"cases": [/* elk_search_cases 或 join 输出里的 cases */],
|
||
"output_path": "scratchpad/mined_dataset_draft.txt"
|
||
},
|
||
"timeout_seconds": 120,
|
||
"max_output_chars": 20000
|
||
}
|
||
```
|
||
|
||
然后必须调用 product-data:
|
||
|
||
```json
|
||
{
|
||
"script_path": "skills/product-data/scripts/normalize_dataset_draft.py",
|
||
"stdin": {
|
||
"draft_path": "scratchpad/mined_dataset_draft.txt",
|
||
"source_type": "online",
|
||
"records_output_path": "scratchpad/normalized_records.jsonl",
|
||
"append": false,
|
||
"return_records": false
|
||
},
|
||
"timeout_seconds": 120,
|
||
"max_output_chars": 20000
|
||
}
|
||
```
|
||
|
||
再执行校验和导出:
|
||
|
||
- `validate_dataset_records.py`
|
||
- `export_dataset_records.py`,输出固定 `output/records.jsonl`
|
||
- 用户需要训练或评测时,再导出 `training.jsonl` 或 `eval_planning.csv`
|
||
|
||
## 分支约束
|
||
|
||
- 用户要“线上数据直接做样本/评测集”:只做挖掘、review、转换,不生成新 query。
|
||
- 用户明确要“基于线上问题补数据/扩写/构造”:先完成线上问题 review,再切到 `product-data` 的 generation plan 流程。
|
||
- 不要把挖掘策略第一次命中的样本直接当最终数据;至少展示一小批给用户 review。
|
||
|
||
## 输出目录约束
|
||
|
||
所有产物写当前会话目录:
|
||
|
||
- 中间候选:`scratchpad/mined_candidates.jsonl`
|
||
- joined 详情:`scratchpad/joined_cases.jsonl`
|
||
- draft:`scratchpad/mined_dataset_draft.txt`
|
||
- canonical records:通过 product-data 导出到 `output/records.jsonl`
|
||
|
||
不要写项目根目录、`tasks/`、`src/` 或 `skills/`。
|
||
|