diff --git a/skills/online-mining/SKILL.md b/skills/online-mining/SKILL.md index 4a0cdbe..0f9d893 100644 --- a/skills/online-mining/SKILL.md +++ b/skills/online-mining/SKILL.md @@ -8,7 +8,18 @@ allowed_tools: read_file, write_file, edit_file, grep_search, glob_search, ask_u 使用这个 skill 处理“badcase 或标签定义 -> 挖掘策略 -> 候选召回 -> 抽样 review -> 策略迭代 -> mined dataset”的工作流。 -所有线上挖掘产物必须放在当前用户当前会话的 output 目录下。不要把 records 或 review 结果写到项目根目录的 `output/`、`tasks/` 或源码目录。canonical records 的稳定输出文件名固定为 `output/records.jsonl`,不要按数据集名创建子目录,不要自定义时间戳、中文专题名或随机文件名。工具会把相对 `output_path` 自动路由到会话 output 目录,并把 records 路径归一到当前会话 `output/records.jsonl`;展示给用户时以工具返回的实际路径为准。 +## 输出目录约束 + +所有线上挖掘产物必须放在当前用户当前会话的 output 目录下。不要把 records、候选样本、策略说明、review 报告或中间结果写到项目根目录的 `output/`、`tasks/`、`src/`、`skills/` 或其他源码目录。 + +落盘规则: + +- canonical records 必须用 `data_agent_export_dataset_records` 导出,`output_path` 固定传 `output/records.jsonl`。工具会把它路由到当前会话 `output/records.jsonl`,展示给用户时以工具返回的实际路径为准。 +- 不要用 `write_file` 手写 records、JSONL 或最终样本文件。 +- 如果系统提示词提供了“会话 scratchpad 目录”,当前会话 output 目录就是该 scratchpad 的同级 `output` 目录。例如 `...//scratchpad` 对应 `...//output`。 +- 如果需要保存策略草案、候选样本、review 报告等非 records 产物,只有在已经拿到或能从 scratchpad 推导出当前会话 output 目录的实际路径时,才可以用 `write_file` 写入该目录下的稳定文件名;否则只在对话中展示,不要猜测路径。 +- 不要按数据集名创建子目录,不要自定义时间戳、中文专题名、随机文件名或临时脚本名。 +- 用户显式指定外部输出目录时,先复述风险并确认;未确认前仍使用当前会话 output 目录。 ## 两条分支 @@ -25,7 +36,7 @@ allowed_tools: read_file, write_file, edit_file, grep_search, glob_search, ask_u 3. 用 `data_agent_sample_router_candidates` 抽样展示给用户 review。 4. 根据用户 review 意见形成 include/exclude/uncertain 决策和目标标签。 5. 用 `data_agent_convert_router_candidates_to_records` 把线上候选直接转换为 canonical records。 -6. 如果用户要求落盘,用 `data_agent_export_dataset_records` 导出紧凑 JSONL,`output_path` 固定传 `output/records.jsonl`。 +6. 如果用户要求落盘,用 `data_agent_export_dataset_records` 导出紧凑 JSONL,`output_path` 固定传 `output/records.jsonl`。不要用 `write_file` 手写最终 records。 这个分支不生成新 query,不调用数据生成计划工具,不调用 dataset draft 归一化工具。 @@ -80,8 +91,8 @@ allowed_tools: read_file, write_file, edit_file, grep_search, glob_search, ask_u 当前先使用已有工具完成本地分析和策略起草: - `read_file` -- `write_file` -- `edit_file` +- `write_file`:只用于用户明确要求保存非 records 文档,并且路径已经明确位于当前会话 output 目录时;不要写项目根目录、`tasks/` 或源码目录。 +- `edit_file`:只用于修改用户明确指定的已有文档;不要用它移动或重写最终数据产物。 - `grep_search` - `glob_search` - `ask_user_question` @@ -89,7 +100,7 @@ allowed_tools: read_file, write_file, edit_file, grep_search, glob_search, ask_u - `data_agent_search_router_sessions`:按日期、设备、domain、intent、func、query 关键词/正则、轮次数等条件召回线上 session 候选;输出命中 turn、前文 turn、req_id 和 action_json 解析结果。 - `data_agent_sample_router_candidates`:对召回候选做稳定抽样,并输出 review 需要的基础统计。 - `data_agent_convert_router_candidates_to_records`:把 review 后的线上候选直接转换为 canonical records;用于“线上数据作为样本”的分支。 -- `data_agent_export_dataset_records`:后续把 review 后的线上候选转换为 canonical records 后落盘;默认紧凑 JSONL,固定传 `output/records.jsonl`。 +- `data_agent_export_dataset_records`:后续把 review 后的线上候选转换为 canonical records 后落盘;默认紧凑 JSONL,固定传 `output/records.jsonl`,不要再用 `write_file` 手写 records 文件。 TODO:后续规划中的专用工具: @@ -106,16 +117,17 @@ TODO:后续规划中的专用工具: ## 推荐产物 ```text -tasks/{task_id}/context/badcases.* -tasks/{task_id}/artifacts/badcase_analysis.md -tasks/{task_id}/artifacts/mining_strategy.md -tasks/{task_id}/artifacts/candidate_sample.jsonl -tasks/{task_id}/artifacts/review_report.md -tasks/{task_id}/artifacts/mined_candidates.jsonl -tasks/{task_id}/memory/open_questions.md -tasks/{task_id}/memory/failed_attempts.md +output/source_context.md +output/badcase_analysis.md +output/mining_strategy.md +output/candidate_sample.jsonl +output/review_report.md +output/mined_candidates.jsonl +output/records.jsonl ``` +上面的 `output/...` 是逻辑文件名,实际路径必须是当前会话 output 目录下的路径。对 canonical records,只能通过 `data_agent_export_dataset_records` 写 `output/records.jsonl`,由工具返回实际落盘路径。 + ## 约束 - 除非批准的工具输出已经脱敏,否则不要导出敏感线上原始字段。 @@ -123,3 +135,4 @@ tasks/{task_id}/memory/failed_attempts.md - 始终让筛选条件和抽样决策可 review。 - 只有用户明确要求生成、扩写或构造新数据时,才进入数据生成分支。 - 如果用户要求把筛选出的线上候选变成样本,必须先使用 `data_agent_convert_router_candidates_to_records`,不要改走 generation goal/plan。 +- 任何落盘动作都必须遵守“输出目录约束”;路径不明确时,宁可只展示摘要并询问用户,也不要写到项目目录。