关于 cawplan-internal-qa-coding-humaninputs-sample
一项 CawPlan 技能,可收集人工输入记录、生成符合生产分类上下文规则的 JSON 测试样本,并通过浏览器编辑器标注,适用于评测数据准备。
主要功能
- 01通过 CawPlan CLI 获取人工输入记录
- 02生成含前序轮次上下文的测试样本
- 03标注预期类别与主题
- 04设置审核标记和可选理由
- 05在浏览器编辑器加载并导出 JSON
适用场景
- 01从筛选记录生成已标注的评测样本
- 02逐轮审核对话的类别与主题标签
- 03将标注后的 JSON 导出到评测目录
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cawcut/ skill-cawplan --skill cawplan-internal-qa-coding-humaninputs-sample安装后在 Claude Code 中输入/cawplan-internal-qa-coding-humaninputs-sample确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/label-editor.htmlassets/js/classify_context.mjsassets/samples/.gitkeeplatest.jsonreferences/CATEGORY_TAXONOMY.mdTOPIC_TAXONOMY.mdscripts/build_sample.mjsclassify_context.mjs详细介绍
CawPlan 内部 QA — 人工输入样本与标签
初始化
cawplan skill check
任务
通过 CawPlan CLI 获取人工输入行,生成与生产环境分类上下文规则一致的 fixture JSON,然后打开本地标签编辑器,让人工为每轮设置 expected_categories、expected_topic,以及可选的 expected_reason 和 review_required。
工作流
1. 确定范围(使用与 humaninputs-test 相同的消歧规则)
成员(可选):cawplan session members → 精确的 --member git key。如果有歧义,请让用户选择,不要猜测。
产品(可选):cawplan products list --search "<name>" → unique_id。如果有歧义,请让用户选择。
产品内的用户(可选):product-human-input-logs --user-id 需要 PRM user_id,通过 cawplan users query 解析。
日期范围(必填):--from / --to,或使用 --date 指定单日。如果用户没有提供范围,默认取最近 2 天。
数量:--limit N(默认值为 20)。
会话形态(任选其一):
--one-session— 自动选择范围内行数最多的会话(最适合多轮 prev 链,例如 20 轮 Slack fixture)。--session-id <id>— 明确保留一个会话。- 两者都不指定 — 排序后取前 N 行(仍按
session_id计算 prev)。
2. 构建 fixture JSON
在此技能目录中运行:
SKILL_DIR="/media/spx/work/github/flow-cawplan-skill/skills/cawplan-internal-qa-coding-humaninputs-sample"
node "$SKILL_DIR/scripts/build_sample.mjs" \
--from <YYYY-MM-DD> --to <YYYY-MM-DD> \
[--member "<exact_member>"] \
[--product "<product name>" | --product-id <id>] \
[--user-id <prm_user_id>] \
[--session-id <session_id> | --one-session] \
--limit <N> \
--output "<path>/human-input-sample.json" \
--copy-for-editor
输出格式(与 /media/spx/work/2026/0830/ 下的 eval fixture 一致):
| 字段 | 含义 |
|---|---|
items[].content | 原始人工输入 |
items[].assistant_message | 配对的原始助手回复(来自 API 的完整文本) |
items[].prev_assistant_message | 已处理的同一会话中上一轮助手回复的最后一个段落(生产环境的 prev 槽位)。从日期范围内获取的所有行中解析,而不仅限于选定的 N 行,因此即使该会话较早的轮次未包含在输出中,近期切片仍可获得正确的 prev |
items[].expected_categories | 标注前为空 [] |
items[].expected_topic | 标注前为空 |
items[].expected_reason | 供审核者参考的可选自由文本理由(填写前为空) |
items[].review_required | 默认为 false;当类别/主题标签需要审核时设为 true |
items[].cloud_category / cloud_topic | 来自云端增强的可选提示 |
预处理与 uid.core-product 的 ClassifyPrevAssistantTail /
ClassifyAssistantSnippet 一致(参见 scripts/classify_context.mjs)。
3. 打开标签编辑器
执行 --copy-for-editor 后,启动静态服务并打开页面:
cd "$SKILL_DIR/assets"
python3 -m http.server 8765
浏览器:http://localhost:8765/label-editor.html
- 加载最新样本 — 读取
assets/samples/latest.json(由--copy-for-editor写入)。 - 加载 JSON — 选择任意 fixture 文件。
- 下载已标注的 JSON — 导出填有
expected_categories/expected_topic的*-labeled.json;设置后还会包含expected_reason/review_required。 - 草稿会自动保存到浏览器的
localStorage。
告知用户输出路径、编辑器 URL,并提醒他们完成后导出已标注的 JSON(保存到自己的 eval 文件夹下,例如 /media/spx/work/2026/0830/)。
输出
向用户报告:
- 已解析的筛选条件(成员 / 产品 / 日期 / 数量限制 / 会话)。
- 生成的 JSON 和
assets/samples/latest.json的路径。 - 标签编辑器 URL(
http://localhost:8765/label-editor.html)。 - 提醒:标注完成后,从页面导出已标注的 JSON。
参考资料
scripts/build_sample.mjs— 获取并预处理scripts/classify_context.mjs— 与生产环境对齐的段落规则assets/label-editor.html— Web UIreferences/CATEGORY_TAXONOMY.md— 类别标签定义references/TOPIC_TAXONOMY.md— 主题标签定义