| name | ob-benchmark |
| description | Obsidian 文章质量基准评测系统。通过交互式问答对知识库文章打分,记录缺点,自动提炼写作偏好。触发词:评分、打分、文章评价、ob-benchmark、知识库评分。 |
Obsidian 知识库质量评分助手,通过交互式问答让用户对文章进行主观质量评分,记录问题并自动提炼写作偏好。
建立人机结合的质量反馈闭环:用户评分 → 记录问题 → 提炼偏好 → 指导后续写作和采集。
触发词:
- 评分 / 打分 / 文章评价 / 知识库评分
- ob-benchmark / 给文章打分
- 评价知识库 / 文章质量
示例:
- "ob-benchmark"
- "帮我给知识库文章打分"
- "评分一下 claude 目录的文章"
- "评价一下我的文章质量"
requires=OBSIDIAN_REPO; focus=rate,preference,feedback
通过交互式评分记录文章质量反馈,自动提炼用户写作偏好,持续优化知识库质量标准。
**委托 ob-router skill** 解析当前激活仓库路径,扫描 wiki/ 目录,展示主题文件夹列表供用户选择。
逐篇展示选中文件夹的文章摘要信息(标题、标签、字数、更新时间),用户在 Obsidian 中查看后打分(1-10)并描述缺点,记录到评分表。
每评完 5 篇触发批量统计和偏好提炼,更新偏好文件。
文件夹评完后展示总结,用户可选择继续下一个文件夹或结束。
Obsidian 文章质量评分(ob-benchmark)
交互式文章评分系统,记录质量反馈并自动学习你的写作偏好。
配置检查
【硬约束】仓库路径一律委托 ob-router skill 解析,本 skill 不自行读取路径文件。
调用 ob-router skill 获取 $OBSIDIAN_REPO:
- ob-router 内部处理优先级(ob-router.json → CLAUDE.md → 询问)
- 若 ob-router.json 不存在,ob-router 会主动提示
ob-router init 持久化
- 若存在多个仓库,ob-router 会主动询问切换目标,不静默使用默认值
将 ob-router 返回的路径保存为 $OBSIDIAN_REPO,后续全程使用此变量。
4. 检查 $OBSIDIAN_REPO/wiki/ 目录是否存在
5. 如果不存在,提示用户先运行 ob-index 初始化
数据文件
评分表:$OBSIDIAN_REPO/wiki/.ratings.md
首次使用时自动创建,模板如下:
---
type: meta
tags: [rating, system]
updated_at: {当前日期}
---
# 文章评分表
> 通过交互式评分记录每篇文章的质量反馈,持续优化知识库。
## 统计
| 指标 | 值 |
|------|-----|
| 已评分 | 0 |
| 平均分 | — |
| 最高分 | — |
| 最低分 | — |
## 评分记录
| ID | 文章 | 分数 | 问题标签 | 用户评价 | 评价时间 |
|-----|------|------|----------|----------|----------|
偏好文件:$OBSIDIAN_REPO/wiki/.rating-preferences.md
首次触发偏好提炼时自动创建,模板如下:
---
type: meta
tags: [rating, preferences]
updated_at: {当前日期}
---
# 评分偏好
> 基于 {N} 篇已评分文章自动提炼的写作偏好。
## 高分文章特征(≥8分)
(评分积累后自动填充)
## 低分文章特征(≤5分)
(评分积累后自动填充)
## 偏好规则
(评分积累后自动填充量化规则)
执行流程
第一步:选择文件夹
- 扫描
$OBSIDIAN_REPO/wiki/ 下的所有一级子目录
- 统计每个目录中的
.md 文件数量(排除 index.md、log.md、以 . 开头的文件)
- 读取
$OBSIDIAN_REPO/wiki/.ratings.md,统计每个目录的已评分数
- 使用 AskUserQuestion 展示选项:
📊 文章评分系统
主题目录:
1. ai/ (3篇, 已评0篇)
2. claude/ (8篇, 已评3篇)
3. current-affairs/ (10篇, 已评0篇)
...
选择要评分的文件夹(输入编号):
- 用户选择后,筛选出该目录下未评分的文章(排除已出现在评分表中的文章)
- 如果所有文章已评分,提示选择其他文件夹
第二步:逐篇评分
对每篇未评分文章,按顺序执行:
展示文章:
读取文章文件的 frontmatter 获取标题(第一个 # 标题)、tags、updated_at、article_id,统计正文字数(排除 frontmatter)。
━━━ [3/8] {相对路径} ━━━
🆔 {article_id} | 📂 标题: {文章标题}
🏷️ 标签: {tags 逗号分隔}
📝 约 {字数} 字 | 📅 更新: {updated_at}
请在 Obsidian 中查看文章后评分(1-10)并说明缺点:
(输入分数和意见,如 "7分,太长,缺代码示例")
(输入 s 跳过,输入 q 结束本轮)
如果文章缺少 article_id,显示为 🆔 无ID。
解析用户输入:
- 提取分数:找到输入中的 1-10 的整数(支持"7分"、"7"、"给7分"等格式)
- 如果输入中没有有效分数,提示"请输入 1-10 的分数"
- 提取问题标签:从用户描述中提取关键词作为问题标签
- 记录原始评价:保留用户的完整评价文字
记录数据:
将评分追加到 $OBSIDIAN_REPO/wiki/.ratings.md 的评分记录表:
| {article_id 或 "无ID"} | {相对路径去掉 wiki/ 前缀} | {分数} | {问题标签逗号分隔} | {用户评价} | {当前日期} |
更新统计部分:
- 已评分:+1
- 平均分:重新计算所有评分记录的平均值
- 最高分:取最大值,附文件名
- 最低分:取最小值,附文件名
- updated_at:更新为当前日期
第三步:批量统计与偏好提炼
触发时机:每评完 5 篇 或 文件夹评分结束时
展示本轮统计:
📊 本轮统计(已评{N}篇)
- 平均分:{x.x}
- 常见问题:{问题1}({n}次), {问题2}({n}次)
- 高分文章:{文件名}({分数}分)
- 低分文章:{文件名}({分数}分)
🧠 偏好更新
新增规则:
- {规则描述}
继续评分剩余 {N} 篇?
偏好提炼逻辑:
读取 $OBSIDIAN_REPO/wiki/.ratings.md 中的所有评分记录,执行以下分析:
- 问题频率统计:统计所有问题标签的出现次数,按频率降序排列。高频问题(出现 ≥3 次)为核心关注点
- 分数-问题关联:计算每个问题标签关联的文章平均分。平均分 < 5 的问题为强负面偏好
- 高分特征提取:分析所有 ≥8 分的文章,找出它们的共同特征
- 低分特征提取:分析所有 ≤5 分的文章,找出它们的共同特征
- 增量更新:将新分析结果与已有偏好合并。已有规则有新数据支撑时更新统计数字,发现新模式时追加规则
更新偏好文件 $OBSIDIAN_REPO/wiki/.rating-preferences.md:
- 更新
updated_at
- 更新开头描述中的 N 值
- 重写"高分文章特征"部分
- 重写"低分文章特征"部分
- 更新"偏好规则"部分,每条规则附数据支撑(如"偏好短文(≤500字,平均得分 7.2 vs 长文 5.1)")
第四步:文件夹完成
一个文件夹所有文章评完后:
✅ {目录名}/ 目录评分完成
总评 {N} 篇,平均分 {x.x}
偏好文件已更新
选择下一个文件夹?还是结束?
用户选择后:
- 选另一个文件夹 → 回到第一步重新选择
- 结束 → 进入第五步
第五步:改进建议
评分结束后(用户选择结束或所有文件夹评完),基于评分数据和偏好规则生成可执行的改进建议。
读取数据:
- 读取
$OBSIDIAN_REPO/wiki/.ratings.md 获取所有评分记录
- 读取
$OBSIDIAN_REPO/wiki/.rating-preferences.md 获取偏好规则
生成建议:
按优先级分类输出:
🔧 改进建议(基于 {N} 篇评分数据)
🔴 建议删除({n} 篇,平均分 ≤2):
- {文件路径} ({分数}分) — {一句话原因}
...
🟡 建议迁移({n} 篇,分类不当):
- {文件路径} → {建议目录}/{建议文件名}
...
🟢 建议重写({n} 篇,有内容但质量不足):
- {文件路径} — {主要改进方向}
...
✅ 保持不变({n} 篇,≥6分):
- {文件路径} ({分数}分)
执行方式:
使用 AskUserQuestion 让用户选择要执行的操作:
选择要执行的改进(可多选):
□ 删除 {n} 篇低质量文章
□ 迁移 {n} 篇分类不当的文章
□ 查看重写建议(不自动执行)
□ 暂不操作,仅记录
- 用户选择"删除" → 确认后移到
$OBSIDIAN_REPO/wiki/archive/ 目录(不直接删除)
- 用户选择"迁移" → 确认后移动文件并更新评分表中的路径
- 用户选择"重写建议" → 展示每篇的详细改进方向
- 用户选择"暂不操作" → 仅保存建议到
$OBSIDIAN_REPO/wiki/.rating-actions.md
输入解析规则
分数解析
从用户输入中提取 1-10 的整数,支持以下格式:
- "7分" → 7
- "7" → 7
- "给7分" → 7
- "我打7分" → 7
- "7/10" → 7
无法解析时提示"请输入 1-10 的分数"。
问题标签提取
从用户评价中提取有意义的关键词作为标签:
- "太长了" →
太长
- "缺少代码示例" →
缺代码示例
- "概念解释不清楚" →
概念不清
- "没有引言" →
缺引言
- "标题不明确" →
标题含糊
标签应简短(≤6字),去除语气词。
命令处理
| 输入 | 动作 |
|---|
s 或 skip | 跳过当前文章,继续下一篇 |
q 或 quit | 结束本轮评分,保存进度 |
1-10(纯数字) | 记录分数,追问缺点 |
边界条件
| 场景 | 处理 |
|---|
| 文件夹所有文章已评分 | 提示选择其他文件夹 |
| 用户输入不含有效分数 | 提示"请输入 1-10 的分数",等待重新输入 |
| 用户输入 s 跳过 | 跳过当前文章,继续下一篇 |
| 用户输入 q 结束 | 保存当前进度,展示已评统计后退出 |
| 评分文件不存在 | 首次使用,创建模板文件 |
| 偏好文件不存在 | 首次触发偏好提炼时创建 |
| 中途退出 Claude | 进度已实时保存到文件中,下次启动自动恢复 |
| wiki/ 下无子目录 | 提示用户先运行 ob-collect 采集内容 |
与其他 skill 的关系
| Skill | 关系 |
|---|
| ob-tidy | ob-tidy 做自动检查(12项规则),ob-benchmark 做主观评分,互补 |
| ob-collect | 采集新文章后,可引导用户使用 ob-benchmark 评分 |
| ob-index | 评分表不参与索引,不写入 index.md |
| 消费偏好 | ob-tidy 和 ob-project-log 在执行时读取偏好文件指导内容质量 |