适用场景:已有 N 条 req-specific 的具体 strategy(每条是"为 req X 设计的解法"), 想把它们合并成 M 条抽象 pattern(每条是"跨 req 可迁移的方法套路 / skill"), N 通常 100-300,M 目标 20-40。
记录时间:2026-04-22(193 → 27 实操时)
strategy 作为"skill"的价值在于迁移复用。合并的目的是识别"同一种做事方法" 跨 req 重现的规律,不是机械压缩数量。
因此:
对每条 strategy 提取以下信号:
| 信号 | 用途 |
|---|---|
| cap_signature(set of canonical cap ids) | 机械粗筛基础 |
| name(strategy 名) | 理解命名者的本意 |
| phase 列表(phase 名 + 简述) | 理解执行步骤 |
| reasoning(选择理由) | 理解作者强调的差异点 |
| body.source / workflow_outline 里的 implements | 关键技术锚点(工具/模型/参数) |
⚠️ 不要只取名字——名字往往是被 LLM 即兴起的,方法论藏在 phases 和 reasoning 里。
算法选择:中心贪心 + Jaccard 相似度
# 按 cap_count 降序排列(cap 多的做中心候选)
indices.sort(key=lambda i: -cap_count[i])
for center_idx in indices:
if assigned: continue
members = [center_idx]
for other in indices:
if other not in assigned and Jaccard(cap[center], cap[other]) >= threshold:
members.append(other); assigned.add(other)
clusters.append(members)
关键选择:
粗筛产出:候选簇 + 单例。把每个簇的成员(带 name/phases/reasoning)输出到 md,供下一步人工判断。
不要信任粗筛结果。逐簇读内容,问三个问题:
Q1:方法论主轴是否相同?(决定能否合并)
方法论主轴即"怎么做"的根本路径。典型主轴:
| 主轴 | 判别特征 |
|---|---|
| 提示词直出 | 核心是单条 prompt,无多节点 |
| 工作流编排 | Coze/ComfyUI/Lovart 串节点,LLM + 批量生图 + 后处理 |
| 参考图驱动 | 上传图做 anchor(风格/主体/构图) |
| 局部重绘 | Inpaint 蒙版,主体保持其余换 |
| 分层合成 | 分别生成底/人/光/字再合 |
| 双图融合 | 主体 + 目标两张图合一 |
| 模板填充 | 预设模板 + 数据源灌入 |
| 图生视频 | 静态图作首帧/尾帧驱动视频 |
主轴不同 → 不合并(即使 cap 完全一样)。
Q2:技术锚点是否相同?(决定同主轴下要不要再拆)
技术锚点 = 工具生态 / 模型 / 关键参数:
技术锚点不同 → 同主轴也拆开(他们是不同的 skill)。
Q3:产出形态是否与合并相容?(次要维度)
两条 strategy 应该合并吗?
├─ 方法论主轴相同吗?
│ ├─ No → 不合并
│ └─ Yes ↓
├─ 技术锚点相同吗?(工具/模型/关键技术)
│ ├─ No → 不合并(同主轴但不同 skill)
│ └─ Yes ↓
└─ 合并(产出形态差异可接受)
每个 pattern 起名的规则:
[工具/生态] + [核心动作] + 套路 例如:
避免:
合并完成后验证:
| 检查 | 期望 |
|---|---|
| 每个 pattern 的成员能用一句话描述共通做法 | ✓ |
| pattern 数量在 20-40(针对 100-300 条 strategy) | ✓(过少过合,过多过散) |
| 单例 pattern 不超过总量 20% | 允许 1:1 的"独特方法",但不能全是单例 |
| 最大簇不超过总量 15% | 超过说明粒度太粗 |
| 每条具体 strategy 被分配到一个(且仅一个)pattern | ✓ |
以下做法即使诱人也要避免:
示例:REQ_045 的"AI脚本驱动·批量生图·文字嵌入·宫格自动排版一体化流派" 同时涉及:
处理:归到主要方法那个 pattern(通常是方法论主轴最重的那个)。这里归 P04,因为 Coze 编排是灵魂,网格和文字只是其中一个环节。
示例:只有 1 条成员的候选 pattern。
处理:
处理:优先用 salvage 脚本补全 body(参考 salvage_placeholder_strategies.py),再参与合并。无法补全的标 data_degraded,不参与聚类。
这是正常的。一个 req 的 selected 和 alt 如果用同一方法(只是参数不同)就应归同一 pattern。 不同 req 各自的 alt 归到同一 pattern 也正常——说明那个方法在多 req 下都被考虑过但未被选中。
示例:一条 strategy 前半用 Coze 工作流后半用 ComfyUI 精修。
处理:归到阶段数占比最大的那个 pattern。若真 50-50,归到门槛更低的那个(工作流 > ComfyUI)。
完成后给用户审核的 md 应包含:
## P01 · 套路名
> 一句话方法论描述
**成员(N)**:
- REQ_XXX selected/alt name
- REQ_YYY selected/alt name
...
以及汇总表:
| # | 套路 | 成员数 |
|---|---|---|
| P01 | ... | 17 |
用户审核时主要看:
用户通常只会"看一眼没问题就行",所以方案要一读即懂,命名和分类要经得起 5 秒直觉判断。
合并方案确认后:
version 标记,如 howard_strategy_instance)requirement_strategy 改 M:N:每 req 关联其具体 strategy 对应的抽象 patternstrategy_capability 重建为抽象 strategy ↔ cap signature(取簇内 cap 联合集或频次 ≥50% 的核心集)strategy_resource 为抽象 strategy ↔ 簇内所有成员 resource 联合集| 指标 | 值 |
|---|---|
| 输入具体 strategy 数量 | 193 |
| 机械粗筛候选簇数(Jaccard>=0.5 中心贪心) | 67(31 多簇 + 36 单例) |
| 人工判断后最终 pattern 数 | 27 |
| pattern 分布 | 最大 17 成员 / 平均 7 / 最小 1 |
| 耗时(纯判断环节) | ~30 分钟 |
关键观察:
knowhub/scripts/salvage_placeholder_strategies.py - 占位 strategy 修复(Step 0 前置)knowhub/scripts/ingest_all_strategies.py - 全量入库含 alt(本方法论的输入数据准备)