news 2026/9/7 16:47:05

Obsidian-skills 测试实战:5 个代理技能的三层最小验证法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Obsidian-skills 测试实战:5 个代理技能的三层最小验证法

Obsidian-skills 测试实战:5 个代理技能的三层最小验证法

【免费下载链接】obsidian-skillsAgent skills for Obsidian. Teach your agent to use Obsidian CLI and open formats including Markdown, Bases, JSON Canvas.项目地址: https://gitcode.com/GitHub_Trending/ob/obsidian-skills

Obsidian-skills 收录了 obsidian-markdown、obsidian-bases、json-canvas、obsidian-cli、defuddle 五个面向 Obsidian 开放格式的代理技能。本文把验证拆成静态检查、命令闭环、渲染抽查三层,每层给出可直接执行的最小测试集与判定口径。

一个测试库:准备最小验证环境

先给结论:不要造大数据集。五个技能的产出分三类——文本文件、结构化文件、命令输出,一个小测试库即可全覆盖。

  • 测试对象是仓库的skills/目录;产出物统一写入独立的test-vault/
  • 固定夹具:1 篇笔记(含维基链接、标注框、frontmatter)、1 个.canvas(2 节点 1 边)、1 个.base(1 公式加 1 表格视图)、2~3 个待提取的网页链接。
  • 每个技能的 SKILL.md 自带 validate 环节,直接把它当验收清单,不必另起炉灶。
git clone https://gitcode.com/GitHub_Trending/ob/obsidian-skills mkdir -p test-vault/fixtures

本文的 obsidian 技能测试用例都遵循最小集原则:每种语法、每个关键字段一条,不重复造变体。

静态验证层:打开 Obsidian 之前就能查

canvas 与 bases 的产物是纯文本文件,结构问题在打开 Obsidian 之前就能暴露。这一层成本最低,任何改动都应当先跑它。

如何判定 Canvas 节点ID是否合法

skills/json-canvas/SKILL.md给了 8 项校验清单,翻车率最高的是重复 ID 与悬空边引用。写成脚本一次性过:

import json, re c = json.load(open("sample.canvas")) node_ids = {n["id"] for n in c["nodes"]} ids = list(node_ids) + [e["id"] for e in c["edges"]] assert len(ids) == len(set(ids)), "duplicate id" assert all(re.fullmatch(r"[0-9a-f]{16}", i) for i in ids) for e in c["edges"]: assert e["fromNode"] in node_ids and e["toNode"] in node_ids

最小用例:

  • 输入:2 个文本节点加 1 条边的画布,fromSideright
  • 预期:脚本无任何输出、无异常退出
  • 判定:把任一 ID 改成 15 位、或将toNode指向不存在的节点,脚本必须报错,否则校验无效

布局另有两条线:节点间距 50–100px,中等文本节点宽 300–450px,超出即按布局缺陷记录。

Markdown 技能的最小测试集

obsidian-markdown 产出.md,静态层只负责确认语法"写得出来",渲染交给动态层。最小集一条笔记打尽:

  • 输入:包含[[Note#Heading]]> [!warning]![[img.png|300]]#nested/tag的笔记
  • 预期:frontmatter 可被 YAML 解析,四类语法各出现一次
  • 判定:frontmatter 缺---或 wikilink 被写成标准 markdown 链接(库内链接必须用[[...]])即判失败

Bases YAML 的三个自检点

skills/obsidian-bases/SKILL.md列了三类高频错误:特殊字符未加引号、公式内外引号不配对、formula.X未定义就被引用。用这份夹具验证:

filters: and: - file.hasTag("task") - 'file.ext == "md"' formulas: days_until_due: 'if(due, (date(due) - today()).days, "")' views: - type: table name: "Active" order: [file.name, formula.days_until_due]
  • 输入:上述.base,库内放 3 篇带task标签的笔记,其中 1 篇故意缺due字段
  • 预期:缺字段的笔记在公式列显示空值,而不是报错
  • 判定:Obsidian 弹 YAML 错误先查引号;公式列整体为空先查过滤条件;函数名拿不准时对照skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md

命令执行层:CLI 与提取工具的闭环验证

obsidian-cli 依赖运行中的 Obsidian,验收口径是"输入与输出对得上";defuddle 是纯提取工具,口径是"内容完整、无导航残留"。

obsidian-cli 命令测试怎么跑闭环

obsidian create name="T1" content="# T1\nstatus: draft" silent obsidian read file="T1" obsidian property:set name="status" value="done" file="T1" obsidian search query="status: done" limit=5
  • 输入:依次执行上面 4 条
  • 预期:read 的返回与写入内容一致,set 之后搜索命中 1 条
  • 判定:命中为 0 时先查file=的名称解析,再看索引是否更新;silent能避免目标笔记弹窗干扰观察

开发向命令用同一模式:改代码 →plugin:reloaddev:errors应无新增报错 →dev:screenshot截图与上一版比对。

defuddle 的内容提取核对

defuddle parse <url> -p title defuddle parse <url> --md | head -20
  • 输入:选 2~3 个真实页面,覆盖文章页、文档页、导航重的页面
  • 预期:title 非空且与页面主标题一致,--md输出不含菜单和广告位文字
  • 判定:输出 token 数相对原始 HTML 降幅不足 30% 时怀疑提取质量;以.md结尾的链接不走该工具,skills/defuddle/SKILL.md已注明这类输入应直接取原文

动态渲染层:三个目测检查点

静态检查替代不了眼睛。用 Obsidian 打开测试库,抽查三处:

  • 笔记切到阅读视图:标注框图标、==高亮==是否生效,嵌入图片是否按指定宽度 300px 显示
  • 打开.base:表格视图公式列是否出值,再切卡片视图看布局是否塌陷,多视图渲染是重灾区
  • 打开.canvas:节点位置与坐标一致,边标签正常显示,锚点方向与fromSide/toSide字段一致

每处抽查记一个通过/失败加一张截图编号,后续回归时直接比对同一编号的截图。

回归回路:何时重跑完整验证

有人问 obsidian-skills 如何验证,答案是按层跑,每层都有判据,不用等发版才做全量。三个触发点:

  • 改过某个SKILL.md或其references/(例如skills/obsidian-markdown/references/CALLOUTS.md),重跑对应技能的最小集
  • 新增语法或字段时,夹具同步加一条"输入 → 预期",与旧用例一起跑
  • 修复失败项后,把同层全部用例重跑一遍再下结论

团队场景下,把静态层的 canvas 脚本挂进流水线即可,一条命令的事,不需要专门的测试框架。

最小验证清单

  • canvas 脚本通过:ID 唯一且为 16 位十六进制,边引用全部解析成功
  • markdown 夹具在阅读视图中:wikilink、标注框、嵌入、frontmatter 四项全部正常渲染
  • .base打开无 YAML 错误,缺字段笔记的公式列显示空值而非报错
  • cli 闭环四命令:read 内容与写入一致,search 恰好命中 1 条
  • defuddle:title 非空,--md输出无导航残留,token 降幅不低于 30%

【免费下载链接】obsidian-skillsAgent skills for Obsidian. Teach your agent to use Obsidian CLI and open formats including Markdown, Bases, JSON Canvas.项目地址: https://gitcode.com/GitHub_Trending/ob/obsidian-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 4:19:37

AI Agent选型指南:Claude Code、Codex、Manus怎么选才匹配?

最近被问得最多的问题&#xff0c;又落到了 AI Agent 身上&#xff1a;Claude Code、Codex、Manus 到底该用哪个&#xff1f;不少人装了一圈&#xff0c;发现每个工具都能聊几句、改几行代码&#xff0c;但真正丢进自己的项目里&#xff0c;很快就卡住了。我说一个可能不太受欢…

作者头像 李华
网站建设 2026/9/6 1:39:53

Matlab雷达干扰样式仿真:从原理到代码实现与调试

简介&#xff1a;本资源是一套面向雷达系统设计与电子对抗研究者的MATLAB仿真工具集&#xff0c;聚焦于典型雷达干扰样式的建模与效果分析&#xff0c;适用于高校通信/雷达方向研究生、电子战领域工程师及信号处理初学者开展抗干扰算法验证与教学实验。压缩包共9个文件&#xf…

作者头像 李华
网站建设 2026/9/6 0:24:20

DBeaver 数据导入实战:3 个阶段把 CSV 批量导入失败率压到最低

DBeaver 数据导入实战&#xff1a;3 个阶段把 CSV 批量导入失败率压到最低 【免费下载链接】dbeaver Free universal database tool and SQL client 项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver 按本文的导入前、导入中、导入后三个阶段逐步操作&#xf…

作者头像 李华
网站建设 2026/9/6 1:43:28

Simulink模型建模规范和标准检查

前言 在基于AutoSar CP架构开发SWC时,会使用到MATLAB/Simulink工具。本文主要对Simulink模型开发过程中,检查模型是否符合建模规范和标准相关的技术和问题进行总结,以便后续学习过程中查漏补缺。 注:本文以MATLAB R2023a版本进行演示。其他版本差异不大,可参考。 模型检查…

作者头像 李华