mongo-migration 技能评估报告¶
评估框架: skill-creator A/B 实测对比法 评估日期: 2026-04-18 评估对象:
skills/mongo-migration/(MongoDB 4.4–7.0+ 迁移安全审查技能)
MongoDB 迁移安全审查场景专业性较强,基础 Claude 模型在核心缺陷识别上表现出色,但在输出结构规范性与 Token 效率上存在可测量差距。A/B 测试设计了 3 个场景共 24 条断言,覆盖技能的三个核心工作模式。
1. Skill 概述¶
核心组件:
| 文件 | 行数 | 职责 |
|---|---|---|
SKILL.md | 321 行 | 主框架:4 个 Gate、3 个深度级别、12 项 Scorecard、9 节输出合约 |
references/mongo-ddl-lock-matrix.md | ~150 行 | Standard/Deep 深度加载:版本 × 锁行为矩阵 |
references/large-collection-migration.md | ~180 行 | Deep 深度加载:_id-range 批量、字段类型迁移 6 步、滚动索引构建 |
references/migration-anti-examples.md | ~100 行 | 扩展反例 AE-7 至 AE-13 |
覆盖的 MongoDB 核心安全规范: - _id-range 分批更新(非无界 updateMany) - Write concern 显式设置(w:"majority") - Validator 渐进模式(moderate → strict,非直接 strict) - 字段类型迁移新字段模式(amount_v2 + 双读 + 回填 + 清理) - 滚动索引构建(>50M docs)
2. 测试设计¶
2.1 场景定义¶
| # | 场景名称 | 集合规模 | 核心挑战 | 预期结果 |
|---|---|---|---|---|
| 1 | 索引安全 + Validator 渐进 | 15M docs, 18 GB | 无界 updateMany、无重复检查的 unique index、strict validator 早于回填 | 识别 3 个 Critical 缺陷,提供 _id-range 批量方案 |
| 2 | 大集合字段类型迁移 | 8M docs, 12 GB | 原地类型覆写(不可逆)、无 write concern、无 _id 分批 | 推荐 amount_v2 新字段模式,Scorecard 0/12 |
| 3 | 降级模式(无上下文) | 未知 | 版本/规模/部署类型全部未知 | 进入 Minimal 模式,保守假设全列出,Data basis 标注 |
2.2 断言矩阵(24 项)¶
场景 1 — 索引安全 + Write Concern(9 项)
| ID | 断言 | With-Skill | Without-Skill |
|---|---|---|---|
| A1 | 识别 updateMany({}, ...) 无 _id 分批为 WiredTiger ticket 耗尽风险 | PASS | PASS |
| A2 | 识别 createIndex({unique:true}) 前缺少重复数据预检查 | PASS | PASS |
| A3 | 识别 validationLevel:"strict" 在回填前直接启用为 UNSAFE | PASS | PASS |
| A4 | 建议 validationLevel 采用 "moderate" → "strict" 渐进模式 | PASS | PASS |
| A5 | 所有操作明确设置 w:"majority" write concern,并标注为 Critical 缺失 | PASS | PASS |
| A6 | 提供 _id-range 分批回填脚本(含 sleep 节流) | PASS | PASS |
| A7 | 原始脚本 Scorecard:Critical 0/3(lock_timeout/write concern/rollback 全部缺失) | PASS | PASS |
| A8 | §9.9 包含 email 字段存在性、null 值处理、oplog 窗口等 ≥5 条风险 | PASS | PASS |
| A9 | §9.9 使用规定表格格式(Area | Reason | Impact | Follow-up) | PASS | FAIL |
场景 1 小结:With-Skill 9/9,Without-Skill 8/9(失分于 §9.9 表格格式)
场景 2 — 大集合字段类型迁移(9 项)
| ID | 断言 | With-Skill | Without-Skill |
|---|---|---|---|
| B1 | 识别无界 updateMany 为 Critical 缺陷(WiredTiger write ticket 耗尽) | PASS | PASS |
| B2 | 识别原地字段类型覆写为 UNSAFE(不可逆 + 旧代码立即失效) | PASS | PASS |
| B3 | 推荐 amount_v2 新字段 + 双读 + 回填 + 验证器 + 清理(6 步模式) | PASS | PASS |
| B4 | 在回滚方案中明确标注 Phase 5($unset 旧字段)为 irreversible,需备份 | PASS | PASS |
| B5 | 将 write concern 从 w:1 升级至 w:"majority" 作为必须项 | PASS | PASS |
| B6 | 提供 _id-range 批量迁移脚本(含幂等过滤 + sleep 节流) | PASS | PASS |
| B7 | 原始脚本 Scorecard:0/12(所有 Critical/Standard/Hygiene 全部 FAIL) | PASS | PASS |
| B8 | 识别 validationLevel:"strict" 在回填前启用为 UNSAFE(AE-3) | PASS | PASS |
| B9 | §9.9 使用规定表格格式(Area | Reason | Impact | Follow-up) | PASS | FAIL |
场景 2 小结:With-Skill 9/9,Without-Skill 8/9(失分于 §9.9 表格格式)
场景 3 — 降级模式(无上下文)(6 项)
| ID | 断言 | With-Skill | Without-Skill |
|---|---|---|---|
| C1 | 声明 Minimal/Degraded Mode,Data basis: minimal 标注 | PASS | PASS |
| C2 | 所有风险评估带条件假设,不作无条件"安全"声明 | PASS | PASS |
| C3 | §9.9 使用规定表格格式,覆盖 ≥8 条已知未知量 | PASS | FAIL |
| C4 | 识别 MongoDB 版本对索引构建方法的影响(<4.2 vs 4.2+) | PASS | PASS |
| C5 | 建议先运行 estimatedDocumentCount() 确定集合规模 | PASS | PASS |
| C6 | 建议以 {device_type: {$exists: false}} 为幂等过滤条件 | PASS | PASS |
场景 3 小结:With-Skill 6/6,Without-Skill 5/6(失分于 §9.9 表格格式)
3. 通过率对比¶
3.1 总体断言通过率¶
| 配置 | PASS | FAIL | 通过率 |
|---|---|---|---|
| With Skill | 24/24 | 0 | 100% |
| Without Skill | 21/24 | 3 | 87.5% |
Delta:+12.5 percentage points
3.2 按场景通过率¶
| 场景 | With-Skill | Without-Skill | 差距 |
|---|---|---|---|
| S1 索引安全 | 9/9 (100%) | 8/9 (88.9%) | A9 §9.9 格式 |
| S2 类型迁移 | 9/9 (100%) | 8/9 (88.9%) | B9 §9.9 格式 |
| S3 降级模式 | 6/6 (100%) | 5/6 (83.3%) | C3 §9.9 格式 |
规律:3 个失分项全部来自同一根因——§9.9 Uncovered Risks 输出格式。无 Skill 组使用编号列表或散文段落;有 Skill 组使用规定的 4 列表格(Area | Reason | Impact | Follow-up)。这是技能输出合约(§9 Output Contract)对格式的强制约束,而非内容知识差异。
4. 关键差异分析¶
4.1 With-Skill 专有行为¶
| 行为 | 依据 |
|---|---|
| §9.9 以表格格式呈现(Area|Reason|Impact|Follow-up) | §9 Output Contract 强制规定 |
| 明确引用 Anti-example 编号(AE-2、AE-3、AE-4) | §7 Anti-Examples 交叉参照 |
| Gate-by-Gate 显式分析(Gate 1–4 逐项标注) | §2 Mandatory Gates 框架 |
Data basis: 标注(full/degraded/minimal/planning) | §8 Scorecard 必须字段 |
Scorecard 格式为 X/12 — Critical Y/3, Standard Z/5, Hygiene W/4 | §8 精确格式要求 |
4.2 核心知识对比¶
| 检查点 | With-Skill | Without-Skill |
|---|---|---|
| WiredTiger ticket 耗尽识别 | PASS | PASS |
_id-range 分批方案 | PASS | PASS |
| amount_v2 新字段模式 | PASS | PASS |
| moderate → strict 渐进 | PASS | PASS |
| irreversible 分类($unset 阶段) | PASS | PASS |
结论:MongoDB 迁移核心安全知识(WiredTiger、_id-range、validator 渐进)已深度训练进基础模型。技能的价值集中在结构强制性,而非知识传递。
4.3 S3 异常:有 Skill 组 Token 更多¶
场景 3(降级模式)出现反转:有 Skill 组(36,706 tokens,3 次工具调用)> 无 Skill 组(31,986 tokens,2 次工具调用)。
原因:SKILL.md §3 规定"未知集合规模 → 假设 Large → Deep depth → 加载两个参考文件"。有 Skill 组遵循此规则加载了 large-collection-migration.md 和 mongo-ddl-lock-matrix.md,产生额外输入 token 和工具调用。无 Skill 组保持在 Standard depth 水平,信息更精简。
影响:这是技能设计的保守性体现(宁可多加载也不漏判),但在完全无上下文场景下会增加成本。
5. Token 效费比分析¶
5.1 Skill 上下文 Token 成本¶
| 组件 | 行数 | 估算 Token 数 | 加载时机 |
|---|---|---|---|
SKILL.md | 321 | ~4,200 | 每次 |
mongo-ddl-lock-matrix.md | ~150 | ~2,000 | Standard/Deep |
large-collection-migration.md | ~180 | ~2,400 | Deep / 大集合 |
5.2 实际运行 Token 消耗¶
| 代理 | 场景 | Total Tokens | Tool Calls | 模式 |
|---|---|---|---|---|
| Without Skill | S1 | 36,844 | 3 | 无 Skill |
| With Skill | S1 | 19,574 | 0 | 有 Skill |
| Without Skill | S2 | 37,583 | 3 | 无 Skill |
| With Skill | S2 | 19,374 | 0 | 有 Skill |
| Without Skill | S3 | 31,986 | 2 | 无 Skill |
| With Skill | S3 | 36,706 | 3 | 有 Skill(异常:加载参考文件) |
5.3 效费比计算¶
| 指标 | S1 | S2 | S3(异常) | 加权均值 |
|---|---|---|---|---|
| 无 Skill Token | 36,844 | 37,583 | 31,986 | 35,471 |
| 有 Skill Token | 19,574 | 19,374 | 36,706 | 25,218 |
| Token 变化 | −46.9% | −48.5% | +14.8% | −28.9% |
| 质量提升 | +11.1 pp | +11.1 pp | +16.7 pp | +12.5 pp |
S1/S2 效费比最优:在有充足上下文时(版本、规模已知),有 Skill 节省近 50% Token,同时质量略优。Token 节省源于:结构化输出替代探索性推理(无 Skill 组先搜索再整合)、0 额外工具调用。
S3 负效比区间:当上下文严重缺失时,技能框架倾向于保守性深度触发(Deep + 加载所有参考),反而增加 Token 消耗。对比 pg-migration(S3 相同情况无此异常),说明 mongo-migration 的 Deep 触发条件在 Minimal 上下文下过于激进。这是一个可改进点(见 §7)。
6. 综合评分¶
6.1 分维度评分(5 分制)¶
| 维度 | With Skill | Without Skill | 差值 |
|---|---|---|---|
| Critical 缺陷识别完整性 | 5.0 | 4.8 | +0.2 |
| Write Safety 强制执行 | 5.0 | 4.5 | +0.5 |
| 回滚方案分类准确性 | 5.0 | 4.5 | +0.5 |
| 输出结构规范性(§9 格式合规) | 5.0 | 3.5 | +1.5 |
| 迁移脚本质量(_id-range、幂等性) | 5.0 | 4.5 | +0.5 |
| 降级模式处理 | 5.0 | 4.0 | +1.0 |
6.2 加权总分(满分 10 分)¶
| 维度 | 权重 | With-Skill 得分 | Without-Skill 得分 | 理由 |
|---|---|---|---|---|
| Critical 缺陷识别 | 25% | 10.0/10 | 9.5/10 | 两者均精准识别 3 个 Critical 缺陷;无 Skill 组仅在 AE 交叉参照上略弱 |
| Write Safety 强制 | 20% | 10.0/10 | 9.0/10 | 两者均要求 w:majority;有 Skill 组将其标注为 Critical 层强制项 |
| 回滚方案分类 | 15% | 10.0/10 | 9.0/10 | 两者均识别 irreversible 阶段;有 Skill 组用三分类框架更系统 |
| 输出结构规范性 | 20% | 10.0/10 | 7.0/10 | §9.9 表格格式:有 Skill 100% 合规;无 Skill 100% 不合规 |
| 迁移脚本质量 | 10% | 10.0/10 | 9.0/10 | 两者均提供 _id-range 脚本;有 Skill 含幂等过滤和检查点 |
| 降级模式处理 | 10% | 10.0/10 | 8.0/10 | 有 Skill 组明确 Data basis 标注和 Gate 框架;无 Skill 同样进入保守模式但结构松散 |
| 加权总分 | 100% | 10.00/10 | 8.77/10 | — |
7. 核心发现与改进建议¶
发现 1:mongo-migration 基线接近 pg-migration,同为"强基线"技能¶
| 技能 | 基线通过率 | 有 Skill 通过率 | Delta |
|---|---|---|---|
| mysql-migration | 52% | 100% | +48 pp |
| pg-migration | 87% | 100% | +13 pp |
| mongo-migration | 87.5% | 100% | +12.5 pp |
MongoDB 迁移安全规范(WiredTiger、_id-range、validator 渐进)已被广泛训练进基础模型,基线质量相当强。技能价值集中在格式强制性(§9.9 表格、AE 交叉参照)而非知识注入。
发现 2:§9.9 格式是最一致的差异化来源¶
在 3 个场景中,无 Skill 组在内容上和有 Skill 组高度重叠,唯一一致的失分来自 §9.9 输出格式。无 Skill 组使用的散文/编号列表: - 难以在 CI/CD 流水线中机器解析 - 缺少 Impact 和 Follow-up 维度,不利于团队后续追踪
有 Skill 组的 4 列表格直接可复制为 JIRA/Linear ticket 描述。
发现 3:S3(降级模式)技能过于激进地触发 Deep depth¶
SKILL.md 规定"未知集合规模 → 保守假设为 Large → Deep depth → 加载所有参考文件",导致在 Minimal 上下文下产生 ~14.8% 额外 Token。改进建议:在 §3 Depth Selection 中增加一条规则:
若上下文为 Minimal(仅有脚本,无规模/版本信息),在触发 Deep depth 前先询问用户确认集合规模,或保持在 Degraded 模式下使用 Standard depth,避免在信息缺失时过度消耗。
发现 4:Token 效率在有上下文场景下显著优于无上下文¶
| 场景类型 | Token 节省 |
|---|---|
| 有充足上下文(S1, S2) | −46% ~ −49% |
| 无上下文(S3) | +15%(负效比) |
建议在迁移审查工作流中优先收集 MongoDB 版本和集合规模,再调用技能——这能最大化 Token 效率。
8. 结论¶
mongo-migration 技能评定:生产就绪,强烈推荐用于所有 MongoDB 迁移审查场景。
核心价值点: 1. 格式强制性:§9.9 Uncovered Risks 的 4 列表格格式让风险项可追踪、可机器解析,无 Skill 组 100% 不满足此格式 2. 评估框架一致性:Gate 分析、AE 交叉参照、Data basis 标注确保每次审查可重复、可比较 3. 有上下文时 Token 高效:S1/S2 节省 47% Token,来源于结构化输出替代探索性推理
改进建议: 1. §3 Depth Selection 增加 Minimal 上下文下避免 Deep 过度触发的规则 2. §9 Output Contract 增加 golang-migrate / mongomigrate 等框架的事务包裹行为说明(对应 pg-migration 的 golang-migrate 注意事项) 3. 考虑增加第 4 个测试场景覆盖 reshardCollection(shard key 迁移),这是 MongoDB 5.0+ 最复杂的运维操作