oh-my-knowledge 0.25.1 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -366
- package/README.zh.md +148 -395
- package/dist/src/analysis/report-diagnostics.d.ts +1 -1
- package/dist/src/analysis/report-diagnostics.js +1 -1
- package/dist/src/analysis/sample-diagnostics.d.ts +2 -2
- package/dist/src/analysis/sample-diagnostics.js +2 -2
- package/dist/src/authoring/generator.d.ts.map +1 -1
- package/dist/src/authoring/generator.js +9 -8
- package/dist/src/authoring/generator.js.map +1 -1
- package/dist/src/cli/cli-exit.d.ts +15 -0
- package/dist/src/cli/cli-exit.d.ts.map +1 -0
- package/dist/src/cli/cli-exit.js +19 -0
- package/dist/src/cli/cli-exit.js.map +1 -0
- package/dist/src/cli/commands/_shared.d.ts +12 -0
- package/dist/src/cli/commands/_shared.d.ts.map +1 -0
- package/dist/src/cli/commands/_shared.js +26 -0
- package/dist/src/cli/commands/_shared.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +2 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +137 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/eval-debias.d.ts +2 -0
- package/dist/src/cli/commands/eval-debias.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-debias.js +88 -0
- package/dist/src/cli/commands/eval-debias.js.map +1 -0
- package/dist/src/cli/commands/eval-gold.d.ts +2 -0
- package/dist/src/cli/commands/eval-gold.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-gold.js +137 -0
- package/dist/src/cli/commands/eval-gold.js.map +1 -0
- package/dist/src/cli/commands/eval-runner.d.ts +2 -0
- package/dist/src/cli/commands/eval-runner.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-runner.js +299 -0
- package/dist/src/cli/commands/eval-runner.js.map +1 -0
- package/dist/src/cli/commands/eval.d.ts +2 -0
- package/dist/src/cli/commands/eval.d.ts.map +1 -0
- package/dist/src/cli/commands/eval.js +16 -0
- package/dist/src/cli/commands/eval.js.map +1 -0
- package/dist/src/cli/commands/export-diff.d.ts +2 -0
- package/dist/src/cli/commands/export-diff.d.ts.map +1 -0
- package/dist/src/cli/commands/export-diff.js +177 -0
- package/dist/src/cli/commands/export-diff.js.map +1 -0
- package/dist/src/cli/commands/export-saturation.d.ts +2 -0
- package/dist/src/cli/commands/export-saturation.d.ts.map +1 -0
- package/dist/src/cli/commands/export-saturation.js +59 -0
- package/dist/src/cli/commands/export-saturation.js.map +1 -0
- package/dist/src/cli/commands/export-verdict.d.ts +2 -0
- package/dist/src/cli/commands/export-verdict.d.ts.map +1 -0
- package/dist/src/cli/commands/export-verdict.js +45 -0
- package/dist/src/cli/commands/export-verdict.js.map +1 -0
- package/dist/src/cli/commands/export.d.ts +2 -0
- package/dist/src/cli/commands/export.d.ts.map +1 -0
- package/dist/src/cli/commands/export.js +150 -0
- package/dist/src/cli/commands/export.js.map +1 -0
- package/dist/src/cli/commands/improve-failures.d.ts +2 -0
- package/dist/src/cli/commands/improve-failures.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-failures.js +59 -0
- package/dist/src/cli/commands/improve-failures.js.map +1 -0
- package/dist/src/cli/commands/improve-plan.d.ts +2 -0
- package/dist/src/cli/commands/improve-plan.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-plan.js +75 -0
- package/dist/src/cli/commands/improve-plan.js.map +1 -0
- package/dist/src/cli/commands/improve-samples.d.ts +2 -0
- package/dist/src/cli/commands/improve-samples.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-samples.js +120 -0
- package/dist/src/cli/commands/improve-samples.js.map +1 -0
- package/dist/src/cli/commands/improve-skill.d.ts +2 -0
- package/dist/src/cli/commands/improve-skill.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-skill.js +115 -0
- package/dist/src/cli/commands/improve-skill.js.map +1 -0
- package/dist/src/cli/commands/improve.d.ts +2 -0
- package/dist/src/cli/commands/improve.d.ts.map +1 -0
- package/dist/src/cli/commands/improve.js +34 -0
- package/dist/src/cli/commands/improve.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +2 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -0
- package/dist/src/cli/commands/init.js +110 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/observe.d.ts +2 -0
- package/dist/src/cli/commands/observe.d.ts.map +1 -0
- package/dist/src/cli/commands/observe.js +77 -0
- package/dist/src/cli/commands/observe.js.map +1 -0
- package/dist/src/cli/commands/registry.d.ts +11 -0
- package/dist/src/cli/commands/registry.d.ts.map +1 -0
- package/dist/src/cli/commands/registry.js +42 -0
- package/dist/src/cli/commands/registry.js.map +1 -0
- package/dist/src/cli/commands/studio.d.ts +2 -0
- package/dist/src/cli/commands/studio.d.ts.map +1 -0
- package/dist/src/cli/commands/studio.js +76 -0
- package/dist/src/cli/commands/studio.js.map +1 -0
- package/dist/src/cli/coverage-renderer.d.ts +1 -1
- package/dist/src/cli/coverage-renderer.js +1 -1
- package/dist/src/cli/i18n-dict.d.ts +4 -4
- package/dist/src/cli/i18n-dict.d.ts.map +1 -1
- package/dist/src/cli/i18n-dict.js +613 -581
- package/dist/src/cli/i18n-dict.js.map +1 -1
- package/dist/src/cli/index.js +43 -1487
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/parse-run-config.d.ts +3 -4
- package/dist/src/cli/parse-run-config.d.ts.map +1 -1
- package/dist/src/cli/parse-run-config.js +5 -5
- package/dist/src/cli/parse-run-config.js.map +1 -1
- package/dist/src/cli/parse-strict.d.ts +0 -13
- package/dist/src/cli/parse-strict.d.ts.map +1 -1
- package/dist/src/cli/parse-strict.js +2 -1
- package/dist/src/cli/parse-strict.js.map +1 -1
- package/dist/src/cli/run-tally.d.ts +18 -0
- package/dist/src/cli/run-tally.d.ts.map +1 -0
- package/dist/src/cli/run-tally.js +31 -0
- package/dist/src/cli/run-tally.js.map +1 -0
- package/dist/src/doctor/index.d.ts +2 -2
- package/dist/src/doctor/index.d.ts.map +1 -1
- package/dist/src/doctor/index.js +19 -5
- package/dist/src/doctor/index.js.map +1 -1
- package/dist/src/doctor/preflight.d.ts +2 -2
- package/dist/src/doctor/preflight.js +2 -2
- package/dist/src/doctor/rules.d.ts +1 -1
- package/dist/src/doctor/rules.d.ts.map +1 -1
- package/dist/src/doctor/rules.js +49 -9
- package/dist/src/doctor/rules.js.map +1 -1
- package/dist/src/eval-core/dependency-checker.d.ts +9 -3
- package/dist/src/eval-core/dependency-checker.d.ts.map +1 -1
- package/dist/src/eval-core/dependency-checker.js +16 -29
- package/dist/src/eval-core/dependency-checker.js.map +1 -1
- package/dist/src/eval-core/fact-checker.js +1 -1
- package/dist/src/eval-core/fact-checker.js.map +1 -1
- package/dist/src/eval-core/layer-gates.d.ts +1 -1
- package/dist/src/eval-core/layer-gates.js +1 -1
- package/dist/src/eval-core/verdict.d.ts +4 -4
- package/dist/src/eval-core/verdict.d.ts.map +1 -1
- package/dist/src/eval-core/verdict.js +2 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts +15 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts.map +1 -1
- package/dist/src/eval-workflows/batch-evaluation-workflow.js +13 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.js.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts +6 -3
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.js +10 -9
- package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.d.ts +1 -1
- package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.js +14 -7
- package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
- package/dist/src/executors/script.d.ts.map +1 -1
- package/dist/src/executors/script.js +16 -3
- package/dist/src/executors/script.js.map +1 -1
- package/dist/src/grading/debias-validate.d.ts +2 -2
- package/dist/src/grading/debias-validate.js +2 -2
- package/dist/src/grading/gold-cli.d.ts +2 -5
- package/dist/src/grading/gold-cli.d.ts.map +1 -1
- package/dist/src/grading/gold-cli.js +4 -8
- package/dist/src/grading/gold-cli.js.map +1 -1
- package/dist/src/grading/judge.d.ts +1 -1
- package/dist/src/renderer/html-renderer.js +1 -1
- package/dist/src/renderer/layout.js +5 -5
- package/dist/src/renderer/layout.js.map +1 -1
- package/dist/src/renderer/skill-health-renderer.d.ts +1 -1
- package/dist/src/renderer/skill-health-renderer.js +1 -1
- package/dist/src/renderer/summary.js +8 -8
- package/dist/src/server/report-server.d.ts +1 -0
- package/dist/src/server/report-server.d.ts.map +1 -1
- package/dist/src/server/report-server.js +40 -6
- package/dist/src/server/report-server.js.map +1 -1
- package/dist/src/types/doctor.d.ts +28 -6
- package/dist/src/types/doctor.d.ts.map +1 -1
- package/dist/src/types/doctor.js +3 -1
- package/dist/src/types/doctor.js.map +1 -1
- package/dist/src/types/eval.d.ts +1 -1
- package/dist/src/types/report.d.ts +1 -1
- package/package.json +1 -1
package/README.zh.md
CHANGED
|
@@ -8,44 +8,27 @@
|
|
|
8
8
|
|
|
9
9
|
[English](./README.md) | **简体中文**
|
|
10
10
|
|
|
11
|
-
**omk** — 你给 LLM
|
|
12
|
-
omk
|
|
11
|
+
**omk** — 你给 LLM 的知识,价值在哪里?
|
|
12
|
+
omk 帮你用客观数据回答,而不是凭感觉。
|
|
13
13
|
|
|
14
|
-
**面向 LLM 知识输入(prompt / RAG / skill / agent)的评测框架** ——
|
|
14
|
+
**面向 LLM 知识输入(prompt / RAG / skill / agent)的评测框架** —— 固定模型,只变知识载体。
|
|
15
15
|
|
|
16
16
|
<a id="statistical-rigor"></a>
|
|
17
|
-
>
|
|
17
|
+
> 默认带:Bootstrap 置信区间 · Krippendorff α(评委 ↔ 人工)· 长度去偏 · 饱和曲线 · 用例隔离(construct validity)。[这些为什么重要 →](docs/zh/statistical-rigor.md)
|
|
18
18
|
|
|
19
19
|

|
|
20
20
|
|
|
21
21
|
## 快速开始
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
# 安装
|
|
25
24
|
npm i oh-my-knowledge -g
|
|
26
|
-
|
|
27
|
-
#
|
|
28
|
-
omk
|
|
29
|
-
cd my-eval
|
|
30
|
-
|
|
31
|
-
# 把要对比的 artifact 放到 skills/ 目录
|
|
32
|
-
# 方式一:直接放 .md 文件(skills/v1.md, skills/v2.md)
|
|
33
|
-
# 方式二:放完整 artifact 目录(skills/my-skill-v1/SKILL.md, ...)
|
|
34
|
-
# 只放一个 artifact 也行,会自动加 baseline 对照
|
|
35
|
-
|
|
36
|
-
# 预览评测计划
|
|
37
|
-
omk bench run --dry-run
|
|
38
|
-
|
|
39
|
-
# 运行评测(自动发现 skills/ 目录下的所有 artifact)
|
|
40
|
-
omk bench run # → 5 分钟出 HTML 报告 + verdict
|
|
41
|
-
# (omk doctor 和 LLM 连通性检测都是强制前置门禁;
|
|
42
|
-
# --skip-connectivity 可跳连通性,doctor 无 skip flag)
|
|
43
|
-
|
|
44
|
-
# CLI 输出语言: zh (默认) / en — flag 优先级高于环境变量
|
|
45
|
-
omk bench run --lang en
|
|
46
|
-
OMK_LANG=en omk bench report
|
|
25
|
+
omk init my-eval && cd my-eval
|
|
26
|
+
# 编辑 skills/code-review-v1/SKILL.md 和 skills/code-review-v2/SKILL.md,填入你的两版内容
|
|
27
|
+
omk eval --control code-review-v1 --treatment code-review-v2 # → 5 分钟出 HTML 报告 + verdict
|
|
47
28
|
```
|
|
48
29
|
|
|
30
|
+
深入:[在 Claude Code / Codex 中调用](#在-ai-coding-agent-中使用) · [`omk eval` 全 flag](#omk-eval) · [artifact 目录结构](#artifact-目录结构) · [`--lang` / `OMK_LANG`](#环境变量)
|
|
31
|
+
|
|
49
32
|
## 在 AI Coding Agent 中使用
|
|
50
33
|
|
|
51
34
|
### 在 Claude Code 中使用
|
|
@@ -54,8 +37,8 @@ OMK_LANG=en omk bench report
|
|
|
54
37
|
|
|
55
38
|
```bash
|
|
56
39
|
/omk eval # 评测当前项目的 artifact
|
|
57
|
-
/omk
|
|
58
|
-
/omk
|
|
40
|
+
/omk improve skill # 自动迭代改进 artifact
|
|
41
|
+
/omk improve samples # 生成评测用例
|
|
59
42
|
```
|
|
60
43
|
|
|
61
44
|
或直接说"帮我评测 v1 和 v2 的差异"、"改进一下这个 artifact",omk 会自动理解意图并调用对应命令。
|
|
@@ -65,33 +48,33 @@ OMK_LANG=en omk bench report
|
|
|
65
48
|
Codex 默认不支持 `/omk ...` 这种 Claude Code 风格的 slash command。通常直接让 agent 执行 `omk` CLI,例如:
|
|
66
49
|
|
|
67
50
|
```bash
|
|
68
|
-
omk
|
|
69
|
-
omk
|
|
70
|
-
omk
|
|
51
|
+
omk eval
|
|
52
|
+
omk improve skill skills/my-skill.md
|
|
53
|
+
omk improve samples skills/my-skill.md
|
|
71
54
|
```
|
|
72
55
|
|
|
73
|
-
也可以直接用自然语言描述目标,例如"比较 v1 和 v2 的评测差异"、"为这个 skill
|
|
56
|
+
也可以直接用自然语言描述目标,例如"比较 v1 和 v2 的评测差异"、"为这个 skill 生成评测用例"。
|
|
74
57
|
|
|
75
58
|
## 为什么需要这个工具
|
|
76
59
|
|
|
77
|
-
做知识工程的团队会产出大量知识载体(当前常见是 skill,也包括 prompt、agent、workflow 等)。当被问到"v2 比 v1 好在哪"时,需要客观数据而非主观判断。`oh-my-knowledge`
|
|
60
|
+
做知识工程的团队会产出大量知识载体(当前常见是 skill,也包括 prompt、agent、workflow 等)。当被问到"v2 比 v1 好在哪"时,需要客观数据而非主观判断。`oh-my-knowledge` 通过控制变量实验解决这个问题:相同模型、相同评测用例,只改变知识载体。
|
|
78
61
|
|
|
79
62
|
## 核心能力
|
|
80
63
|
|
|
81
|
-
- **评测前置健康检查** — `omk doctor` 在 `
|
|
64
|
+
- **评测前置健康检查** — `omk doctor` 在 `omk eval` 之前**强制**运行,检查 skill 可读性、元数据合法性、依赖完整性、samples 契约——纯静态零 LLM 调用,类比 SE 工具栈的 lint + typecheck。executor / judge 连通性是独立阶段,可用 `--skip-connectivity` 单独跳过
|
|
82
65
|
- **控制变量离线评测** — 固定模型和用例,只变知识载体;兼容 Claude Code skill、CLAUDE.md prompt、RAG 知识库等任何 markdown 形式的指令
|
|
83
66
|
- **六维独立打分** — Fact / Behavior / LLM-judge / Cost / Efficiency / Stability 分别出信号,单一维度的回退不会被其他维度的收益掩盖
|
|
84
67
|
- **线上 session 观测** — 解析 Claude Code session JSONL,在真实用户会话上测量各 skill 的失败率、耗时、token 成本和知识缺口信号
|
|
85
|
-
- **知识缺口识别** — 严重度加权的信号(显式标记 / 搜索失败 / hedging 用语 /
|
|
86
|
-
- **合并前 CI 门** — `omk
|
|
87
|
-
- **一行 ship/no-ship 结论** — `omk
|
|
68
|
+
- **知识缺口识别** — 严重度加权的信号(显式标记 / 搜索失败 / hedging 用语 / 反复失败)量化风险敞口,不宣称完备性
|
|
69
|
+
- **合并前 CI 门** — `omk eval` 强制三层 all-pass(fact + behavior + llm-judge),抓复合分掩盖的单层回退
|
|
70
|
+
- **一行 ship/no-ship 结论** — `omk eval` 聚合 bootstrap CI / 三层 ci-gate / saturation / human α,给六档 verdict(PROGRESS / CAUTIOUS / REGRESS / NOISE / UNDERPOWERED / SOLO)+ 行动建议;exit code 反映是否可 ship
|
|
88
71
|
|
|
89
72
|
## 为什么选 omk
|
|
90
73
|
|
|
91
74
|
| | omk | promptfoo | DeepEval | LangSmith |
|
|
92
75
|
|--|--|--|--|--|
|
|
93
76
|
| Bootstrap 置信区间 | ✓ 默认 | ✗ | ✗ | ✗ |
|
|
94
|
-
| Krippendorff
|
|
77
|
+
| Krippendorff α(评委 ↔ 人工) | ✓ 默认 | ✗ | ✗ | ✗ |
|
|
95
78
|
| 长度去偏的评委 prompt | ✓ 默认 | ✗ | ✗ | ✗ |
|
|
96
79
|
| 饱和曲线 | ✓ | ✗ | ✗ | ✗ |
|
|
97
80
|
| 三层独立评分 | ✓ | ✗ | 部分 | ✗ |
|
|
@@ -99,25 +82,25 @@ omk bench gen-samples skills/my-skill.md
|
|
|
99
82
|
| 原生 Claude Code skill | ✓ | ✗ | ✗ | ✗ |
|
|
100
83
|
| 托管 SaaS 看板 | ✗ | ✗ | ✓ | ✓ |
|
|
101
84
|
|
|
102
|
-
omk 的护城河是 **default-on 安全网** —— Bootstrap CI / 评委 ↔ 人工 α / 长度去偏不是 advanced flag
|
|
85
|
+
omk 的护城河是 **default-on 安全网** —— Bootstrap CI / 评委 ↔ 人工 α / 长度去偏不是 advanced flag,是默认行为。其他工具让你**手动**接置信区间;omk 让你**默认无法忽略**它。需要 SaaS 看板?选 LangSmith。要快速 prompt 迭代不要统计层?选 promptfoo。**要发到生产且会被问"为什么应该相信这个数字"?选 omk。**
|
|
103
86
|
|
|
104
|
-
RAG 专项评测请看 RAGAS
|
|
87
|
+
RAG 专项评测请看 RAGAS(独立 niche,跟 omk 互补)。完整对比(7 个工具 × 25+ 维度): [docs/zh/comparison.md](docs/zh/comparison.md)
|
|
105
88
|
|
|
106
89
|
## 特性
|
|
107
90
|
|
|
108
91
|
| 特性 | 说明 |
|
|
109
92
|
|------|------|
|
|
110
|
-
| **Verdict 一行结论** | `omk
|
|
93
|
+
| **Verdict 一行结论** | `omk eval` 六档判定 + ship 建议 + exit code 路由,与 HTML 报告 verdict pill 共享规则 |
|
|
111
94
|
| **六维评估** | 事实 / 行为 / LLM 评价 / 成本 / 效率 / 稳定性独立展示 |
|
|
112
95
|
| **多执行器** | 支持 Claude CLI / Claude SDK / Codex CLI / Codex SDK / OpenAI / Gemini 及自定义命令 |
|
|
113
96
|
| **21+ 种断言** | 包含子串、正则、JSON Schema、ROUGE/BLEU/Levenshtein 相似度、Agent 工具调用、语义相似度、自定义函数等 |
|
|
114
97
|
| **统计严谨性** | Bootstrap CI / Krippendorff α / 长度去偏 / 饱和曲线 —— 全部默认开。[详情 →](docs/zh/statistical-rigor.md) |
|
|
115
|
-
| **用例质量诊断** | `omk
|
|
116
|
-
| **失败聚类 + 根因** | `omk
|
|
117
|
-
| **RAG metrics** | `faithfulness` / `answer_relevancy` / `context_recall` 三 metric — 反幻觉 + 切题度 + context
|
|
118
|
-
| **预算硬阈值** | `--budget-usd / --budget-per-sample-usd / --budget-per-sample-ms` 总成本 +
|
|
119
|
-
| **用例隔离 (construct validity)** | `--strict-baseline`
|
|
120
|
-
| **用例设计科学性 (sample design science)** | Sample schema 加 `capability` / `difficulty` / `construct` / `provenance`
|
|
98
|
+
| **用例质量诊断** | `omk improve <id>` 7 类 issue(区分度低 / 重复 / 歧义 / 成本异常 / 全 fail 等)+ healthScore 0-100 |
|
|
99
|
+
| **失败聚类 + 根因** | `omk improve failures <id>` 单 LLM 调用聚类失败用例 + 每 cluster 给修复建议 |
|
|
100
|
+
| **RAG metrics** | `faithfulness` / `answer_relevancy` / `context_recall` 三 metric — 反幻觉 + 切题度 + context 覆盖,自动继承长度去偏 |
|
|
101
|
+
| **预算硬阈值** | `--budget-usd / --budget-per-sample-usd / --budget-per-sample-ms` 总成本 + 单用例成本/耗时上限,超出中止保留 partial report |
|
|
102
|
+
| **用例隔离 (construct validity)** | `--strict-baseline` (默认开) 三堵 baseline 拿到被测 skill 的污染路径:(1) SDK skill auto-discovery (2) subagent Skill 工具调用 (3) cwd 文件系统(避免 baseline 顺 `skills/<name>/` symlink 直接 Read 到 SKILL.md)。eval.yaml `allowedSkills` 支持 per-variant 白名单 |
|
|
103
|
+
| **用例设计科学性 (sample design science)** | Sample schema 加 `capability` / `difficulty` / `construct` / `provenance` 元数据字段(HF Dataset Cards 风)。`omk improve` 输出 coverage 分桶 + 检测 `rubric_clarity_low` / `capability_thin` 两类新 issue。`omk improve samples` 自动给生成的用例打 provenance。详见 [docs/sample-design-spec.md](docs/sample-design-spec.md),含 8 条行业 gap(HELM / MMLU-Pro / Construct Validity / IRT / Dataset Cards / Adversarial)的 omk v1 映射 |
|
|
121
104
|
| **多评委 ensemble** | `--judge-models claude:opus,openai:gpt-4o` 跨厂商评分 + agreement 度量 |
|
|
122
105
|
| **MCP URL 获取** | 通过 MCP Server 获取私有文档 URL 内容(SSO 保护的知识库等) |
|
|
123
106
|
| **盲测 A/B** | `--blind` 隐藏变体名称,HTML 报告有揭晓按钮 |
|
|
@@ -130,7 +113,7 @@ RAG 专项评测请看 RAGAS(独立 niche,跟 omk 互补)。完整对比(7 个
|
|
|
130
113
|
|
|
131
114
|
## 工作原理
|
|
132
115
|
|
|
133
|
-
|
|
116
|
+
核心思路:**固定模型 + 固定样本,只变 artifact 和 runtime context**,通过交错调度消除时间漂移,用断言 + LLM 评委双通道评分,再叠加知识缺口信号量化风险敞口。
|
|
134
117
|
|
|
135
118
|
```mermaid
|
|
136
119
|
flowchart TD
|
|
@@ -185,12 +168,12 @@ flowchart TD
|
|
|
185
168
|
G --> R
|
|
186
169
|
```
|
|
187
170
|
|
|
188
|
-
|
|
171
|
+
**关键设计:**
|
|
189
172
|
|
|
190
|
-
-
|
|
191
|
-
- **variant = artifact + runtime context
|
|
192
|
-
-
|
|
193
|
-
-
|
|
173
|
+
- **交错调度**消除时间漂移:同一样本的不同 variant 交替发出,而非 v1 全跑完再跑 v2,避免模型负载/网络波动被错误归因给 artifact。
|
|
174
|
+
- **variant = artifact + runtime context**:`name@cwd` 让对照组可以显式声明"项目目录"这个隐性输入,把"项目级沉淀"和"显式 artifact 注入"拆开测。
|
|
175
|
+
- **双通道评分互补**:断言抓确定性缺陷(必须调用某工具/必须包含某字段),LLM 评委抓主观质量(可读性/完整性),两者都存在时取均值。
|
|
176
|
+
- **知识缺口信号**不是评分的一部分,而是一个独立追踪项:它告诉你"这次评测覆盖了多少风险敞口",用于追踪收敛,而非断言知识"完备"。
|
|
194
177
|
|
|
195
178
|
## 评测样本格式
|
|
196
179
|
|
|
@@ -244,7 +227,7 @@ flowchart TD
|
|
|
244
227
|
```json
|
|
245
228
|
{
|
|
246
229
|
"sample_id": "s001",
|
|
247
|
-
"prompt": "请根据以下 PRD
|
|
230
|
+
"prompt": "请根据以下 PRD 文档生成评测用例:https://wiki.example.com/prd/feature-x"
|
|
248
231
|
}
|
|
249
232
|
```
|
|
250
233
|
|
|
@@ -321,10 +304,10 @@ flowchart TD
|
|
|
321
304
|
| `rouge_n_min` | ROUGE-N recall ≥ threshold(`reference` 字段填参考答案,`n` 默认 1,`threshold` 默认 0.5) |
|
|
322
305
|
| `levenshtein_max` | 编辑距离 ≤ value(用于"输出跟参考几乎一致"场景) |
|
|
323
306
|
| `bleu_min` | BLEU-4 ≥ threshold(unsmoothed,短文本会塌陷到 0) |
|
|
324
|
-
| `faithfulness` | 输出是否被 `sample.context`
|
|
325
|
-
| `answer_relevancy` | 输出是否切题回答 `sample.prompt
|
|
326
|
-
| `context_recall` | `sample.context`
|
|
327
|
-
| `semantic_similarity` | LLM 语义相似度(与 reference
|
|
307
|
+
| `faithfulness` | 输出是否被 `sample.context` 支持(反幻觉);LLM judge 1-5 评分,threshold 默认 3 |
|
|
308
|
+
| `answer_relevancy` | 输出是否切题回答 `sample.prompt`;能抓住跑题、回避、冗余;threshold 默认 3 |
|
|
309
|
+
| `context_recall` | `sample.context` 关键事实在输出中的覆盖率;`reference` 可显式指定 gold facts;threshold 默认 3 |
|
|
310
|
+
| `semantic_similarity` | LLM 语义相似度(与 reference 的整体相似度,与 RAG 三 metric 互补) |
|
|
328
311
|
| `custom` | 自定义 JS 函数(30s 超时) |
|
|
329
312
|
|
|
330
313
|
**通用修饰:**
|
|
@@ -363,7 +346,7 @@ export default function(output, { sample, assertion }) {
|
|
|
363
346
|
|
|
364
347
|
## 六维评估指标
|
|
365
348
|
|
|
366
|
-
|
|
349
|
+
评测报告从六个维度独立展示结果。其中评分三层(事实 / 行为 / LLM 评价)分开展示,让你看到**是哪一层拉胯**,而不是只看到一个合成分:
|
|
367
350
|
|
|
368
351
|
| 维度 | 指标 | 说明 |
|
|
369
352
|
|------|------|------|
|
|
@@ -376,343 +359,113 @@ export default function(output, { sample, assertion }) {
|
|
|
376
359
|
|
|
377
360
|
## CLI 参考
|
|
378
361
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
```bash
|
|
382
|
-
omk bench run [选项]
|
|
383
|
-
|
|
384
|
-
选项:
|
|
385
|
-
--samples <路径> 样本文件(默认:eval-samples.json,自动检测 .yaml/.yml)
|
|
386
|
-
--skill-dir <路径> artifact 目录(默认:skills)
|
|
387
|
-
--control <expr> 对照组变体表达式(experiment role = control)
|
|
388
|
-
--treatment <v1,v2> 实验组变体表达式,逗号分隔
|
|
389
|
-
除非用 --config 或 --batch,--control / --treatment 两者至少传一个
|
|
390
|
-
特殊值:baseline(空 artifact)、git:name(git 历史版本)、
|
|
391
|
-
git:ref:name(指定 commit)、含 / 的路径(直接读取文件)
|
|
392
|
-
--config <路径> YAML/JSON 配置文件(evaluation-as-code);在一个文件里声明
|
|
393
|
-
samples + variants + model + executor;CLI 参数会覆盖 config
|
|
394
|
-
--model <名称> 被测模型(默认:sonnet)
|
|
395
|
-
--judge-models <list> 评委配置;1 条 = 单评委 (默认 claude:haiku),
|
|
396
|
-
≥ 2 条 = ensemble。格式 `executor:model[,executor:model]`
|
|
397
|
-
--output-dir <路径> 输出目录(默认:~/.oh-my-knowledge/reports/)
|
|
398
|
-
--no-judge 跳过 LLM 评分
|
|
399
|
-
--no-cache 禁用结果缓存(默认开启,相同输入自动复用)
|
|
400
|
-
--dry-run 仅预览
|
|
401
|
-
--blind 盲测模式
|
|
402
|
-
--concurrency <n> 并行任务数(默认:1)
|
|
403
|
-
--timeout <秒> 单个任务的执行器超时时间(默认:120)
|
|
404
|
-
--repeat <n> 重复 N 次做方差分析(默认:1)
|
|
405
|
-
--executor <名称> 执行器(默认:claude),支持自定义命令
|
|
406
|
-
--skip-connectivity 跳过评测前 LLM 连通性检测(doctor 仍然强制执行,无 skip flag)。
|
|
407
|
-
--resume 时自动跳过(原 run 已验过连通性)。
|
|
408
|
-
--mcp-config <路径> MCP 配置文件,用于通过 MCP Server 获取私有文档 URL 内容
|
|
409
|
-
(默认:当前目录的 .mcp.json)
|
|
410
|
-
--no-serve 评测完成后不自动启动报告服务
|
|
411
|
-
--verbose 打印每个样本的详细执行结果(耗时、tokens、输出预览)
|
|
412
|
-
--batch 批量评测:每个 artifact 独立和 baseline 对比
|
|
413
|
-
需要每个 artifact 配对 {name}.eval-samples.json
|
|
414
|
-
--judge-repeat <n> 每条 sample × dimension 跑 LLM 评委 N 次,输出 stddev (评委自一致性)
|
|
415
|
-
--bootstrap 启用 distribution-free CI:每个 variant 加 bootstrap CI,
|
|
416
|
-
pairwise diff CI 含 0 = 不显著
|
|
417
|
-
--bootstrap-samples N bootstrap 重采样次数 (默认 1000)
|
|
418
|
-
--gold-dir <路径> 跑完自动对比 human gold 算 Krippendorff α / κ / Pearson,
|
|
419
|
-
结果写入 report.meta.humanAgreement,HTML 报告显示「人工锚点」
|
|
420
|
-
--no-debias-length 退回 v2-cot 评委 prompt (不含"长度不是质量信号"段落),
|
|
421
|
-
用于复现旧版本(v3-cot-length 之前)的报告 hash
|
|
422
|
-
--budget-usd <num> 总成本上限 (USD);超出中止评测,partial report 仍持久化
|
|
423
|
-
(`report.meta.budgetExhausted = true`)
|
|
424
|
-
--budget-per-sample-usd <num> 单样本成本上限;超出该样本失败但评测继续
|
|
425
|
-
--budget-per-sample-ms <num> 单样本耗时上限 (ms);超出该样本失败但评测继续
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
**eval.yaml 预算字段**: `budget: { totalUSD?, perSampleUSD?, perSampleMs? }`,所有字段可选且必须 ≥ 0。CLI 同名 flag 覆盖配置值。
|
|
429
|
-
|
|
430
|
-
**eval.yaml 实验设计字段**: 上面 CLI flag 同样可以写到 `eval.yaml` 让实验配置可复现 (CLI > eval.yaml > 默认):
|
|
431
|
-
|
|
432
|
-
```yaml
|
|
433
|
-
samples: ./eval-samples.yaml
|
|
434
|
-
model: sonnet
|
|
435
|
-
repeat: 5 # 多轮方差分析, ≥ 1
|
|
436
|
-
judgeRepeat: 3 # 每条 (sample × dim) 评委自一致性次数, ≥ 1
|
|
437
|
-
bootstrap: true # 每 variant distribution-free CI
|
|
438
|
-
bootstrapSamples: 2000 # 默认 1000, ≥ 100
|
|
439
|
-
goldDir: ./gold # 跑完自动对比 human anchor 算 α / κ / Pearson
|
|
440
|
-
lengthDebias: true # 默认; 设 false 复现 v0.21 之前的 hash
|
|
441
|
-
strictBaseline: true # 默认; 设 false 关掉 skill 隔离
|
|
442
|
-
noJudge: false # 默认; 设 true 完全跳过 LLM 评委
|
|
443
|
-
judgeModels: # 1 条 = 单评委; ≥ 2 条 = ensemble
|
|
444
|
-
- { executor: claude, model: opus }
|
|
445
|
-
- { executor: openai-api, model: gpt-4o }
|
|
446
|
-
variants:
|
|
447
|
-
- { name: baseline, role: control, artifact: baseline }
|
|
448
|
-
- { name: my-skill, role: treatment, artifact: ./skills/my-skill.md }
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
**字段入口**: `bench run` 完整支持上述全部字段; `bench gate` 通过 `parseRunConfig` 共享 variants / executor / model / `judgeModels`(单评委 + ensemble 都生效)/ noJudge / noCache / blind / strictBaseline / budget / mcpConfig / variantAllowedSkills,但 `handleRun` 自己处理的实验设计字段(`repeat` / `judgeRepeat` / `bootstrap` / `bootstrapSamples` / `goldDir` / `lengthDebias`)gate 不读,后续按需扩展到 gate。其他子命令(`evolve` / `verdict` / `diff` / `analyze` 等)完全不读 eval.yaml。
|
|
452
|
-
|
|
453
|
-
**和 `cost_max` / `latency_max` 断言的区别**: 断言是**单样本评分维度**(超出直接打 0 分,run 继续);budget 是**工作流级硬阈值**(`totalUSD` 超出整个 run abort 保留 partial report,per-sample 超出该样本失败但 run 继续)。一个回答"质量是否达标",一个回答"花钱/时间是否在预算内"。
|
|
454
|
-
|
|
455
|
-
### `omk bench run --batch`(批量评测)
|
|
456
|
-
|
|
457
|
-
当 skills/ 下放了多个**独立的** artifact 时,使用 `--batch` 逐个评测,每个 artifact 独立和 baseline 对比,生成一份 BatchEvaluationReport,内部索引多个 child EvaluationReport。
|
|
458
|
-
|
|
459
|
-
```
|
|
460
|
-
skills/
|
|
461
|
-
├── asset.md ← artifact 文件
|
|
462
|
-
├── asset.eval-samples.json ← 配对的测试集
|
|
463
|
-
├── home.md
|
|
464
|
-
├── home.eval-samples.json
|
|
465
|
-
└── product/ ← 目录格式也支持
|
|
466
|
-
├── SKILL.md
|
|
467
|
-
└── eval-samples.json
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
配对规则:
|
|
471
|
-
|
|
472
|
-
- `{name}.md` → 查找同目录下的 `{name}.eval-samples.json`
|
|
473
|
-
- `{name}/SKILL.md` → 查找 `{name}/eval-samples.json`
|
|
474
|
-
- 没有配对 eval-samples 的 artifact 会被跳过并打印警告
|
|
475
|
-
|
|
476
|
-
```bash
|
|
477
|
-
omk bench run --batch
|
|
478
|
-
omk bench run --batch --dry-run
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
### `omk bench gen-samples`(生成测评用例)
|
|
482
|
-
|
|
483
|
-
读取 artifact 内容,通过 LLM 自动生成 eval-samples。生成后请审查编辑再跑评测。
|
|
484
|
-
|
|
485
|
-
```bash
|
|
486
|
-
# 为指定 artifact 生成测试集(输出到 eval-samples.json)
|
|
487
|
-
omk bench gen-samples skills/my-skill.md
|
|
488
|
-
|
|
489
|
-
# 为 skills/ 下所有缺少测试集的 artifact 批量生成
|
|
490
|
-
omk bench gen-samples --batch
|
|
491
|
-
|
|
492
|
-
# 指定生成数量
|
|
493
|
-
omk bench gen-samples skills/my-skill.md --count 10
|
|
494
|
-
```
|
|
495
|
-
|
|
496
|
-
选项:
|
|
362
|
+
omk 的公开 CLI 按知识载体工作流组织:初始化、健康检查、离线评测、线上观测、改进建议、证据导出、本地工作台。
|
|
497
363
|
|
|
498
|
-
|
|
499
|
-
--batch 为所有缺少 eval-samples 的 artifact 批量生成
|
|
500
|
-
--count <n> 每个 artifact 生成的样本数(默认:5)
|
|
501
|
-
--model <名称> 生成用的模型(默认:sonnet)
|
|
502
|
-
--skill-dir <路径> artifact 目录(默认:skills),配合 --batch 使用
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
### `omk bench evolve`(自我循环改进)
|
|
506
|
-
|
|
507
|
-
让 AI 自动迭代 artifact:评测 → 分析弱点 → LLM 改进 → 再评测 → 分数涨了留、没涨扔 → 重复。
|
|
364
|
+
### `omk init`
|
|
508
365
|
|
|
509
366
|
```bash
|
|
510
|
-
|
|
511
|
-
omk bench evolve skills/my-skill.md
|
|
512
|
-
|
|
513
|
-
# 指定轮数和目标分数
|
|
514
|
-
omk bench evolve skills/my-skill.md --rounds 10 --target 4.5
|
|
367
|
+
omk init [目录]
|
|
515
368
|
```
|
|
516
369
|
|
|
517
|
-
|
|
370
|
+
生成一个评测项目脚手架,包含两版 starter skill 和 `eval-samples.json`。
|
|
518
371
|
|
|
519
|
-
|
|
520
|
-
--rounds <n> 最大迭代轮数(默认:5)
|
|
521
|
-
--target <分数> 目标分数,达到即停
|
|
522
|
-
--samples <路径> 样本文件(默认:eval-samples.json)
|
|
523
|
-
--improve-model <名称> 改进用模型(默认:sonnet)
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
每轮产出保存在 `skills/evolve/` 目录(`my-skill.r0.md`、`my-skill.r1.md`...),可以 diff 查看 AI 改了什么。最佳版本自动写回原始文件。
|
|
527
|
-
|
|
528
|
-
### `omk bench gate`
|
|
529
|
-
|
|
530
|
-
在自动化流水线中运行评测。评分达标则退出码为 0(通过),否则为 1(失败),可直接用于卡点判断。
|
|
531
|
-
|
|
532
|
-
门禁是**三层 all-pass**:`avgFactScore >= threshold AND avgBehaviorScore >= threshold AND avgJudgeScore >= threshold`,任一层低于阈值即 FAIL,输出显示是哪一层破了 gate。这样能把"事实 4.5→2.5 但 judge 3→5"这种合成分均值不变但事实层崩盘的 case 暴露出来 — 任何一层退化都会被卡住。
|
|
372
|
+
### `omk doctor`
|
|
533
373
|
|
|
534
374
|
```bash
|
|
535
|
-
omk
|
|
536
|
-
|
|
537
|
-
|
|
375
|
+
omk doctor # 检查当前目录或 ./skills
|
|
376
|
+
omk doctor skills/v1.md # 检查单个 skill 文件
|
|
377
|
+
omk doctor skills/ --json # 输出 JSON 给 CI 消费
|
|
378
|
+
omk doctor --gate; echo $? # 静默门禁,fatal 时 exit 1
|
|
538
379
|
```
|
|
539
380
|
|
|
540
|
-
|
|
381
|
+
纯静态检查:skill 可读性、frontmatter、directory-skill 结构、依赖提示、samples 契约。`omk eval` 前也会自动强制执行。
|
|
541
382
|
|
|
542
|
-
|
|
383
|
+
### `omk eval`
|
|
543
384
|
|
|
544
385
|
```bash
|
|
545
|
-
omk
|
|
546
|
-
omk
|
|
547
|
-
omk
|
|
548
|
-
omk
|
|
386
|
+
omk eval --control code-review-v1 --treatment code-review-v2
|
|
387
|
+
omk eval --config eval.yaml
|
|
388
|
+
omk eval --batch
|
|
389
|
+
omk eval gold compare <report-id> --gold-dir gold-dataset
|
|
390
|
+
omk eval debias length <report-id>
|
|
549
391
|
```
|
|
550
392
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
- **skill 文件可读** — 文件存在、内容非空、有最低长度
|
|
554
|
-
- **skill 元数据合法** — front-matter(若有)YAML 合法;directory-skill 有 `SKILL.md`
|
|
555
|
-
- **前置依赖完整** — 引用的 CLI 工具、文件、环境变量都可用(复用 `preflightDependencies`)
|
|
556
|
-
- **用例 ↔ skill 输入约定** — 传 samples 时校验非空且含 prompt 字段(warn 级)
|
|
557
|
-
|
|
558
|
-
executor / judge 连通性由独立的 evaluation preflight 阶段负责,不在 doctor 范围内 — 边界清晰:doctor 静态,eval 动态。`bench run` / `bench gate` 在 doctor 失败时 abort(exit 1,stderr 前缀 `doctor failed:`)。**doctor 是评测必经环节,无 skip flag**(静态检查零成本无理由跳过);LLM 连通性可用 `--skip-connectivity` 单独控制(`--resume` 时自动跳过)。
|
|
393
|
+
运行离线评测,应用 verdict gate,持久化报告,并用 exit code 表示 ship/no-ship。这个工作流默认开启 bootstrap CI。
|
|
559
394
|
|
|
560
|
-
|
|
395
|
+
常用选项:
|
|
561
396
|
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
--
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
dataset 目录结构:
|
|
586
|
-
|
|
587
|
-
```
|
|
588
|
-
gold-dir/
|
|
589
|
-
├── metadata.yaml # annotator (注意不要与 omk judge 同模型,会触发污染警告) + 时间 + 版本
|
|
590
|
-
└── annotations.yaml # [{ sample_id, score, reason? }] 按 sample_id 拼接
|
|
591
|
-
```
|
|
592
|
-
|
|
593
|
-
α 阈值参考 Krippendorff (2011):≥ 0.80 高度一致;[0.67, 0.80) 可接受;< 0.40 偏差大需排查 rubric / prompt。
|
|
594
|
-
|
|
595
|
-
完整 demo: [examples/gold-dataset/](examples/gold-dataset/)
|
|
596
|
-
|
|
597
|
-
### `omk bench debias-validate length`(评委长度偏差检测)
|
|
598
|
-
|
|
599
|
-
重判已有 report 的所有 (sample × variant),用相反的 length-debias 设置(v3-cot-length ↔ v2-cot),bootstrap CI 算两次差值。差异显著 = 评委对长度敏感(length bias 间接证据)。
|
|
600
|
-
|
|
601
|
-
```bash
|
|
602
|
-
omk bench debias-validate length <reportId> [选项]
|
|
603
|
-
--variant <name> 只测一个 variant
|
|
604
|
-
--judge-models <executor:model> override report 的评委(仅支持单评委)
|
|
605
|
-
--bootstrap-samples N bootstrap 迭代数 (默认 1000)
|
|
606
|
-
--seed N 确定性种子
|
|
607
|
-
```
|
|
608
|
-
|
|
609
|
-
verdict 分四档:未检测 / 弱 / 中(差值 |0.2-0.5|)/ 强(差值 ≥ 0.5)。重判 cost 大致翻倍。
|
|
610
|
-
|
|
611
|
-
### `omk bench saturation`(饱和曲线)
|
|
612
|
-
|
|
613
|
-
回答"我跑够样本了吗"。从已有 report 读取 saturation trace 输出判定,无需重跑评测。需要原 run 跑了 `--repeat ≥ 5` 才会有 verdict(低 repeat 只画曲线)。
|
|
614
|
-
|
|
615
|
-
```bash
|
|
616
|
-
omk bench saturation <reportId> [选项]
|
|
617
|
-
--variant <name> 只看一个 variant
|
|
618
|
-
--method <m> slope | bootstrap-ci-width (默认) | plateau-height
|
|
619
|
-
--threshold <num> 方法相关阈值 (默认随 method)
|
|
620
|
-
--window <num> 连续多少窗口满足才判饱和 (默认 3)
|
|
397
|
+
```text
|
|
398
|
+
--samples <路径> 样本文件(默认:eval-samples.json,也自动检测 .yaml/.yml)
|
|
399
|
+
--skill-dir <路径> artifact 目录(默认:skills)
|
|
400
|
+
--control <expr> 对照组 variant 表达式
|
|
401
|
+
--treatment <v1,v2> 实验组 variants,逗号分隔
|
|
402
|
+
--config <路径> YAML/JSON 评测配置
|
|
403
|
+
--model <名称> 任务执行模型(默认:sonnet)
|
|
404
|
+
--judge-models <list> 评委配置,例如 claude:haiku 或 claude:opus,openai:gpt-4o
|
|
405
|
+
--executor <名称> claude / claude-sdk / codex / codex-sdk / openai-api / gemini / custom
|
|
406
|
+
--no-judge 跳过 LLM 评委
|
|
407
|
+
--dry-run 仅预览
|
|
408
|
+
--blind 盲测模式
|
|
409
|
+
--concurrency <n> 并行任务数
|
|
410
|
+
--timeout <秒> 单任务超时
|
|
411
|
+
--repeat <n> 重复 N 次做方差分析
|
|
412
|
+
--batch 每个 artifact 独立和 baseline 对比
|
|
413
|
+
--bootstrap-samples N bootstrap 重采样次数(默认 1000)
|
|
414
|
+
--threshold <number> verdict 分层门禁阈值(默认 3.5)
|
|
415
|
+
--trivial-diff <num> 实际可忽略 diff 阈值(默认 0.1)
|
|
416
|
+
--report-only 生成报告并打印 verdict,但始终 exit 0
|
|
417
|
+
--no-gate --report-only 的别名
|
|
418
|
+
--skip-connectivity 跳过模型连通性检查;doctor 仍强制执行
|
|
419
|
+
--no-serve 评测后不自动启动报告服务
|
|
621
420
|
```
|
|
622
421
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
### `omk bench verdict`(一行 ship/no-ship 结论)
|
|
626
|
-
|
|
627
|
-
聚合 bootstrap CI / 三层 ci-gate / saturation / human α 给一行结论。Verdict 六档:**PROGRESS**(显著改进 + 三层全过 → exit 0)/ **CAUTIOUS**(改进真实但有警告:gate 破/幅度太小/控制组本身崩 → exit 1)/ **REGRESS**(显著回退 → exit 1)/ **NOISE**(CI 跨 0,无法判定 → exit 1)/ **UNDERPOWERED**(样本不足 → exit 1)/ **SOLO**(单变体,仅自身三层 gate 过才 exit 0)。
|
|
422
|
+
### `omk observe`
|
|
628
423
|
|
|
629
424
|
```bash
|
|
630
|
-
omk
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
425
|
+
omk observe ~/.claude/projects/-Users-you-Documents-my-project
|
|
426
|
+
omk observe ~/.claude/projects/my-project --last 7d
|
|
427
|
+
omk observe ~/.claude/projects/my-project --from 2026-04-01T00:00:00Z --to 2026-04-15T23:59:59Z
|
|
428
|
+
omk observe ~/.claude/projects/my-project --skills audit,polish
|
|
429
|
+
omk observe ~/.claude/projects/my-project --kb /path/to/project
|
|
634
430
|
```
|
|
635
431
|
|
|
636
|
-
|
|
432
|
+
把真实 Claude Code session trace 转成 skill 健康度报告:知识使用、gap 信号、执行稳定性、token 和耗时。这是生产观测,不是生产评分。
|
|
637
433
|
|
|
638
|
-
### `omk
|
|
639
|
-
|
|
640
|
-
回答"测评结论是否被坏样本污染"。诊断 7 类样本质量问题:`flat_scores`(区分度低)/ `all_pass`(太简单)/ `all_fail`(broken,error 级)/ `near_duplicate`(prompt ROUGE-1 ≥ 阈值)/ `ambiguous_rubric`(judge stddev 大,需要 `--judge-repeat ≥ 2`)/ `cost_outlier`(≥ k× median)/ `latency_outlier`(≥ k× median)/ `error_prone`(执行失败)。
|
|
434
|
+
### `omk improve`
|
|
641
435
|
|
|
642
436
|
```bash
|
|
643
|
-
omk
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
--latency-k <num> 耗时异常倍数 vs median (默认 3)
|
|
649
|
-
--flat <num> flat_scores 分差阈值 (默认 0.5)
|
|
437
|
+
omk improve <report-id> # 样本诊断和修复计划
|
|
438
|
+
omk improve plan <report-id> # 显式 repair-plan 形式
|
|
439
|
+
omk improve failures <report-id> # 聚类失败样本并给根因
|
|
440
|
+
omk improve samples [skill] # 生成或补齐 eval samples
|
|
441
|
+
omk improve skill <skill> # 通过评测循环迭代 skill
|
|
650
442
|
```
|
|
651
443
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
### `omk bench failures`(失败 case LLM 聚类)
|
|
444
|
+
在 `omk eval` 或 `omk observe` 之后用它决定下一步改什么。自动生成的 sample assertions 使用英文、数字或代码 token,便于跨中英文输出比较。
|
|
655
445
|
|
|
656
|
-
|
|
446
|
+
### `omk export`
|
|
657
447
|
|
|
658
448
|
```bash
|
|
659
|
-
omk
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
449
|
+
omk export <report-id> --format html
|
|
450
|
+
omk export <report-id> --format markdown --out report.md
|
|
451
|
+
omk export <report-id> --format github-summary
|
|
452
|
+
omk export diff <report-id> --regressions-only
|
|
453
|
+
omk export verdict <report-id>
|
|
454
|
+
omk export saturation <report-id>
|
|
664
455
|
```
|
|
665
456
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
### `omk bench diff`(报告对比 — 单参 / 双参双模式)
|
|
457
|
+
导出可贴到 PR、CI summary 和审计材料里的证据。HTML 会写 standalone report 文件;markdown 和 GitHub summary 默认输出到 stdout,除非传 `--out`。样本/报告差异、已持久化 verdict、saturation 检查也都归在 export 子树下。
|
|
669
458
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
**双参模式**(cross-report variant-level): `omk bench diff <reportId1> <reportId2>` — 跨报告对比同一 variant 的整体均值漂移(向后兼容旧用法)。
|
|
459
|
+
### `omk studio`
|
|
673
460
|
|
|
674
461
|
```bash
|
|
675
|
-
omk
|
|
676
|
-
omk
|
|
462
|
+
omk studio
|
|
463
|
+
omk studio --port 7799
|
|
464
|
+
omk studio --reports-dir ~/.oh-my-knowledge/reports
|
|
465
|
+
omk studio --no-open
|
|
677
466
|
```
|
|
678
467
|
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
## `omk analyze` — 生产观测
|
|
682
|
-
|
|
683
|
-
`omk bench run` 是**离线评测**(固定对照、可复现、可评分)。生产环境不一样 — 没对照组、没标准答案、没重复,所以评分在那里不成立。`omk analyze` 把已有的 Claude Code session trace 转成**skill 健康度报告**(按 skill 维度的覆盖率、缺口信号、执行稳定性、tokens/延迟)。它给的是"哪个 skill 值得拉回离线再测一遍"的线索,不是生产评分。
|
|
684
|
-
|
|
685
|
-
```bash
|
|
686
|
-
# 分析当前项目的所有 cc session(kb 路径从 trace 里自动推断)
|
|
687
|
-
omk analyze ~/.claude/projects/-Users-you-Documents-my-project
|
|
688
|
-
|
|
689
|
-
# 限定时间窗:最近 7 天 / 24 小时 / 30 分钟
|
|
690
|
-
omk analyze ~/.claude/projects/my-project --last 7d
|
|
691
|
-
|
|
692
|
-
# 绝对时间窗
|
|
693
|
-
omk analyze ~/.claude/projects/my-project --from 2026-04-01T00:00:00Z --to 2026-04-15T23:59:59Z
|
|
694
|
-
|
|
695
|
-
# 白名单特定 skill
|
|
696
|
-
omk analyze ~/.claude/projects/my-project --skills audit,polish
|
|
697
|
-
|
|
698
|
-
# 显式指定知识库根目录(覆盖自动推断)
|
|
699
|
-
omk analyze ~/.claude/projects/my-project --kb /path/to/project
|
|
700
|
-
```
|
|
701
|
-
|
|
702
|
-
命令产出 `~/.oh-my-knowledge/analyses/<timestamp>-skill-health.json`。启 `omk bench report` 后,首页右上有"📊 Skill 健康度日报"入口;每张 skill card 上有"查看趋势 →"链接;`/analyses` 列表页顶部有 Compare 选择器,可以选两份报告生成 diff。
|
|
703
|
-
|
|
704
|
-
**每个 skill 你能看到:**
|
|
705
|
-
|
|
706
|
-
- **知识使用** — 这个 skill 实际读了哪些 KB 文件(coverage %)
|
|
707
|
-
- **知识盲区** — 四类加权信号(搜索未命中 / 模型标记缺口 / 表达不确定 / 反复未命中);hedging 经 LLM 二次判定过滤"业务可能性"和"知识不确定"
|
|
708
|
-
- **执行稳定性** — 工具失败率;失败率 > 20% 的 skill 会标警告,提示"gap 信号可能是环境问题而非真实知识缺口"
|
|
709
|
-
- **使用成本** — billable tokens(input+output)和 cached tokens 分列,总耗时
|
|
710
|
-
|
|
711
|
-
**这不是什么:**
|
|
712
|
-
|
|
713
|
-
- 不是通用 APM(请求级 latency/cost tracing 是 Langfuse / Datadog 的领域)
|
|
714
|
-
- 不是 streaming / alert(只做 batch — 想要周期快照用 cron)
|
|
715
|
-
- 不是生产评分(没对照组没标答 — 评分回到 `omk bench run`)
|
|
468
|
+
启动本地知识工作台,用来浏览报告和观测分析。
|
|
716
469
|
|
|
717
470
|
## 执行器
|
|
718
471
|
|
|
@@ -722,23 +475,23 @@ omk analyze ~/.claude/projects/my-project --kb /path/to/project
|
|
|
722
475
|
|--------|----------|------|
|
|
723
476
|
| `claude` | 默认 | 通过 `claude -p` 调用 Claude CLI |
|
|
724
477
|
| `claude-sdk` | 结构化输出 | 通过 Claude Agent SDK 调用,无 stdout 解析,避免 buffer 截断 |
|
|
725
|
-
| `codex` | OpenAI agent CLI | 通过 `codex exec --json`
|
|
726
|
-
| `codex-sdk` | OpenAI agent SDK | 通过 `@openai/codex-sdk` 调用其自带的 `@openai/codex` binary 和 SDK
|
|
478
|
+
| `codex` | OpenAI agent CLI | 通过 `codex exec --json` 调用,需本地装好登录的 codex(`@openai/codex`);best-effort tool trace,**costUSD 不报**(codex 自身不输出 USD,需外部账单核算) |
|
|
479
|
+
| `codex-sdk` | OpenAI agent SDK | 通过 `@openai/codex-sdk` 调用其自带的 `@openai/codex` binary 和 SDK 事件流;**costUSD 不报** |
|
|
727
480
|
| `gemini` | 跨厂商对比 | 通过 `gemini` CLI 调用 |
|
|
728
481
|
| `anthropic-api` | 无需 CLI | 直接调用 Anthropic HTTP API(需 `ANTHROPIC_API_KEY`) |
|
|
729
482
|
| `openai-api` | 无需 CLI | 直接调用 OpenAI HTTP API(需 `OPENAI_API_KEY`) |
|
|
730
483
|
|
|
731
484
|
API 直调执行器支持通过环境变量自定义 Base URL:`ANTHROPIC_BASE_URL`、`OPENAI_BASE_URL`。
|
|
732
485
|
|
|
733
|
-
Codex construct-validity
|
|
486
|
+
Codex construct-validity 说明:(1)`codex` 使用 `PATH` 上找到的 `codex` binary;`codex-sdk` 使用 `@openai/codex-sdk` 解析到的自带 `@openai/codex` binary。报告会持久化 per-variant `meta.executorRuntimes`、`meta.executorRuntime`,以及每个评委的 `meta.judgeModels[].runtime` 指纹(binary 或 SDK 版本 + 能力快照),strict comparability checks 会在 runtime 指纹无法审计时提示。runtime 指纹不一致时,结果应解释为 executor runtime 对比,而不只是 prompt/template 行为对比。(2)两个 executor 都隔离用户级 config:`codex` 传 `--ephemeral` + `--ignore-user-config`,`codex-sdk` 把 `$CODEX_HOME` 重定向到 per-process tmp 目录(auth.json 通过 symlink 透传)。用户的 `~/.codex/config.toml` 不会渗入任意一个 executor 的 eval。
|
|
734
487
|
|
|
735
488
|
### 自定义执行器
|
|
736
489
|
|
|
737
490
|
任何 shell 命令都可以作为执行器,通过 stdin/stdout JSON 协议通信:
|
|
738
491
|
|
|
739
492
|
```bash
|
|
740
|
-
omk
|
|
741
|
-
omk
|
|
493
|
+
omk eval --executor "python my_provider.py"
|
|
494
|
+
omk eval --executor "./my-executor.sh"
|
|
742
495
|
```
|
|
743
496
|
|
|
744
497
|
**协议约定:**
|
|
@@ -775,32 +528,32 @@ skills/
|
|
|
775
528
|
| `./path/to/file.md` | 含 `/` 的路径,直接读取文件作为 artifact |
|
|
776
529
|
| `variant@/path/to/project` | 给任意变体附加运行目录,支持 `name@cwd`、`git:name@cwd`、`/file.md@cwd` |
|
|
777
530
|
|
|
778
|
-
`--control` 和 `--treatment`
|
|
531
|
+
`--control` 和 `--treatment` 都不传时,用 `--config eval.yaml` 或 `--batch`。`--batch` 模式下会自动用 `baseline` 作对照组,每个被发现的 artifact 作实验组。
|
|
779
532
|
|
|
780
533
|
```bash
|
|
781
534
|
# 显式:一个 control,一个或多个 treatment
|
|
782
|
-
omk
|
|
783
|
-
omk
|
|
535
|
+
omk eval --control v1 --treatment v2
|
|
536
|
+
omk eval --control baseline --treatment v1,v2,v3
|
|
784
537
|
|
|
785
538
|
# 对比空 artifact 和显式 artifact 的效果差异
|
|
786
|
-
omk
|
|
539
|
+
omk eval --control baseline --treatment my-skill
|
|
787
540
|
|
|
788
541
|
# 单独观察项目级 runtime context 的影响(用自描述标签)
|
|
789
|
-
omk
|
|
542
|
+
omk eval --control baseline --treatment project-env@/path/to/target-project
|
|
790
543
|
|
|
791
544
|
# 对比"项目级 runtime context"与"显式 artifact 注入"
|
|
792
|
-
omk
|
|
545
|
+
omk eval \
|
|
793
546
|
--control project-env@/path/to/target-project \
|
|
794
547
|
--treatment /path/to/target-project/.claude/skills/prd/SKILL.md@/path/to/target-project
|
|
795
548
|
|
|
796
549
|
# 对比修改前后(旧版本从 git 历史读取)
|
|
797
|
-
omk
|
|
550
|
+
omk eval --control git:my-skill --treatment my-skill
|
|
798
551
|
|
|
799
552
|
# 直接指定文件路径
|
|
800
|
-
omk
|
|
553
|
+
omk eval --control ./old-skill.md --treatment ./new-skill.md
|
|
801
554
|
|
|
802
555
|
# 配置文件驱动(evaluation-as-code)
|
|
803
|
-
omk
|
|
556
|
+
omk eval --config eval.yaml
|
|
804
557
|
```
|
|
805
558
|
|
|
806
559
|
**前置要求:**
|
|
@@ -831,7 +584,7 @@ omk bench run --config eval.yaml
|
|
|
831
584
|
#### 推荐执行器
|
|
832
585
|
|
|
833
586
|
```bash
|
|
834
|
-
omk
|
|
587
|
+
omk eval --executor claude-sdk
|
|
835
588
|
```
|
|
836
589
|
|
|
837
590
|
#### 支持的 agent 相关断言
|
|
@@ -848,10 +601,10 @@ omk bench run --executor claude-sdk
|
|
|
848
601
|
|
|
849
602
|
**1. 裸模型 baseline**
|
|
850
603
|
|
|
851
|
-
不注入 system prompt
|
|
604
|
+
不注入 system prompt,也不进入带知识的项目目录。至少需要一个 treatment 做对比:
|
|
852
605
|
|
|
853
606
|
```bash
|
|
854
|
-
omk
|
|
607
|
+
omk eval \
|
|
855
608
|
--executor claude-sdk \
|
|
856
609
|
--control baseline \
|
|
857
610
|
--treatment my-skill
|
|
@@ -859,10 +612,10 @@ omk bench run \
|
|
|
859
612
|
|
|
860
613
|
**2. 空 artifact + 项目级 runtime context**
|
|
861
614
|
|
|
862
|
-
不注入 system prompt
|
|
615
|
+
不注入 system prompt,但在项目目录运行。它不是严格意义上的"裸 baseline",而是"空 artifact + 项目级 runtime context"。
|
|
863
616
|
|
|
864
617
|
```bash
|
|
865
|
-
omk
|
|
618
|
+
omk eval \
|
|
866
619
|
--executor claude-sdk \
|
|
867
620
|
--control baseline \
|
|
868
621
|
--treatment project-env@/path/to/target-project
|
|
@@ -870,10 +623,10 @@ omk bench run \
|
|
|
870
623
|
|
|
871
624
|
**3. 显式 artifact 注入**
|
|
872
625
|
|
|
873
|
-
直接把某个外部 `SKILL.md` 作为 artifact
|
|
626
|
+
直接把某个外部 `SKILL.md` 作为 artifact 注入,同时保留项目目录上下文。适合对比"项目级 runtime context"与"显式单 artifact 注入"之间的差异。
|
|
874
627
|
|
|
875
628
|
```bash
|
|
876
|
-
omk
|
|
629
|
+
omk eval \
|
|
877
630
|
--executor claude-sdk \
|
|
878
631
|
--control project-env@/path/to/target-project \
|
|
879
632
|
--treatment /path/to/target-project/.claude/skills/prd/SKILL.md@/path/to/target-project
|
|
@@ -881,20 +634,20 @@ omk bench run \
|
|
|
881
634
|
|
|
882
635
|
#### 推荐的第一轮对照设计
|
|
883
636
|
|
|
884
|
-
对于 PRD /
|
|
637
|
+
对于 PRD / 复杂业务知识场景,建议从下面开始:
|
|
885
638
|
|
|
886
639
|
```bash
|
|
887
|
-
omk
|
|
640
|
+
omk eval \
|
|
888
641
|
--executor claude-sdk \
|
|
889
642
|
--samples skills/evaluate-review/eval-samples.yaml \
|
|
890
643
|
--control baseline \
|
|
891
644
|
--treatment /path/to/target-project/.claude/skills/prd/SKILL.md@/path/to/target-project
|
|
892
645
|
```
|
|
893
646
|
|
|
894
|
-
如果你想证明"项目目录中的知识沉淀本身"
|
|
647
|
+
如果你想证明"项目目录中的知识沉淀本身"是否有效,加第二个 treatment:
|
|
895
648
|
|
|
896
649
|
```bash
|
|
897
|
-
omk
|
|
650
|
+
omk eval \
|
|
898
651
|
--executor claude-sdk \
|
|
899
652
|
--samples skills/evaluate-review/eval-samples.yaml \
|
|
900
653
|
--control baseline \
|
|
@@ -915,48 +668,48 @@ omk bench run \
|
|
|
915
668
|
# GLM(智谱)
|
|
916
669
|
export OPENAI_API_KEY="你的智谱 API Key"
|
|
917
670
|
export OPENAI_BASE_URL="https://open.bigmodel.cn/api/paas/v4"
|
|
918
|
-
omk
|
|
671
|
+
omk eval --executor openai-api --model glm-4-plus \
|
|
919
672
|
--judge-models openai-api:glm-4-plus --no-cache
|
|
920
673
|
|
|
921
674
|
# 通义千问
|
|
922
675
|
export OPENAI_API_KEY="你的通义 API Key"
|
|
923
676
|
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
|
|
924
|
-
omk
|
|
677
|
+
omk eval --executor openai-api --model qwen-plus \
|
|
925
678
|
--judge-models openai-api:qwen-plus
|
|
926
679
|
|
|
927
680
|
# DeepSeek
|
|
928
681
|
export OPENAI_API_KEY="你的 DeepSeek API Key"
|
|
929
682
|
export OPENAI_BASE_URL="https://api.deepseek.com"
|
|
930
|
-
omk
|
|
683
|
+
omk eval --executor openai-api --model deepseek-chat \
|
|
931
684
|
--judge-models openai-api:deepseek-chat
|
|
932
685
|
|
|
933
686
|
# Moonshot(Kimi)
|
|
934
687
|
export OPENAI_API_KEY="你的 Moonshot API Key"
|
|
935
688
|
export OPENAI_BASE_URL="https://api.moonshot.cn/v1"
|
|
936
|
-
omk
|
|
689
|
+
omk eval --executor openai-api --model moonshot-v1-8k \
|
|
937
690
|
--judge-models openai-api:moonshot-v1-8k
|
|
938
691
|
```
|
|
939
692
|
|
|
940
693
|
**Ollama 本地模型:**
|
|
941
694
|
|
|
942
695
|
```bash
|
|
943
|
-
omk
|
|
696
|
+
omk eval --executor "python examples/custom-executor/ollama-executor.py" \
|
|
944
697
|
--model llama3 --no-judge
|
|
945
698
|
```
|
|
946
699
|
|
|
947
|
-
|
|
700
|
+
**关于评委:**
|
|
948
701
|
|
|
949
|
-
- `--judge-models <list>`
|
|
950
|
-
- 1 条 =
|
|
951
|
-
- 没有 Claude 时把 `--judge-models`
|
|
952
|
-
- 加 `--no-judge` 可跳过 LLM
|
|
702
|
+
- `--judge-models <list>` 指定评委,格式 `executor:model[,executor:model]`。默认 `${executor}:haiku`(没设 `--executor` 时为 `claude:haiku`)
|
|
703
|
+
- 1 条 = 单评委;≥ 2 条 = 多评委 ensemble + inter-judge agreement
|
|
704
|
+
- 没有 Claude 时把 `--judge-models` 指向你可用的模型,例如 `--judge-models openai-api:glm-4-plus`
|
|
705
|
+
- 加 `--no-judge` 可跳过 LLM 评委,仅使用断言评分
|
|
953
706
|
|
|
954
707
|
## 环境变量
|
|
955
708
|
|
|
956
709
|
| 变量 | 说明 |
|
|
957
710
|
|------|------|
|
|
958
711
|
| `CCV_PROXY_URL` | 将请求代理到 cc-viewer,实时可视化评测流量 |
|
|
959
|
-
| `
|
|
712
|
+
| `OMK_REPORT_PORT` | 报告服务端口(默认:7799) |
|
|
960
713
|
|
|
961
714
|
## 系统要求
|
|
962
715
|
|
|
@@ -975,7 +728,7 @@ omk bench run --executor "python examples/custom-executor/ollama-executor.py" \
|
|
|
975
728
|
|
|
976
729
|
**建议:**
|
|
977
730
|
|
|
978
|
-
-
|
|
731
|
+
- 不要在公网服务中暴露本地报告服务(无认证)
|
|
979
732
|
- 不要用不可信的第三方 eval-samples 文件
|
|
980
733
|
- 自定义断言有 30 秒执行超时,但无沙箱隔离
|
|
981
734
|
|