案例采集/拆解/归档技能包(case-library 配套,可独立分发)
|
|
3 hari lalu | |
|---|---|---|
| bin | 3 hari lalu | |
| references | 3 hari lalu | |
| scripts | 3 hari lalu | |
| .gitignore | 3 hari lalu | |
| README.md | 3 hari lalu | |
| SKILL.md | 3 hari lalu | |
| package.json | 3 hari lalu | |
| skill-package-manifest.json | 3 hari lalu |
案例采集 / 拆解 / 归档技能包 —— 把各种素材变成可入库的案例。
npx skill-case-get@latest workspace # 装进 ./.claude/skills/skill-case-get
npx skill-case-get@latest selftest # 本机自检(不联网)
收到素材 → 拆解分析 → 能否进案例库 → 打标 → 上传归档(待审清单)
同事在微信里连发 9 张图,说「这是上次 IC 那个学生的案例」。 这 不是 9 个素材,是 1 个案例,图要按九宫格阅读顺序排。以前只能手工数、手工起名、手工打标。
本技能把它变成一条可重复的管线:
.docx/.pptx 用 python3 标准库解包;视频抽帧 + 转写order(左上 → 右下)materialAssets[],不混caseSubmit 写待审清单(pending,不进公共素材库)references/tag-dictionary.json# 只看分组对不对(不调模型、不联网)
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 放行。privacyFindings[].snippet 是掩码后的(138****5678),真实 PII 只在内存里过一遍。详见 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
MPL-2.0 — Copyright (c) 2026 未来飞马 Fmode