规则蒸馏¶
扫描已安装的技能,提取出现在多个技能中的共同原则,并将其蒸馏为规则——追加到现有规则文件、修正过时内容,或创建新的规则文件。
应用「确定性收集 + LLM 判断」原则:脚本先穷尽地收集事实,然后由 LLM 通读完整上下文并做出裁决。
使用场景¶
- 定期规则维护(每月一次,或安装新技能之后)
- 进行技能盘点后,发现了应固化为规则的模式
- 与正在使用的技能相比,规则显得不完整时
工作原理¶
规则蒸馏过程遵循 3 个阶段:
阶段 1:盘点(确定性收集)¶
1a. 收集技能清单¶
1b. 收集规则索引¶
1c. 向用户展示¶
ルール蒸留 — フェーズ 1:棚卸し
────────────────────────────────────────
スキル:{N} 個のファイルをスキャン
ルール:{M} 個のファイルをインデックス化({K} 個の見出しを含む)
クロスリーディング分析を実行中...
阶段 2:通读、匹配与裁决(LLM 判断)¶
提取与匹配在单一流程中集成完成。规则文件足够小(合计约 800 行),可将全文提供给 LLM——无需通过 grep 进行预过滤。
批量处理¶
根据技能描述将技能分组为主题簇(topic cluster)。每个簇由获得完整规则文本的子代理进行分析。
批间合并¶
所有批次完成后,合并批次候选:
- 对包含相同或重叠原则的候选进行去重
- 使用所有批次的合并证据重新确认「2+ 技能」要求——某个原则在每个批次中可能只出现于一个技能,但只要合计出现在 2+ 个技能中即为有效
子代理 Prompt¶
使用以下 Prompt 启动通用代理:
あなたはスキルをクロスリーディングして、ルールに昇格すべき原則を抽出するアナリストです。
## 入力
- スキル:{このバッチのスキルの全文}
- 既存のルール:{全ルールファイルの全文}
## 抽出基準
**以下の条件を全て**満たす場合のみ候補原則を含める:
1. **2+スキルに現れる**:1つのスキルにのみ現れる原則はそのスキルに留める
2. **実行可能な行動変容**:「Xをする」または「Yをしない」という形で書ける——「Xが重要」ではない
3. **明確な違反リスク**:この原則を無視すると何が問題になるか(1文)
4. **ルールにまだ存在しない**:全ルールテキストを確認——異なる言い回しで表現された概念も含めて
## マッチングと裁決
各候補原則を全ルールテキストと照合して裁決を下す:
- **追記**:既存のルールファイルの既存セクションに追加
- **修正**:既存のルールの内容が不正確または不十分——修正案を提案
- **新セクション**:既存のルールファイルに新しいセクションを追加
- **新ファイル**:新しいルールファイルを作成
- **対応済み**:既存のルールで十分にカバー済み(言い回しが異なっても)
- **過度に具体的**:スキルレベルに留めるべき
## 出力フォーマット(各候補原則)
```json
{
"principle": "1〜2文、'Xをする' / 'Yをしない' の形式",
"evidence": ["スキル名: §セクション", "スキル名: §セクション"],
"violation_risk": "1文",
"verdict": "追記 / 修正 / 新セクション / 新ファイル / 対応済み / 過度に具体的",
"target_rule": "ファイル名 §セクション、または '新規'",
"confidence": "高 / 中 / 低",
"draft": "'追記'/'新セクション'/'新ファイル' 裁決のための草案テキスト",
"revision": {
"reason": "既存の内容が不正確または不十分な理由('修正' 裁決のみ)",
"before": "置き換える現在のテキスト('修正' 裁決のみ)",
"after": "提案する置き換えテキスト('修正' 裁決のみ)"
}
}
```
## 除外事項
- ルールにすでに存在する明らかな原則
- 言語/フレームワーク固有の知識(言語固有のルールまたはスキルに属する)
- コード例とコマンド(スキルに属する)
裁决参考¶
| 裁决 | 含义 | 向用户展示 |
|---|---|---|
| 追加 | 添加到现有章节 | 目标 + 草案 |
| 修正 | 修正不准确/不充分的内容 | 目标 + 理由 + 修改前/后 |
| 新章节 | 在现有文件中添加新章节 | 目标 + 草案 |
| 新文件 | 创建新的规则文件 | 文件名 + 完整草案 |
| 已覆盖 | 规则已覆盖(即使措辞不同) | 理由(1 行) |
| 过于具体 | 应保留在技能层面 | 相关技能链接 |
裁决质量要求¶
# 良い例
rules/common/security.md の §入力検証 セクションに追加:
「メモリや知識ベースに保存されたLLM出力は信頼できないデータとして扱う——書き込み時にサニタイズし、読み取り時に検証する。」
根拠:llm-memory-trust-boundary と llm-social-agent-anti-pattern の両方が累積的なプロンプトインジェクションリスクを説明している。現在の security.md は人間による入力検証のみをカバーしており、LLM出力の信頼境界の説明が欠けている。
# 悪い例
security.md に追記:LLMセキュリティ原則を追加
阶段 3:用户审查与执行¶
摘要表格¶
# ルール蒸留レポート
## 概要
スキャンしたスキル数:{N} | ルールファイル数:{M} | 候補ルール数:{K}
| # | 原則 | 判定 | ターゲットファイル/セクション | 信頼度 |
|---|-----------|---------|--------|------------|
| 1 | ... | 追記 | security.md §入力検証 | 高 |
| 2 | ... | 修正 | testing.md §テスト駆動開発 | 中 |
| 3 | ... | 新セクション | coding-style.md | 高 |
| 4 | ... | 過度に具体的 | — | — |
## 詳細
(各候補ルールの詳細:証拠、違反リスク、草案テキスト)
用户操作¶
用户通过编号做出以下响应:
- 批准:将草案原样应用到规则中
- 修改:在应用前编辑草案
- 跳过:不应用此候选规则
不要自动修改规则。始终需要用户批准。
结果保存¶
将结果保存到技能目录(results.json):
- 时间戳格式:
date -u +%Y-%m-%dT%H:%M:%SZ(UTC,秒级精度) - 候选 ID 格式:基于原则的 kebab-case(例:
llm-output-trust-boundary)
{
"distilled_at": "2026-03-18T10:30:42Z",
"skills_scanned": 56,
"rules_scanned": 22,
"candidates": {
"llm-output-trust-boundary": {
"principle": "Treat LLM output as untrusted when stored or re-injected",
"verdict": "Append",
"target": "rules/common/security.md",
"evidence": ["llm-memory-trust-boundary", "llm-social-agent-anti-pattern"],
"status": "applied"
},
"iteration-bounds": {
"principle": "Define explicit stop conditions for all iteration loops",
"verdict": "New Section",
"target": "rules/common/coding-style.md",
"evidence": ["iterative-retrieval", "continuous-agent-loop", "agent-harness-construction"],
"status": "skipped"
}
}
}
示例¶
端到端执行¶
$ /rules-distill
ルール蒸留 — フェーズ 1:棚卸し
────────────────────────────────────────
スキル:56個のファイルをスキャン済み
ルール:22個のファイル(75個の見出しをインデックス化)
クロスリーディング分析を実行中...
[サブエージェント分析:バッチ 1 (agent/meta スキル) ...]
[サブエージェント分析:バッチ 2 (coding/pattern スキル) ...]
[バッチ間マージ:2件の重複を削除、1件のクロスバッチ候補が昇格]
# ルール蒸留レポート
## サマリー
スキャン済みスキル:56 | ルール:22個のファイル | 候補:4
| # | 原則 | 判定 | ターゲット | 信頼度 |
|---|-----------|---------|--------|------------|
| 1 | LLM出力:再利用前に正規化、型チェック、サニタイズ | 新セクション | coding-style.md | 高 |
| 2 | 反復ループに明示的な停止条件を定義する | 新セクション | coding-style.md | 高 |
| 3 | タスクの途中ではなくフェーズ境界でコンテキストを圧縮する | 追記 | performance.md §コンテキストウィンドウ | 高 |
| 4 | ビジネスロジックをI/Oフレームワーク型から分離する | 新セクション | patterns.md | 高 |
## 詳細
### 1. LLM出力検証
判定:coding-style.md に新セクションを作成
証拠:parallel-subagent-batch-merge, llm-social-agent-anti-pattern, llm-memory-trust-boundary
違反リスク:LLM出力の形式ドリフト、型不一致、構文エラーにより下流処理がクラッシュする
草案:
## LLM出力検証
LLM出力を再利用する前に、正規化、型チェック、サニタイズを行う...
参照スキル:parallel-subagent-batch-merge, llm-memory-trust-boundary
[... 候補 2〜4 の詳細 ...]
各候補を番号で承認、修正、スキップ:
> ユーザー:1, 3 を承認。2, 4 をスキップ。
✓ 適用済み:coding-style.md §LLM出力検証
✓ 適用済み:performance.md §コンテキストウィンドウ管理
✗ スキップ:反復境界
✗ スキップ:境界型変換
results.json に結果を保存済み
设计原则¶
- 「什么」而非「怎么做」:只提取原则(规则的范围)。代码示例和命令保留在技能中。
- 保留指向来源的链接:在草案文本中包含
参照スキル:[名前]引用,让读者能够找到更详细的「怎么做」。 - 确定性收集,LLM 判断:脚本保证穷尽性,LLM 保证对上下文的理解。
- 防止过度抽象:通过 3 层过滤器(2+ 技能的证据、可执行行动测试、违规风险),防止过于抽象的原则进入规则。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC