案例采集/拆解/归档技能包(case-library 配套,可独立分发)

FmodeAgent 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
bin 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
references 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
scripts 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
.gitignore 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
README.md 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
SKILL.md 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
package.json 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu
skill-package-manifest.json 2cb6f5dc13 feat: skill-case-get v1.0.0 — 案例采集/拆解/归档技能包(可独立分发) 3 hari lalu

README.md

skill-case-get

案例采集 / 拆解 / 归档技能包 —— 把各种素材变成可入库的案例。

npx skill-case-get@latest workspace          # 装进 ./.claude/skills/skill-case-get
npx skill-case-get@latest selftest           # 本机自检(不联网)
收到素材 → 拆解分析 → 能否进案例库 → 打标 → 上传归档(待审清单)

解决什么问题

同事在微信里连发 9 张图,说「这是上次 IC 那个学生的案例」。 这 不是 9 个素材,是 1 个案例,图要按九宫格阅读顺序排。以前只能手工数、手工起名、手工打标。

本技能把它变成一条可重复的管线:

  1. 识别来源:连续多图 / Word / PPT / 图文混合 / 裸图 / 视频
  2. 拆解:图片走 OCR + 语义理解;.docx/.pptx 用 python3 标准库解包;视频抽帧 + 转写
  3. 分组排序:尺寸 / 时间 / 内容三信号判同组,九宫格给显式 order(左上 → 右下)
  4. 分离:「案例说明」进案例字段,「图片视频」进 materialAssets[],不混
  5. 合规:能不能进库?是客诉负面吗?有无授权?
  6. 打标:静态属性 + 跟进状态七段 + 亮点/场景/异议 + 学校别名归一
  7. 归档:caseSubmit 写待审清单(pending,不进公共素材库)
  8. 自进化:新标签追加回 references/tag-dictionary.json

30 秒上手

# 只看分组对不对(不调模型、不联网)
npx skill-case-get@latest plan -- --image g1.jpg --image g2.jpg --image g9.jpg

# 完整采集(推荐先 dry-run,确认后再 submit)
npx skill-case-get@latest ingest -- \
  --image g1.jpg --image g9.jpg \
  --doc 案例稿.docx \
  --authorization authorized \
  --asset-base-url https://cdn.example.com/cases

# 确认顺序无误 → 提交待审
npx skill-case-get@latest submit -- \
  --package case-get-outputs/<runId>/case-package.json

plan / ingest / submit 之后要加 --,参数透传给运行器。

目录结构

skills/skill-case-get/
├── SKILL.md                      技能正文(frontmatter 参照 skill-vision / skill-listen)
├── README.md                     本文件
├── package.json                  name/version/bin
├── skill-package-manifest.json   分发清单
├── bin/skill-case-get.js         安装器 + 运行器透传
├── references/tag-dictionary.json  标签字典(维度/取值/别名,可增量更新)
└── scripts/
    ├── case-intake.mjs           主入口:plan / ingest / submit / reorder / dictionary / selftest
    ├── office_extract.py         .docx/.pptx 解包(纯标准库 zipfile + ElementTree)
    ├── vision-bridge.mjs         图片理解(复用 skill-vision)
    ├── listen-bridge.mjs         视频抽帧 + 转写(ffmpeg + skill-listen)
    ├── cloud-client.mjs          云函数 caseSubmit / casePendingList
    ├── grouping.mjs              分组 + 九宫格顺序
    ├── classify.mjs              案例/素材分离、打标、别名归一、合规判断
    ├── image-size.mjs            零依赖图片尺寸探测(PNG/JPEG/GIF/WebP/BMP)
    ├── lib.mjs                   共享工具(路径/字典/幂等/素材规范化)
    ├── smoke.mjs                 冒烟检查
    └── tests/                    node --test 单测(34 个)

关键设计

为什么用 python3 标准库解包 .docx / .pptx? 本机没有 python-docx / python-pptx,Node 也没有对应库,而 .docx/.pptx 本质就是 zip。 zipfile + xml.etree.ElementTree 足够抽出文字段落、表格、内嵌媒体、超链接。 零依赖意味着技能可以直接被拷进 ~/.claude/skills/ 而不用 npm install。

分组为什么要求「至少 2 种信号」? 只看内容相似度会把两份不同学生的相似截图并成一组;只看时间会把同一时刻收到的不同素材并成一组。 尺寸(同源同排版)+ 时间(连发)+ 内容(共同话术)三者取二,才既不漏并也不误并。

为什么不自动上传二进制? 项目规则明确「不新建独立业务服务器处理普通 CRUD」。技能只做本机拆解与归档编排, 媒体由既有 CDN / Parse Files 承载,用 --asset-base-url 派生 URL。没给就明确警告,而不是造一个假 URL。

依赖

依赖 必需 用途
Node ≥ 18 ✅ 运行器(含 fetch、node --test)
python3 ≥ 3.8 ✅ .docx / .pptx 解包(仅标准库)
skill-vision 推荐 图片 OCR + 语义理解;宿主自带多模态时由宿主读图
skill-listen 可选 视频音轨转写(走 Fmode 网关,凭据仅服务端)
ffmpeg / ffprobe 可选 视频抽帧、时长探测

缺任何一个可选依赖都不会伪造结果——会在 warnings 里说清楚。

安全红线

  • 只处理已获授权素材:authorizationStatus != authorized 一律不入库。
  • 新案例不进公共素材库:只写 reviewStatus='pending' + readyForUse=false,等 caseApprove 放行。
  • PII 不落库:privacyFindings[].snippet 是掩码后的(138****5678),真实 PII 只在内存里过一遍。
  • 凭据不落盘:token 只从环境变量读取,仅内存持有。

详见 SKILL.md 与仓库 CLAUDE.md / .claude/rules/data-and-compliance.md。

开发

npm run smoke    # 冒烟(含单测)
npm test         # node --test scripts/tests/
node scripts/case-intake.mjs selftest

License

MPL-2.0 — Copyright (c) 2026 未来飞马 Fmode