关于 wiki-retrieve
为 Obsidian vault 中的 wiki 页面建立本地检索索引的技能,面向需要查找相关段落的用户。它结合上下文前缀、BM25 检索和可选重排,且不会改动规范笔记。
主要功能
- 01按段落切分页面并生成前缀
- 02构建本地 BM25 索引
- 03检索片段并按页面去重
- 04可选使用 Ollama 重排
- 05校验路径、哈希和索引完整性
适用场景
- 01从 wiki 页面查找相关段落
- 02在不调用模型的情况下执行词法检索
- 03对 BM25 候选结果进行重排
- 04检查索引状态并评估检索效果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agricidaniel/ claude-obsidian --skill wiki-retrieve安装后在 Claude Code 中输入/wiki-retrieve确认已加载。
详细介绍
检索相关段落
此扩展会从 wiki/ 提取搜索数据并写入 .vault-meta/。它不会更改规范笔记。始终显式传入所选知识库。
从此技能自身的位置解析已安装产品根目录,而不是从知识库或当前工作目录解析:
PRODUCT_ROOT=/absolute/path/to/installed/claude-obsidian
PREFIX="$PRODUCT_ROOT/scripts/contextual-prefix.py"
BM25="$PRODUCT_ROOT/scripts/bm25-index.py"
RETRIEVE="$PRODUCT_ROOT/scripts/retrieve.py"
RERANK="$PRODUCT_ROOT/scripts/rerank.py"
test -f "$PREFIX" && test -f "$BM25" && test -f "$RETRIEVE" && test -f "$RERANK"
流程
contextual-prefix.py按段落边界拆分页面,并保存原始块及简短的页面级前缀。bm25-index.py基于上下文化文本,使用标准库构建本地 BM25 索引。retrieve.py选出 BM25 候选项,可选择对其重新排序,排除无效记录,按页面去重,并返回路径和片段。- 调用方读取返回的页面并进行综合;检索输出本身并非证据。
本地配置
先预览,再构建合成前缀,全程不进行网络外传:
python3 "$PREFIX" --vault "$VAULT" --all --no-llm --peek
python3 "$PREFIX" --vault "$VAULT" --all --no-llm
python3 "$BM25" --vault "$VAULT" build
python3 "$RETRIEVE" --vault "$VAULT" "wiki" --top 1 --no-rerank --explain
分块文件和索引文件均为可丢弃的运行时状态。增量前缀处理会跳过分块哈希、页面哈希以及提供方/模型配置文件仍匹配的记录。没有该配置文件的旧记录会在显式构建时重新生成。完整扫描会移除已删除页面对应的多余记录;前缀处理器会在更改分块集合之前使 BM25 索引失效,避免提供混有过期数据的索引。 前缀和 BM25 构建操作与所有其他写入操作共用知识库级变更锁;知识库正忙时,操作会安全失败,不会发布不完整的索引。
上下文前缀隐私
合成前缀仅使用本地 frontmatter 和页面文本。显式的 Anthropic API 配置可能会将页面正文发送到本机之外,并且需要用户同意、--allow-egress 以及已配置的 API 密钥。没有 Claude CLI 生成层,也没有隐式的子进程回退机制。切勿根据 API 密钥或已安装的二进制文件推断用户已同意。先预览涉及的数据范围,并说明将向哪个提供方发送哪些数据。
远程 Ollama 端点也需要明确批准和
--allow-remote-ollama;默认的重排器仅接受 localhost。
本地模型前缀是另一项需要显式启用的选项。使用已安装的精确 name:tag;不会启动服务器,也不会安装或拉取模型:
python3 "$PREFIX" --vault "$VAULT" --all --local-ollama --ollama-model installed:tag --peek
python3 "$PREFIX" --vault "$VAULT" --all --local-ollama --ollama-model installed:tag
前缀适配器会在发送页面文本前,验证服务器已禁用云功能,并核验本地模型身份。若预检不受支持或不可用,则仅为新增或已更改的分块回退到合成前缀;同一端点和模型生成的前缀会保留,因此短暂的服务中断不会更改未变更知识库的分块和 BM25 索引。这项要求可能会排除较旧的 Ollama 服务器。
重排和切片会在查询、页面、分块或嵌入缓存操作之前,执行相同的仅限本地验证。--allow-remote-ollama 批准的是端点,而非允许服务器委托给云端。
有关确切策略、云模型选择和验证限制,请参阅前缀提供方。重排器有其独立的模型和端点策略;选择本地前缀不会启用重排。
查询
对于严格只读的查询,请使用预构建的 BM25 索引:
python3 "$RETRIEVE" --vault "$VAULT" "$QUERY" --top 5 --no-rerank --explain
如果明确要求重排,请省略 --no-rerank。默认使用 Ollama 的多语言模型 nomic-embed-text-v2-moe(约 958 MB);该产品绝不会自动拉取此模型。如需使用已安装的体积更小、面向英语的 v1.5 模型,请显式传入 --model nomic-embed-text。Nomic 模型使用 search_query: 作为查询前缀,使用 search_document: 作为候选文本前缀。Nomic v2 的输入上下文为 512 个 token,Ollama 默认会截断较长的嵌入输入;BM25 仍会对完整分块评分。嵌入缓存依据精确模型、已验证的摘要、输入方案和精确前缀输入的哈希进行区分。本地 Ollama 服务缺失、HTTP 回复格式错误、所选模型缺失、向量不可用,或任何候选项嵌入失败时,都会对完整结果集回退到原始 BM25 顺序;绝不会混用余弦相似度和 BM25 的分数尺度。
查询输入限制为 8,000 个规范化字符,结果数量必须介于 1 和 1,000 之间。查询超长或限制无效时,会返回可操作的用法错误,而不会表现为搜索成功但结果为空。未指定标签的模型请求只会匹配已安装的无标签名称或其 :latest 别名;其他标签必须显式指定。
需要时请使用直接诊断:
python3 "$BM25" --vault "$VAULT" stats
python3 "$BM25" --vault "$VAULT" query "$QUERY" --top 10
python3 "$RERANK" --vault "$VAULT" "$QUERY" --peek
python3 "$RERANK" --vault "$VAULT" "$QUERY" --model nomic-embed-text --peek
完整性规则
- 仅接受相对分块路径和页面路径,且解析后的目标分别必须位于
$VAULT/.vault-meta/chunks/和$VAULT/wiki/下。 - 拒绝缺少哈希的旧版分块记录;在构建或提供缓存记录之前,要求分块正文、页面和索引的哈希均匹配。
- 拒绝绝对路径、符号链接越界、页面缺失、分块 ID 不匹配、页面哈希已更改,以及过时的索引/分块哈希对。
- 对完整候选集进行重排,然后按页面去重,最后应用
--top。 - 空索引表示确实没有结果。索引缺失或损坏时,
retrieve.py会以退出码 10 退出,并提供稳定的重建命令;调用方会回退到标准的知识库查询/文本搜索路径,不会捏造匹配结果。 - 除非可复现的特定知识库基准测试得出了相关数据,否则不要引用基准测试百分比。
使用 bench --queries FILE --vault VAULT,根据明确标注评估预构建索引。有关召回率、MRR、缺失标签和负例,请参阅离线检索评估。此测量过程为只读,不会静默重建索引,也不会调用模型。
检查点
留意缓存就绪状态和隐私边界,判断是否需要词法或语义排序,验证返回路径和来源的新鲜度,并通过衡量维护中的本地查询集所揭示的检索遗漏来逐步改进。