--- name: model-labeling description: 对已有数据集调用线上模型 generate 接口批量打标,支持 canonical records、训练 jsonl、评测 CSV 和同事流转表格的统一归一化。 when_to_use: 当用户已有一份数据,或刚通过 product-data / online-mining-v2 生成数据后,希望指定线上模型 URL 批量请求模型、得到预测标签、对比真实标签或产出标注结果时使用。 aliases: batch-labeling, model-annotation, online-model-labeling, 模型打标 allowed_tools: read_file, write_file, grep_search, glob_search, ask_user_question, python_exec --- # Model Labeling 使用这个 skill 处理“已有数据 -> 统一样本格式 -> 调线上模型接口批量打标 -> 输出预测结果”的流程。 线上模型 URL 经常变化,**不要猜 URL**。如果用户没有明确提供 `http://.../generate` 或等价接口地址,必须先询问用户。 ## 能力组织 ```text skills/model-labeling/ SKILL.md knowledge/ input_formats.md scripts/ batch_label_model.py ``` `batch_label_model.py` 是 portable script,只依赖 Python 标准库。它会: - 识别 canonical records JSON/JSONL。 - 识别 product-data 导出的训练 JSONL。 - 识别 eval/planning CSV,优先使用 `newPrompt`。 - 识别同事流转 CSV,使用 `query`、`prev_session`、`context`、`function`。 - 对未知格式返回结构化错误,要求用户提供字段映射,不要擅自转换。 - 调用用户提供的模型接口,默认请求体为: ```json { "inputs": "", "parameters": { "max_new_tokens": 64 } } ``` ## 交互规则 开始执行前必须确认: 1. **输入数据路径**:用户给出的文件路径,或上一轮产物路径。 2. **模型接口 URL**:必须是用户明确提供的 URL;没有就问。 3. **输入格式是否可识别**:canonical records、训练 jsonl、eval CSV、同事流转表格可以直接处理。 4. **未知格式的字段映射**:如果脚本提示 unknown format,需要问用户: - 哪列是 query? - 哪列是 prompt? - 哪列是真实标签? - 是否有历史上下文、context? 5. **输出路径**:默认写到当前 session 的 `output/model_predictions.jsonl`。 不要在没有 URL 的情况下开始打标。不要把临时结果写到项目根目录。所有输出优先放当前 session 的 `output/`。 ## 推荐流程 ### 1. 找到输入文件 如果用户说“刚才生成的数据”“这份数据”,先用会话文件面板或 `glob_search` / `read_file` 找到实际路径。常见路径: ```text output/records.jsonl output/training.jsonl output/eval_planning.csv output/records.csv ``` ### 2. 确认模型 URL 如果用户没有提供 URL,直接问: ```text 请提供这次要调用的线上模型 generate 接口 URL,例如 http://.../generate。 ``` 如果 `ask_user_question` 可用,优先使用;不可用就普通回复提问并停止。 ### 3. 先 dry run 识别格式 先执行一次 `dry_run=true`,只识别格式和样例,不请求模型: ```json { "script_path": "skills/model-labeling/scripts/batch_label_model.py", "stdin": { "input_path": "output/records.jsonl", "model_url": "http://example/generate", "dry_run": true, "max_records": 3 }, "timeout_seconds": 60, "max_output_chars": 20000 } ``` 如果返回 `ok=false` 且 `needs_mapping=true`,必须把错误和已识别字段展示给用户,让用户说明映射。 ### 4. 批量请求模型 确认格式后执行: ```json { "script_path": "skills/model-labeling/scripts/batch_label_model.py", "stdin": { "input_path": "output/records.jsonl", "model_url": "http://example/generate", "output_path": "output/model_predictions.jsonl", "parameters": { "max_new_tokens": 64 }, "timeout_seconds": 60 }, "timeout_seconds": 600, "max_output_chars": 20000 } ``` `output_path` 使用相对 `output/...`,平台会路由到当前 session output 目录。 ### 5. 展示结果 执行完成后,简短展示: - 输入格式。 - 处理条数、成功数、失败数。 - 输出路径。 - 抽 3 条预测样例。 如果存在真实标签,说明输出里包含 `gold_label`,后续可以继续做准确率或错误分析。 ## 输出格式 默认输出 JSONL,一行一条紧凑 JSON: ```json {"index":0,"request_id":"...","query":"...","gold_label":"complex=false\nAgent(tag=\"地图导航\")","prediction":"...","ok":true,"latency_ms":123} ``` 如果请求失败: ```json {"index":0,"query":"...","gold_label":"...","prediction":"","ok":false,"error":"HTTP 500 ...","latency_ms":123} ``` 默认不把完整 prompt 写入结果,避免文件过大。如确实需要排查,可传 `include_prompt=true`。 ## 注意事项 - URL、鉴权 header、特殊请求体字段都以用户提供为准。 - 默认接口字段是 `inputs` 和 `parameters`;如果用户说明接口不同,需要在脚本输入里传 `request_template`。 - 大批量请求前先小样本 dry run。 - 打标脚本只负责请求模型和记录预测结果,不负责修改原始数据。 - 后续准确率统计、错误聚类、补数计划可以再交给其他 skill。