Files
zk-data-agent/skills/online-mining-v2/SKILL.md
T
2026-05-14 17:42:08 +08:00

257 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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
build_online_records.py
```
默认数据源:
- `pre-processing*`:前处理日志,适合拿模型 prompt、模型输出、候选 domain、`excellent_domains_result`
- `arch-flat-nlp-log-f-*`:主 NLP 日志,适合拿最终 `query``domain``func``request_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
}
```
时间筛选支持三种写法:
- 单日:`"date": "20260512"`
- 日期范围:`"date_from": "20260508", "date_to": "20260514"`
- 最近 N 天:`"lookback_days": 7`
用户说“一周内”“最近 7 天”时,优先传 `lookback_days: 7`;用户给明确起止日期时,传 `date_from/date_to`
### 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. 单条 rid 或已确认候选直接转元数据
如果用户给了明确 rid,或已经确认一批线上候选要直接作为样本,优先使用
`build_online_records.py`。这个脚本会完成:
- 主表 `arch-flat-nlp-log-f-*` 和前处理表 `pre-processing*` 双表拉取。
- 从前处理 `promptModel``[对话历史]` 抽取模型真实输入 session,作为 `prev_session`
- 优先使用用户指定 `target`;没有指定时,按 `pre_processing.code` -> `planningOriginalResult` -> 主表 `llm_agent_info.agentType` -> 主表 `domain` 推断标签。
- 生成 product-data canonical records。
- 默认导出 `output/records.jsonl``output/records.csv`,可选导出 `training.jsonl``eval_planning.csv`
示例:
```json
{
"script_path": "skills/online-mining-v2/scripts/build_online_records.py",
"stdin": {
"request_ids": ["6656271eedfe4b478ac716448a3ad310"],
"lookback_days": 7,
"dataset_label": "线上挖掘样本",
"target": "Agent(tag=\"地图导航\")",
"complex": false,
"output_dir": "output",
"export_records": true,
"export_training": false,
"export_eval": false
},
"timeout_seconds": 300,
"max_output_chars": 30000
}
```
注意:
- 老 rid 超出近 48 小时时必须让用户补日期,传 `date=YYYYMMDD`
- 如果用户说“一周内/最近 7 天”,可以直接传 `lookback_days: 7`,不必逐日循环。
- 如果用户没有指定 `target`,脚本可以从线上模型输出推断,但最终仍建议展示 `target_source` 给用户确认。
- 如果脚本返回 `case has no query`,说明该 rid 在当前日期窗口没有命中主表/前处理表,不要继续伪造元数据。
- 不要用主表 `session_id` 去拼训练/评测 session;它不是 planning 模型输入 session 的同义概念。
### 6. 给用户 review
展示候选样本时只展示必要字段:
- request_id
- query
- target / target_source(如果已经转换)
- main.domain / main.func
- pre.planning_result
- pre.hit_rules
- pre.candidate_domains
- session_id / device_id
- tts/text
不要一次贴大量 prompt。需要看 prompt 时只展示截断摘要,或保存到会话 output 目录。
### 7. 用户确认后转成 product-data draft
一般情况下不要再手动接 normalize/export。只有当用户明确要看 draft text,
或需要和 `product-data` 的人工生成流程混合时,才先生成 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
}
```
更推荐直接使用第 5 步的 `build_online_records.py`,减少模型手动接线出错。
如果使用 draft 分支,再执行校验和导出:
- `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/`