Fix product data eval export format

This commit is contained in:
wuyang6
2026-05-11 15:27:11 +08:00
parent be731caed7
commit f22de8a40b
15 changed files with 414 additions and 71 deletions
+25 -9
View File
@@ -97,6 +97,7 @@ source_refs:
- `dataset_label`:数据集或专题名称。
- `target` / `target_definitions`:最终监督标签。单标签任务用 `target`,多标签边界任务必须用 `target_definitions` 列出每个标签和判定规则。
- `complex` 判定规则:复杂度是独立维度,必须和标签边界一起确认;如果用户没有说明复杂/不复杂,默认按“原子化单步操作=false,需要规划、分析、组合或多步骤推理=true”给出建议,并在 review 中让用户确认。
- 生成数量:总条数,以及单轮/多轮数量或比例。
- 覆盖范围:需要覆盖哪些 query 类型、意图边界或错误类型。
- 负例/排除项:哪些表达不要生成,或哪些边界容易误判。
@@ -114,12 +115,15 @@ source_refs:
如果用户在原始需求里已经写出 `Agent(tag="xxx")`、function 调用或其他完整标签表达,`target` 必须原样保留这个完整表达,不要简化成纯标签名。例如用户说 `Agent(tag="餐饮服务")`,则 `target_definitions[*].target` 和后续 draft 的 `target:` 都必须写 `Agent(tag="餐饮服务")`,不要写成 `餐饮服务`
如果用户给的是训练格式里的两行输出,例如 `complex=false\nAgent(tag="地图导航")`,需要拆开处理:`complex=false` 进入复杂度维度,`Agent(tag="地图导航")` 才是 `target`。不要把 `complex=...` 作为 target 的一部分写入 generation plan。
review 展示必须简短清晰,不要重复解释工具和流程。每次 review 最多展示 6 行,格式优先如下:
```text
我先把生成目标整理好了,先确认边界,暂时不生成数据。
- 数据集:xxx
- 标签:A -> Agent(tag="A")B -> Agent(tag="B")
- 复杂度:默认 false;复杂任务按规则单独标 true
- 边界:一句话说明核心判定规则
- 覆盖:一句话说明主要 case 类型
- 内部:goal_id `...`revision `...`
@@ -165,7 +169,7 @@ review 展示必须简短清晰,不要重复解释工具和流程。每次 rev
9. 用户提出修改意见时,调用 `data_agent_update_generation_plan`,再展示计划。
10. 用户明确确认当前计划版本后,调用 `data_agent_confirm_generation_plan`
11. 生成 dataset draft text v1。
12. 调用 `data_agent_normalize_dataset_draft`,必须传入 `confirmed_plan_id`
12. 调用 `data_agent_normalize_dataset_draft`,必须传入 `confirmed_plan_id`draft 中每条 case 都必须有 `complex: true/false`
13. 调用 `data_agent_validate_dataset_records`
14. 如果用户要求落盘 canonical records,调用 `data_agent_export_dataset_records``output_path` 固定传 `output/records.jsonl`,默认导出紧凑 JSONL,并同时生成同目录 `records.csv` 表格,不要用 `write_file` 手写 JSON 或 CSV。
15. 如果用户已经明确要训练数据,调用 `data_agent_export_training_jsonl`,优先传 `records_path`,输出固定为 `output/training.jsonl`
@@ -176,6 +180,7 @@ review 展示必须简短清晰,不要重复解释工具和流程。每次 rev
- 单次 `data_agent_normalize_dataset_draft` 最多处理 8 条 case;计划数量更多时,分批生成、分批 normalize,再汇总校验和导出。
- dataset draft 中的 Agent target 推荐写成单引号形式,例如 `target: Agent(tag='地图导航')`。工具会规范化为 `Agent(tag="地图导航")`,这样可以降低 tool call JSON 里双引号转义失败的概率。
- `complex:` 独立写一行,不要写进 `target:`;工具会在导出训练数据和流转表格时自动组合成 `complex=false\nAgent(...)`
- 如果 draft 已经保存在文件中,优先传 `draft_path`,不要再把大段 `draft_text` 作为工具参数传入。
- 校验和导出 records 时,如果 records 已经保存在 JSON/JSONL 文件中,优先传 `records_path`
@@ -190,6 +195,7 @@ review 展示必须简短清晰,不要重复解释工具和流程。每次 rev
### case: case名称
用户: 本轮 query
complex: false
target: Agent(tag="xxx")
notes: 可选,说明覆盖的问题或边界
@@ -197,6 +203,7 @@ notes: 可选,说明覆盖的问题或边界
用户: 前一轮 query
小爱: 前一轮 tts
用户: 本轮 query
complex: false
target: Agent(tag="xxx")
notes: 可选,说明覆盖的问题或边界
```
@@ -207,11 +214,12 @@ notes: 可选,说明覆盖的问题或边界
- `用户:` 表示用户 query。
- `小爱:` 表示小爱回复 tts。
- 最后一个 `用户:` 是本轮 query。
- `complex:` 是复杂度维度,必须独立填写 `true``false`;无法确定时先问用户。
- `target:` 是本轮 query 对应的监督标签,必须存在。
- 为避免工具参数 JSON 转义失败,dataset draft 里 Agent 标签优先写 `target: Agent(tag='xxx')`;转换工具会统一规范为 `Agent(tag="xxx")`
- 单轮数据只需要写一行 `用户:`,然后写 `target:`
- 单轮数据只需要写一行 `用户:`,然后写 `complex:``target:`
- 多轮数据需要按照时间顺序写多组 `用户:` / `小爱:`
- 多轮数据的最后一轮只写 `用户:``target:`,不要写最后一轮 `小爱:`,因为本轮 query 不包含 tts。
- 多轮数据的最后一轮只写 `用户:``complex:``target:`,不要写最后一轮 `小爱:`,因为本轮 query 不包含 tts。
- 如果 `target` 无法确定,不要编造,必须向用户确认。
- 不要手写 `record_id``request_id``timestamp``context`
- 线上挖掘数据如有真实 `request_id``timestamp`,可以附加在 case 中;没有则不写。
@@ -226,7 +234,8 @@ canonical records 落盘必须使用 `data_agent_export_dataset_records`,默
- 训练数据:调用 `data_agent_export_training_jsonl`,输出 `training.jsonl`,每行包含 `system``instruction``output`
- 评测数据:调用 `data_agent_export_planning_eval_csv`,输出 `eval_planning.csv`,字段为 `request_id,newPrompt,query,类别真实标签,code标签,complex`
- 两个派生格式默认复用相同 prompt 构造逻辑:`[知识注入]``[系统状态]``[对话历史]``[当前query]``[function]`
- 训练 `output` 和流转表格 `function` 列都会自动组合为两行:第一行 `complex=true/false`,第二行原监督标签;评测 `complex` 列直接来自 canonical record 的 `dimensions.complex`,按评测表习惯输出 `TRUE/FALSE`
- 训练 `instruction` 和评测 `newPrompt` 复用相同 prompt 主体:`[知识注入]``[系统状态]``[对话历史]``[当前query]``[function]`;评测 `newPrompt` 还会额外包上 `<|im_start|>system``<|im_start|>user``<|im_start|>assistant` chat template。
- 对话历史默认最多取 5 轮,且相邻轮间隔不超过 5 分钟;`context` 默认注入 `location``rag` 两个字段。
当前 canonical record v1 工作格式:
@@ -256,6 +265,9 @@ canonical records 落盘必须使用 `data_agent_export_dataset_records`,默
"target": "Agent(tag=\"xxx\")",
"target_type": "agent"
},
"dimensions": {
"complex": false
},
"meta": {
"case_name": "case名称",
"notes": ""
@@ -357,7 +369,7 @@ skills/product-data/scripts/normalize_dataset_draft.py
```json
{
"draft_text": "# dataset_label: 地图餐饮边界\n\n### case: 找附近美食\n用户: 附近有什么好吃的\ntarget: Agent(tag='餐饮服务')",
"draft_text": "# dataset_label: 地图餐饮边界\n\n### case: 找附近美食\n用户: 附近有什么好吃的\ncomplex: false\ntarget: Agent(tag='餐饮服务')",
"batch_id": "aabbccdd",
"source_type": "generated"
}
@@ -369,7 +381,7 @@ skills/product-data/scripts/normalize_dataset_draft.py
{"draft_path": "output/dataset_draft.txt", "batch_id": "aabbccdd", "source_type": "generated"}
```
用途:把 dataset draft text v1 转成 canonical records。
用途:把 dataset draft text v1 转成 canonical records。每条 case 推荐包含 `complex: true/false`;旧草稿缺失时会按 `false` 兼容。
### `product_data_validate_dataset_records`
@@ -419,6 +431,8 @@ skills/product-data/scripts/export_dataset_records.py
request_id,timestamp,query,prev_session,context,label,是否迁移Function,function
```
其中 `function` 列会自动组合为 `complex=true/false` 和原监督标签两行。
### `product_data_export_dataset_table`
脚本:
@@ -456,6 +470,7 @@ skills/product-data/scripts/export_training_jsonl.py
```
用途:把 canonical records 转成训练 JSONL,默认文件名 `training.jsonl`
输出的 `output` 字段会自动组合 `complex=true/false``label.target` 两行。
### `product_data_export_planning_eval_csv`
@@ -475,6 +490,7 @@ skills/product-data/scripts/export_planning_eval_csv.py
```
用途:把 canonical records 转成含 `newPrompt` 的评测 CSV,默认文件名 `eval_planning.csv`
`newPrompt` 会使用评测侧标准 chat template`complex` 列来自 canonical records 的 `dimensions.complex`,输出为 `TRUE/FALSE`,不要用固定默认值覆盖。
## 当前可用工具
@@ -494,11 +510,11 @@ skills/product-data/scripts/export_planning_eval_csv.py
- `data_agent_show_generation_plan`:用户要求查看当前计划,或继续上下文时需要恢复计划详情时使用。
- `data_agent_update_generation_plan`:用户对计划提出修改意见后使用,更新计划并重新展示。
- `data_agent_confirm_generation_plan`:用户明确确认当前计划版本后使用,获取 `confirmed_plan_id`
- `data_agent_normalize_dataset_draft`:用户确认计划后,把 dataset draft text v1 转成 canonical records;必须传入 `confirmed_plan_id`;支持 `draft_text``draft_path`,大草稿优先 `draft_path`
- `data_agent_normalize_dataset_draft`:用户确认计划后,把 dataset draft text v1 转成 canonical records;必须传入 `confirmed_plan_id`;支持 `draft_text``draft_path`,大草稿优先 `draft_path`;每条 case 要写 `complex: true/false`
- `data_agent_validate_dataset_records`:对 canonical records 做结构、标签、时间戳和多轮上下文校验;支持 `records``records_path`
- `data_agent_export_dataset_records`:校验 canonical records 并落盘;支持 `records``records_path`;默认写紧凑 JSONL,一行一条,固定传 `output/records.jsonl`,并同时生成 `output/records.csv` 表格,不要再用 `write_file` 手写 records 或表格文件。
- `data_agent_export_training_jsonl`:把 canonical records 转成训练 JSONL;支持 `records``records_path`;默认写 `output/training.jsonl`
- `data_agent_export_planning_eval_csv`:把 canonical records 转成评测 CSV;支持 `records``records_path`;默认写 `output/eval_planning.csv`
- `data_agent_export_training_jsonl`:把 canonical records 转成训练 JSONL;支持 `records``records_path`;默认写 `output/training.jsonl``output` 自动包含 `complex`
- `data_agent_export_planning_eval_csv`:把 canonical records 转成评测 CSV;支持 `records``records_path`;默认写 `output/eval_planning.csv``complex` 列从元数据生成
## 约束