Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# Darwin 修复更新记录

> 日期: 2026-05-22 | PR: https://github.com/alchaincyf/darwin-skill/pull/6
> 分支: fix/anchor-scoring-tehc | Fork: MuseFantasy/darwin-skill

---

## 变更总览

| 文件 | 操作 | 说明 |
|------|------|------|
| SKILL.md | 修改 +47/-6 | 评分规则、Phase 1/2、约束规则 |
| references/anchor-library/dimension-anchors.md | 新增 | 8维锚定示例 + TEHC 覆盖映射 |

---

## P0: 锚定评分替代 LLM 裸判

**问题**: Darwin 原版 Phase 1 使用"按维度打 1-10 分"自由评分。同一 skill 三
次评分三个结果,不同模型基线差 5-8 分。根因:把 autoresearch 的确定性指标
(val_bpb) 换成了 LLM 主观评分。

**修复**:
- 新增「锚定评分协议」: 每维度先读 3 档锚定示例,判断目标"最像哪个档位"
- Phase 1 步骤 2: "逐项打分" → "逐项锚定比对 + 结构化 JSON 输出"
- Phase 2 步骤 4: "重新打分" → "按锚定比对重新打分(禁止直接对比前后分数)"
- 置信度出口: confidence:low → 2模型交叉验证 → 仍 low → 人工评审
- 新增约束规则 #8: 强制锚定评分 (temperature=0, DeepSeek 禁用 thinking)
- 理论依据: Hashemi et al., ACL 2024,锚定比对偏差 ≤3 分 vs 裸判 8-15 分

**改动位置**:
- 评分规则段: 维度1-7 从"打 1-10 分"改为"锚定比对"
- 新增锚定评分协议段 (评分步骤 + 置信度出口 + 维度8 例外)
- Phase 1 基线评估: 新增步骤 2-5(读锚定库 → 比对 → 结构化输出 → 交叉验证)
- Phase 2 优化循环: 步骤 4 标注"锚定比对"
- 约束规则: 新增 #8

---

## P1: 维度1 Frontmatter 规则化

**问题**: 维度1 (Frontmatter 质量,权重8) 靠 LLM 主观评分——name 格式、
description 长度、version 字段这些是可确定性判断的,不应消耗 LLM tokens
也不应引入随机性。skill-evaluator 的 check_metadata.py 已验证此方案。

**修复**:
- 锚定库中维度1 从"3档锚定示例"改为"确定性检查清单"
- name 格式: 正则 `^[a-z0-9][a-z0-9-]*[a-z0-9]$` + 长度3-64 + 通用名黑名单
- description 质量: "做什么"+"何时用"+"触发词"三要素 + ≤1024字符
- version + license: semver 格式 + 字段存在性
- 每项明确分数档 (3/2/1/0),LLM 仅兜底(规则无法判断时)

**改动位置**:
- references/anchor-library/dimension-anchors.md: 维度1 重写
- SKILL.md 评分规则: 新增"维度1 例外"标注

---

## P2: TEHC 四组件盲区补齐

**背景**: TEHC 模型 (Zhou et al., arXiv 2605.07358) 将 Skill 解剖为
Trigger/Execution/Heuristics/Completion 四组件。Darwin 8 维覆盖不完整:

| TEHC 组件 | 原覆盖 | 盲区 |
|-----------|--------|------|
| H-Heuristics | 维度3只评"有无异常表" | 不评异常质量(是否具体/可操作) |
| C-Completion | 维度4只评"有无确认点" | 缺失可程序化验证条件 |
| T-Trigger | 维度1只评正向触发 | 缺失负触发(何时不应激活) |

**修复**:
- H 质量: 维度3 高档锚定示例增加反模式警示 + 异常具体性判断标准
- C 自动验证: 维度4 高档锚定示例增加可程序化完成条件 (exit code/lint/文件存在)
- 负触发: 维度1 新增补充检查"何时不应使用此 skill"
- 新增 TEHC 四组件覆盖映射表

**改动位置**:
- references/anchor-library/dimension-anchors.md: 维度1/3/4 重写 + 新增 TEHC 映射表

---

## 新增文件

### references/anchor-library/dimension-anchors.md (300+ 行)

```
## 维度 1: Frontmatter 质量 — 优先规则化检查
[确定性检查清单: name格式(3分) + description质量(3分) + version+license(2分)]
[LLM 锚定兜底]
[负触发条件补充检查]

## 维度 2: 工作流清晰度
[3档锚定示例: 高档(有序号+输入输出) / 中档(有步骤但模糊) / 低档(无结构)]

## 维度 3: 边界条件覆盖 — 含 H 质量判断
[高档: 异常表格+反模式警示] / [中档: 笼统处理] / [低档: 全无]

## 维度 4: 检查点设计 — 含 C 自动验证
[高档: 确认点+自动验证条件] / [中档: 简单确认] / [低档: 全自主]

## 维度 5: 指令具体性
## 维度 6: 资源整合度
## 维度 7: 整体架构
## 维度 8: 实测表现 (不适用锚定)

## 使用方式 (含维度1特殊处理)
## TEHC 四组件覆盖映射
```

---

## 本地 hermes 版同步状态

本地 `~/.hermes/skills/darwin-skill/SKILL.md` 已包含:
- P0 锚定评分协议
- P1 维度1 规则化标注
- P2 TEHC 相关改动

本地额外保留(不在上游 fork 中):
- 已知限制与社区反馈段
- 大规模批量评估段
- Hermes Agent 路径适配
- DeepSeek reasoning_content 异常处理
- Obsidian 持久化指南
- 与 skill-evaluator 关系说明
- 15 个 references/ 文件 (llm-rubric-anchoring.md 等)

锚定库已同步: `~/.hermes/skills/darwin-skill/references/anchor-library/dimension-anchors.md`
53 changes: 47 additions & 6 deletions SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,45 @@ autoresearch 的精髓:
| 8 | **实测表现** | 25 | 用测试prompt跑一遍,输出质量是否符合skill宣称的能力 |

### 评分规则
- 维度1-7:每个维度打 1-10 分,乘以权重得到该维度得分
- 维度8(实测表现):跑2-3个测试prompt,按输出质量打1-10分
- 维度1-7:使用 **锚定比对** 评分(非自由打分)——每个维度先读 `references/anchor-library/dimension-anchors.md` 中的 3 档锚定示例,判断目标与哪个档位最接近,在该档位范围内给分
- **维度1 例外**:Frontmatter 质量优先使用锚定库中的确定性检查清单(name格式/description质量/version+license),只在规则无法判断时才用 LLM 锚定兜底
- 维度8(实测表现):跑2-3个测试prompt后按输出质量打分(不适用锚定比对)
- **总分 = Σ(维度分 × 权重) / 10**,满分100
- 改进后总分必须 **严格高于** 改进前才保留

### 锚定评分协议

**为什么用锚定评分**:LLM 自由打分偏差 8-15 分,锚定比对可压缩到 ≤3 分(来源:Hashemi et al., ACL 2024)。Darwin 原版使用的"1-10 裸判"是评分不一致的根因。

**评分步骤**(维度 1-7 每个维度重复):

```
1. 读锚定示例 — 打开 references/anchor-library/dimension-anchors.md
找到目标维度的 3 档锚定(高档 8-10 / 中档 4-7 / 低档 1-3)

2. 比对匹配 — 判断目标 skill 与哪个档位的锚定示例最接近
不是"你认为应该有几分",而是"它最像哪个锚定示例"

3. 档内给分 — 在匹配档位的范围内给出具体分数
如果介于两档之间,选更接近的一档,然后在档内微调

4. 输出结构化结果:
{
"dimension": 1,
"matched_level": "high",
"score": 9,
"confidence": "high",
"rationale": "匹配高档锚定的三个特征:name规范、description含触发词、有完整metadata"
}
```

**置信度出口**:confidence: low 时自动触发 2 模型交叉验证。第二个模型也低置信度 → 降级为人工评审。

**维度 8 例外**:实测表现维度不适用锚定比对——保留原方案,用测试 prompt 跑子 agent 后按输出质量对比评分。但评分时同样避免裸判 1-10,改用以下结构化判断:
- 8-10:skill 显著提升输出(更完整/更准确/更符合期望格式)
- 4-7:有提升但不明显,或部分场景有效
- 1-3:带 skill 比不带还差(过度约束/误导性指令)

### 关于「实测表现」维度

这是与纯结构评分最大的区别。评分方式:
Expand Down Expand Up @@ -102,9 +136,15 @@ for each skill:
```
for each skill in 优化范围:

# 结构评分(主agent可以做
# 结构评分(锚定比对
1. 读取 SKILL.md 全文
2. 按维度1-7逐项打分(附简短理由)
2. 读取 references/anchor-library/dimension-anchors.md 锚定库
3. 按维度1-7逐项锚定比对:
- 读该维度的 3 档锚定示例
- 判断目标与哪个档位最接近
- 输出结构化结果: {dimension, matched_level, score, confidence, rationale}
4. 如果任一维度 confidence: low → 用第二个模型交叉验证
5. 如果第二个模型也 low → 标记该维度为 "manual_review"

# 效果评分(用子agent做,独立于主agent)
3. 对每个测试prompt,spawn子agent:
Expand Down Expand Up @@ -157,8 +197,8 @@ for each skill:
编辑 SKILL.md
git add + commit(message: "optimize {skill}: {改进摘要}")

# Step 4: 重新评估
- 结构维度:主agent重新打分
# Step 4: 重新评估(锚定比对)
- 结构维度:读取锚定库,按锚定比对重新打分(禁止直接对比前后分数)
- 效果维度:spawn独立子agent重跑测试prompt(关键!不能自己评自己)

# Step 5: 决策
Expand Down Expand Up @@ -297,6 +337,7 @@ timestamp commit skill old_score new_score status dimension note eval_mode
5. **尊重花叔风格** — 中文为主、简洁为上
6. **可回滚** — 所有改动在git分支上,用git revert而非reset --hard
7. **评分独立性** — 效果维度必须用子agent或至少干跑验证,不能在同一上下文里「改完直接评」
8. **强制锚定评分** — 维度1-7必须使用 `references/anchor-library/dimension-anchors.md` 锚定比对,严禁自由打分 1-10。temperature=0 + DeepSeek 系列必须禁用 thinking。confidence: low 时自动触发 2 模型交叉验证。结构评分全程禁止「凭感觉打分」。

---

Expand Down
Loading