关于 resolve-recipe-ingredient-link
用于将 Obsidian 中未解析的食材 wikilink 匹配到 product 笔记的技能,采用语义判断,并规定歧义处理和新建笔记的方式。
主要功能
- 01检索带 product 标签的笔记
- 02按语义为候选项排序
- 03结合来源行消除歧义
- 04仍不明确时询问用户
- 05必要时新建 product 笔记
- 06使用无别名链接
适用场景
- 01解析食谱中的食材链接
- 02区分名称相似的食材
- 03为缺失食材创建笔记
- 04应用解析结果且不使用别名
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gkwa/ volcanicviper --skill resolve-recipe-ingredient-link安装后在 Claude Code 中输入/resolve-recipe-ingredient-link确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
tile.jsontests/build_prompt.pylinkform.promptfooconfig.yamlproducts.txtpromptfooconfig.yamlREADME.md详细介绍
解析未解析的 Obsidian 双向链接
给定一个未解析的双向链接(例如 [[leeks]]),找到最匹配的现有笔记。
二进制文件:/Users/mtm/go/bin/islandiguana
库路径:/Users/mtm/Documents/Obsidian Vault
方法
链接文本是方括号内的名称(例如,[[leeks]] 中的 leeks)。
对于带管道的双向链接([[leek|leeks]]),链接文本是 | 前面的部分。
步骤 1 — 枚举候选项。
解析候选项来自标记为 product 的笔记。
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.tags[] == "product"'
步骤 2 — 阅读完整候选列表并进行语义排序。
阅读 islandiguana 返回的每个文件名,并根据链接文本对整个列表进行排序。
不要使用关键词搜索预先筛选列表。
匹配依据是语义,而不是字面形式——关键词筛选可能会丢弃关键词无法预料的优质候选项(名为 wild ramps.md 的笔记可以解析 [[leeks]],尽管它与“leek”没有任何共同字母)。
目前产品池约有 1,300 条笔记,规模足够小,可以一次完整阅读。
步骤 3 — 按三级规则解析。
第 1 级 — 名称几乎完全匹配。
如果候选项与链接文本完全匹配,或仅存在单复数差异,则解析为该候选项。
示例:leek.md 解析 [[leeks]]。
第 2 级 — 根据来源行消歧。
如果不存在几乎完全匹配的候选项,请阅读来源笔记中包含该双向链接的完整行,而不只是方括号内的文本。
链接名词左侧的描述性词语用于消歧。
示例:行 2 teaspoons whole black [[peppercorns]] 包含“black”和“whole”,因此目标是“whole black peppercorns”,应解析为 black peppercorn.md,而不是字面匹配的 sichuan peppercorns.md。
第 3 级 — 询问用户。
如果来源行仍无法确定选项(例如,[[peppercorns]] to taste 没有指定类型),请列出候选项并询问用户选择哪一个。
第 4 级 — 创建新的产品笔记。
如果没有任何现有候选项是合理的解析结果,不要勉强匹配错误的候选项,也不要让链接悬空。
创建一条以链接文本命名的新产品笔记,以解析该双向链接,并遵循以下产品笔记格式。
近似替代不算解析成功:feta cheese 不是 cotija cheese,将前者解析为后者是错误的,尽管两者都是易碎奶酪。
如果原料是不同的产品,优先新建笔记,而不是替代匹配。
新笔记的文件名应为不带方括号的链接文本,并遵循库中其他笔记的大小写规则(全部小写,单词之间用空格),例如 [[cotija cheese]] 对应 cotija cheese.md。
使用以下模板,从任意现有产品笔记(例如 habanero peppers.md)中逐字复制 store 布尔值 frontmatter 和 store 部分,确保新笔记与库的结构完全一致。
将 tags 设为 product,再加上一个表示该原料类别的标签(例如 dairy、vegetable、spice)。
将 Google 图片搜索链接作为产品参考,因为新笔记暂时没有购买页面。
如果没有经过验证的图片 URL,请省略 pic frontmatter 字段和主图,以避免链接失效。
---
albertsons: false
amazon_com: false
amazon_fresh: false
central_co_op: false
chef_s_store: false
costco: false
dong_hing_market: false
east_african_imports_restaurant: false
franz_bakery: false
fred_meyer: false
grocery_outlet: false
h_mart: false
hau_hau_market: false
home_depot: false
india_depot_indian_grocery_kitchen_bakery: false
lam_s_seafood_asian_market: false
lowe_s: false
m2m: false
pacific_supply: false
pcc: false
public_storage: false
qfc: false
safeway: false
tags:
- product
- <category>
target: false
than_son_tofu_and_bakery: false
trader_joes: false
uwajimaya: false
walgreens: false
walmart: false
whole_foods: false
---
<Product Name>
Google image search: https://www.google.com/search?q=<product+name>&tbm=isch
## [[Amazon.com]]
- [x] shopping
## [[Central Co-op]]
- [x] shopping
## [[Grocery Outlet]]
- [x] shopping
## [[Chef's Store]]
- [x] shopping
## [[Hau Hau Market]]
- [x] shopping
## [[Lam's Seafood Asian Market]]
- [x] shopping
## [[M2M]]
- [x] shopping
## [[Pacific Supply]]
- [x] shopping
## [[PCC]]
- [x] shopping
## [[QFC]]
- [x] shopping
## [[Safeway]]
- [x] shopping
## [[Target]]
- [x] shopping
## [[Trader Joes]]
- [x] shopping
## [[Uwajimaya]]
- [x] shopping
## [[Walgreens]]
- [x] shopping
## [[Walmart]]
- [x] shopping
## [[Whole Foods]]
- [x] shopping
## [[Costco]]
- [x] shopping
## [[Fred Meyer]]
- [x] shopping
## [[H Mart]]
- [x] shopping
## [[Dong Hing Market]]
- [x] shopping
## [[Amazon Fresh]]
- [x] shopping
## [[Home Depot]]
- [x] shopping
## [[Franz Bakery]]
- [x] shopping
## [[Lowe's]]
- [x] shopping
## [[Than Son Tofu and Bakery]]
- [x] shopping
## [[India Depot Indian Grocery, Kitchen & Bakery]]
- [x] shopping
## [[Albertsons]]
- [x] shopping
## [[East African Imports & Restaurant]]
- [x] shopping
## [[Public Storage]]
- [x] shopping
步骤 4 — 报告。
报告已考虑的候选项数量和解析结果;若需询问用户,则提供排序后的候选列表;若没有候选项匹配,则报告新建的产品笔记。
除非用户明确要求,否则不要编辑双向链接——先告知解析结果。
编写已解析的链接
收到应用解析结果的请求时,请比较显示词(原始链接文本,例如 leeks)和解析后的笔记名称(例如 leek),以选择链接形式。
成分链接中绝不要使用别名形式([[note|displayed]])。
当显示词与笔记名称不同时,请改写食谱文本以匹配笔记名称,并保留普通链接,而不是用别名掩盖不匹配。
将词形变化部分放在方括号外是可以的;使用别名则不行。
此规则也适用于标题链接,不仅限于成分链接。
链接到同一笔记中的标题时,请使用不带别名的相对形式 [[#Heading]],而不是 [[note#Heading|Display]]。
规则不容违反:绝不要引入别名,即使 AskUserQuestion 选项文本提出了别名也不行。
请按以下顺序判断:
情况 0 — 先吸收相邻的消歧词。
如果解析结果使用了第 2 层——源行中方括号外的描述性词语用于确定笔记——且该词语紧邻 wikilink,请先将它纳入方括号内。
然后对扩展后的短语进行以下比较,而不是只比较方括号中的文本。
示例:行 2 teaspoons whole black [[peppercorns]],笔记 black peppercorn。
第 2 层消歧词 "black" 紧邻链接左侧,因此显示短语从 peppercorns 扩展为 black peppercorns。
笔记名称现在是该短语的前缀,因此链接写作 [[black peppercorn]]s,并将相邻的 black 纳入其中——这一行变为 2 teaspoons whole [[black peppercorn]]s。
这优于将消歧词留在外面的写法 black [[black peppercorn|peppercorns]],因为这样会让 "black" 留在方括号外,并重复笔记名称中已有的词。
原则:用于第 2 层消歧的词应纳入链接文本,而不是孤零零地留在别名旁边。
情况 1 — 显示词与笔记名称相同。
使用不带别名和后缀的普通链接。
示例:显示词 leek,笔记名称 leek,写作 [[leek]]。
情况 2 — 笔记名称是显示词的前缀。
将笔记名称保留在方括号内,并将剩余后缀放在外面。
示例:显示词 leeks,笔记名称 leek,写作 [[leek]]s。
示例:显示词 boxes,笔记名称 box,写作 [[box]]es。
情况 3 — 笔记名称不是显示词的前缀。
词干发生了变化,因此无法拆出后缀。不要使用别名。
请改写食谱文本,使用笔记中的词,并使用普通链接,同时调整周围措辞,使这一行读起来自然。
示例:显示词 leaves,笔记名称 leaf,写作 [[leaf]]——修改这一行,使其使用 "leaf",而不是留下 [[leaf|leaves]]。
如果改写这一行以使用笔记中的词会显得生硬,那么应优先创建或选择名称与原文中的成分相符的笔记,而不是退而使用别名。
备注
始终将库路径加上引号——路径中包含空格。