Files
sanguo_moziplus_v2/skills/skill-management/references/distill.md
T
cfdaily 166172e0b8
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 53s
CI / frontend (pull_request) Successful in 12s
CI / notify-on-failure (pull_request) Successful in 0s
[moz] impl(skill-mgmt): S1+S2 实现 — skill-management Skill + 设计文档修复
S1: AGENTS.md 经验闭环规则(workspace 层,单独管理)
S2: skill-management Skill 完整实现
  - SKILL.md(主:综述 + 四阶段速查 + 验证标准 + 自我修补规则)
  - references/discover-l1.md(各 agent 03:00 自蒸馏操作指南)
  - references/discover-l2.md(庞统 05:00 整合审查操作指南)
  - references/distill.md(蒸馏规范 + 验证标准 + 矛盾处理)
  - references/apply.md(openclaw 原生机制 + per-agent 可见性)
  - references/improve.md(引用追踪 + 淘汰 + 提升)
  - assets/templates/skill-template.md(SKILL.md 标准模板)
  - assets/templates/signal-format.md(信号输出格式模板)
  - assets/checklists/quality-check.md(质量检查清单)

文档修复:cron 错开时间 5min → 15min
2026-06-18 22:13:01 +08:00

4.1 KiB
Raw Blame History

DISTILL — 蒸馏规范

核心原则:HOW not WHAT

蒸馏的是「怎么做」不是「发生了什么」:

❌ "PR #83 修复了 event_type 未知的问题"
    → 这是 WHAT,无法复用

✅ "消费者/生产者字段同步:新增 dataclass 字段时,必须同步所有从 JSON 提取该字段的代码路径"
    → 这是 HOW,可复用到任何消费者/生产者场景

SKILL.md 编写规范

---
name: skill-name
description: Use when [触发条件/问题模式描述],不描述工作流
---

# Skill 标题

## 什么时候用
(具体的触发场景,按问题模式描述,不按技术特定症状)

## 怎么做
(根因分析 + 操作步骤)

## 常见错误
(反模式:什么不该做)

## 来源
evidence:哪些 task/PR/review 提炼了这条经验)

description 关键规则

  • 只描述触发条件(when to use),绝不描述工作流how
  • 以「Use when...」开头
  • 描述问题模式,不描述技术特定症状
  • 原因:测试发现 description 如果总结了工作流,agent 会按 description 执行而跳过读完整 SKILL.md

示例

# ❌ BAD:描述了工作流
description: Use when modifying dataclass — checks all extraction points, runs tests

# ✅ GOOD:只描述触发条件
description: Use when modifying a dataclass that is populated from JSON extraction by another module

# ❌ BAD:太抽象
description: Use for code quality

# ✅ GOOD:描述问题模式
description: Use when a field added to a dataclass appears empty or as default value at runtime

蒸馏示例

一级蒸馏(从具体案例提取):

# 案例 1PromptContext event_type 未知
# 案例 2PromptContext from_agent/mail_type 缺失(PR #26 D2
→ 共同根因:消费者/生产者字段同步问题

## 消费者/生产者字段同步

**什么时候用**:修改 dataclass 时,如果该 dataclass 由外部 JSON 提取填充

**怎么做**
1. 改 dataclass 定义
2. 检查所有从 JSON 提取字段的代码路径,同步新增提取逻辑
3. 检查所有构造该 dataclass 的调用点,同步新增参数
4. 跑一次构建测试验证字段不为空

**常见错误**:只改 dataclass 不改提取逻辑 → 字段默认值为空 → 运行时不报错但行为异常

二级蒸馏(从多个一级经验提取通用模式):

如果经验在 ≥2 个不同场景复现,验证通过后,可以提升为独立 Skill 或固化到 AGENTS.md 规则。

验证标准

从 draft → active

维度 标准 不通过
Recurrence-Count ≥ 2 同一 Pattern-Key 在 ≥2 个场景出现 降级为 MEMORY.md
有生成力 能给出具体操作指引 丢弃
有排他性 不是常识 丢弃

提升触发(全部满足):30 天内 ≥3 次 + 跨 ≥2 个任务。

Skill Extraction 质量 Gate

标准 描述
Recurring 有 See Also 链接到 2+ 个相似信号
Verified Status 是 resolved 且有工作修复
Non-obvious 需要实际调试才能发现
Broadly applicable 不是项目特定,可跨场景复用

质量检查

检查项 标准
trigger 是否具体 不是「注意代码质量」
action 是否可执行 不是「要小心」
是否与已有 Skill 重复 检查现有 skills 目录
description 是否只含触发条件 不包含工作流描述

矛盾处理

新经验与已有经验冲突时:

  • 时间性矛盾(观点演化)→ 记录演化轨迹,以近期为主
  • 领域性矛盾(不同场景不同规则)→ 分场景记录
  • 本质性张力(价值观内在冲突)→ 标注为「核心张力」,两个版本都保留

矛盾是特征,不是 Bug。 强制调和会丢失关键信号。

信号输出格式

每条信号包含:

信号类型 | 来源 | 时间 | 简述(≤100 字)
ID: SIG-YYYYMMDD-XXX
Priority: low | medium | high | critical
Status: pending | in_progress | resolved | promoted
See Also: SIG-YYYYMMDD-XXX
Recurrence-Count: N
Pattern-Key: category.subcategory