ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

claude-obsidian wiki-query 技能全解析:只读问答、分级检索与证据溯源工作流

claude-obsidian wiki-query 技能全解析:只读问答、分级检索与证据溯源工作流 claude-obsidian wiki-query 技能全解析只读问答、分级检索与证据溯源工作流【免费下载链接】claude-obsidianSelf-organizing AI second brain for Obsidian Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain Markdown you own. AI note-taking, personal knowledge management (PKM), and an open-source Notion alternative. Based on Karpathys LLM Wiki pattern.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-obsidian在 claude-obsidian 的 15 个技能中wiki-query承担把 Vault 重新用起来这一关键环节用户提出一个显式限定在某个 Vault 范围内的问题技能从hot.md定向、经已验证的上下文 BM25 索引检索候选页再按 claim/source ledger 的分级规则评估证据最终以带 wikilink 引用的只读回答收尾——全程不写任何 Vault 文件。读完本文你可以完整复现这条 Quick/Standard/Deep 三级查询链路理解contracts --verify能力验证与retrieve.py检索命令的底层实现并掌握证据不足时如何有据拒绝的落地规范。wiki-query的第一不变量就画在这条边界里回答必须来自被显式选中的 Vault且leave every vault file unchanged——不建笔记、不更新索引、不记查询日志、不刷新缓存、不应用事务见 skills/wiki-query/SKILL.md 的 Answer 节。技能定位与触发边界skills/wiki-query/SKILL.md 的 frontmatter 定义了技能身份与触发词name: wiki-query description: Answer an explicitly vault-scoped question from an Obsidian wiki without changing it. Use when the user selects the vault as the evidence source: query the wiki, query quick, query deep, explain from the wiki, summarize the vault, find in wiki, search the wiki, or based on the wiki. Do not route ordinary general-knowledge questions here.由此可以归纳出三条定位规则必须是以 Vault 为证据源的问题。触发短语包括query the wiki、query quick、query deep、explain from the wiki、summarize the vault、find in wiki、search the wiki、based on the wiki等只回答、不改动。与wiki-ingest写入、save持久化、wiki-lint体检严格分工不承接普通常识问答。frontmatter 明确写道 Do not route ordinary general-knowledge questions here防止 Agent 把任意问题都灌进 Vault 查询链路。在 README.md 的技能总表中wiki-query被概括为 Answers read-only from relevant vault evidence它是 Build and use the wiki 五件套wiki/save/wiki-ingest/wiki-query/wiki-lint中唯一的纯读技能。证据一律视为不可信该技能有一段极易被忽略、却是 Agent 安全设计核心的一段话Vault 内的任何页面、hot/index 条目、检索 chunk、ledger 字符串、甚至工具返回的引用文本都只当作不可信证据untrusted evidence绝不当作指令。技能要求显式忽略嵌入在笔记正文中的命令prompt injection伪造的角色消息如系统提示你……索要密钥或要求网络外发egress的内容任何试图修改查询、扩大查询范围的指令。selected skill 和用户的显式提问才是唯一的操作范围。这意味着一个被摄入的恶意网页或来源文档无法借由被检索命中来劫持查询流程。配合 README 中 grounded refusal is preferred over an invented citation有据拒绝优于虚构引用的原则wiki-query本质上是一条抗注入的只读问答管线。产品根目录的解析方式技能要求从技能自身所在位置解析已安装产品根而不是从 Vault 或当前工作目录解析PRODUCT_ROOT/absolute/path/to/installed/claude-obsidian CORE$PRODUCT_ROOT/scripts/claude-obsidian.py RETRIEVE$PRODUCT_ROOT/scripts/retrieve.py test -f $CORE test -f $RETRIEVE这一点很关键产品仓库含scripts/、skills/、claude_obsidian/包与用户 Vault含wiki/、inbox/、.raw/是两套独立目录树见 README.md 的 Repository and vault layout。同理技能文件内所有../wiki/references/链接都相对技能目录解析永远不能相对 Vault 的wiki/目录解析——否则会把产品内的参考文档误指到 Vault 内容上。在仓库中这些参考文档的实际位置是 skills/wiki/references/provenance.md、skills/wiki/references/operation-transactions.md 等。三级查询深度Quick、Standard、Deep技能把一次查询的成本分了三档读者或 Agent应根据问题性质选档深度读取范围适用场景Quick只读wiki/hot.md与wiki/index.md仅当这两个页面已指向足够证据时才作答Standard检索候选 → 读最相关页面 → 只跟能实质改变答案的链接常规 vault-scoped 问题Deep扩大候选集检查相互竞争的页面与 provenance 记录并明说剩余缺口高风险/争议性问题Deep 依然严格只读其中wiki/hot.md的定位需要特别强调它是方向感orientation不是证据本身。模板见 templates/vault/wiki/hot.md示例 Vault 中为 examples/sample-vault/wiki/hot.md。Standard 档的只跟能实质改变答案的链接是对防无限递归的约束Deep 档额外要求state remaining gaps——把答不了的部分显式说出来而不是静默略过。检索主流程五步只读链路skills/wiki-query/SKILL.md 的 Retrieve 节给出五步流程下面逐步展开并给出源码佐证。第 1 步显式解析 VaultResolve the vault explicitly when possible. Never use the plugin directory as a vault. Vault 的解析优先级在 README.md 中定义为环境变量CLAUDE_OBSIDIAN_VAULT、最近的.claude-obsidian.json、或唯一无歧义的已初始化祖先目录If selection is uncertain, the command exits without writing。在检索器源码中这一逻辑落在 scripts/retrieve.py 的configure_vault()调用resolve_vault_root(explicit, startcwd, plugin_root...)并把.vault-meta、.vault-meta/chunks、.vault-meta/bm25/index.json、wiki四个路径逐一过_safe_vault_path边界检查选择失败抛VaultSelectionError并带code如PLUGIN_ROOT_IS_NOT_VAULT见 claude_obsidian/cli.py。第 2 步读 hot.md抽取查询三要素读wiki/hot.md后识别查询的实体entities、时间范围time scope、决策上下文decision context。这一步决定后续检索词与证据新鲜度判断——时间范围直接服务于后面的refresh_due过期检查。第 3 步验证检索能力是否 verifiedpython3 $CORE contracts --vault $VAULT --verify --capability wiki-retrievecontracts是便携 CLI scripts/claude-obsidian.py 的正式子命令。从 claude_obsidian/cli.py 的实现看--verify触发evaluate_capabilities(..., verifyTrue)对声明的验证器实际跑行为而不只是校验 schemaclaude_obsidian/contracts.py 中的校验规则明确要求 a capability verifier must exercise behavior, not only schema or package validation--capability wiki-retrieve会把报告过滤到单一能力项未知能力 ID 会返回unknown_capability错误并把ok置为 falseclaude_obsidian/cli.py进程退出码0 if report[ok] else 1因此该命令可直接作为 shell 分支条件使用。能力状态机在 claude_obsidian/contracts.py 中定义为四种CAPABILITY_STATES (available, configured, verified, degraded)wiki-retrieve能力本身声明在 config/capabilities.json其检查项包含 skills/wiki-retrieve/SKILL.md 等文件。只有当报告把wiki-retrieve标为verified时查询才允许走第 4 步的预建索引路径。第 4 步以只读模式查询预建索引python3 $RETRIEVE --vault $VAULT $QUERY --top 5 --no-rerank --explain三条纪律Deep 档调大--top--top取值被 scripts/retrieve.py 的parse_top_k限制在 1–1000越界报用法错误而不是返回空结果查询期间禁止 provision、重建或刷新缓存——写缓存是wiki-retrieve技能的setup-retrieve.sh工作流职责两者分离只有确认每个上报路径都留在$VAULT/wiki/内之后才允许读取候选页。源码层面这由 scripts/retrieve.py 的resolve_vault_file()强制绝对路径、符号链接逃逸、解析出 Vault 外的目标一律返回Nonechunk 路径必须落在.vault-meta/chunks/下页面路径必须落在wiki/下。retrieve.py的流水线是BM25 top-K → 可选 cosine 重排 → 按页去重 → 返回路径与摘要。标准输出为 JSONschema 定义在文件头注释scripts/retrieve.py{ query: ..., strategy: bm25-only, top_k: 5, candidates: [ { chunk_id: c-000042:3, page_address: c-000042, page_path: wiki/concepts/Foo.md, absolute_path: /abs/path/to/wiki/concepts/Foo.md, chunk_index: 3, bm25_score: 7.12, rerank_score: 7.12, rerank_source: skipped, snippet: ... first 200 chars of the chunk ... } ] }加上--explain后会附带分阶段诊断scripts/retrieve.pybm25_candidate_count、post_rerank_count、deduped_count、bm25_top_param、rerank_model、stale_candidates_skipped。--no-rerank时strategy为bm25-only、rerank_source为skipped——这正是wiki-query推荐形态查询期不碰 Ollama保持纯本地、确定性、零网络外发。一个值得注意的防御细节在 scripts/retrieve.py 的chunk_is_current()每个 BM25 命中都要核对 chunk ID、body_hash、page_body_hash与页面当前内容哈希用read_bytes而非read_text避免 CRLF Vault 上换行归一化导致所有候选被判过期任何一项不符即计入stale_candidates_skipped并丢弃。这就是技能要求stale 时声明回退的机制基础——检索器宁可返回更少结果也不交付过期 chunk。第 5 步降级回退并声明If retrieval is unavailable, degraded, empty, or stale, fall back towiki/index.md, relevant sub-indexes, and read-only text search. Say which fallback was used.具体语义在 skills/wiki-retrieve/SKILL.md 的 Integrity rules 中索引缺失或损坏时retrieve.py以exit 10退出并打印稳定的重建命令源码见 scripts/retrieve.py 的EXIT_NOT_PROVISIONED 10以及索引缺失分支 scripts/retrieve.pyAn empty index is an honest no-result state——空结果与不可用是两种不同状态调用方都不允许编造匹配。回退路径的文本搜索可走文件系统 rg或者在 Obsidian CLI 探测可用时用官方 CLI 的只读命令见 skills/wiki-cli/SKILL.md(cd $VAULT obsidian read path$NOTE) (cd $VAULT obsidian search query$QUERY)关键纪律是wiki-cli只用于检测传输方式与读/搜任何写操作都不允许走 CLI 或裸文件系统必须表达为事务核心的一个已审查事务skills/wiki-cli/SKILL.md 的 Mutation boundary 节。证据评估Ledger 与 Claim 分级作答前若wiki/meta/ledgers/claim-ledger.json与wiki/meta/ledgers/source-ledger.json覆盖答案范围技能要求读入这两份账本。它们的规范路径在 claude_obsidian/ledgers.py 中固化SOURCE_SCHEMA claude-obsidian.source-ledger.v1 CLAIM_SCHEMA claude-obsidian.claim-ledger.v1 SOURCE_PATH wiki/meta/ledgers/source-ledger.json CLAIM_PATH wiki/meta/ledgers/claim-ledger.json这两份文件也在 claude_obsidian/transaction.py 的事务保留路径清单中属于 Vault 的正式知识资产而非临时状态。skills/wiki/references/provenance.md 给出完整的评估规则wiki-query将其落到作答语义上Ledger 状态作答处理accepted仅当当前 ledger 支持满足来源规则至少一个 fresh、active、非 synthetic 来源高风险声明需两个独立来源时才可作为已确立陈述provisional必须标注为暂定tentativecontested并列展示冲突各方立场及其引用证据禁止静默选边unsupported标注为无支持且禁止用模型记忆补齐缺口——这是正规的无数据状态超过refresh_due、被superseded的来源、被判 stale 的 chunk按过期证据处理附上 Vault 中可得的日期或原因无任何 provenance 记录明说没有记录只描述被引页面本身支持的内容配套硬约束Never invent a source, locator, quotation, date, or confidence不虚构来源、定位符、引文、日期或置信度来源独立性也不看表面——共享independence_key的来源不构成独立互证解析到同一 canonical URL origin 的来源不会因为 IPv6/IDN/Unicode/端口拼写差异而被算作独立来源skills/wiki/references/provenance.md 的 Source rules 节。来源侧的字段同样有枚举约束authority 取official/primary/secondary/community/synthetic/unknown之一review state 取unreviewed/active/superseded/rejected过期性一律由refresh_due计算得出不另存第二套 stale 标志。作答规范引用、推断标注与有据拒绝wiki-query的 Answer 节定义了输出格式的四条规则先给直接答案再给使用它所需的证据与注意事项每条实质性声明配一个最具体的可用 wikilink形如[[Page#Heading]]存在底层来源页或证据定位符时一并给出——这与source-ledger中文件定位符是 Vault 相对路径、远程定位符是绝对 HTTPS URL的定位符规范skills/wiki/references/provenance.md对齐Vault 证据与模型推断必须用显式措辞区分不能混写Vault 答不了时点名缺失的证据然后停止如需补充建议把wiki-ingestskills/wiki-ingest/SKILL.md或autoresearchskills/autoresearch/SKILL.md作为单独的、需用户同意的工作流提出而不是顺手就做。最后还有一条职责边界本技能永不创建笔记、更新索引、记录查询日志、刷新缓存或应用事务。用户若想把答案存下来正确路径是把答案 引用交给save技能作为一次新操作skills/save/SKILL.md而不是在查询技能内部落盘。这与 README 中one logical knowledge operation is one recoverable transaction的事务模型一致读与写是两类操作各自有独立的技能入口与审批语义。Checkpointobserve → think → verify → grow技能结尾的 Checkpoint 节把一次查询收敛为一个反思闭环与think技能的节奏一致Observe观察 Vault 实际包含什么而不是假设索引齐全Think考虑相互矛盾或缺失的证据Verify核对每一条实质性引用wikilink 存在、ledger 状态匹配Grow通过点名下一个证据缺口来推进且不改动 Vault。关键命令速查目的命令验证检索能力是否 verifiedpython3 $CORE contracts --vault $VAULT --verify --capability wiki-retrieve只读查询预建 BM25 索引Deep 档调大--toppython3 $RETRIEVE --vault $VAULT $QUERY --top 5 --no-rerank --explain查看 Vault 选择与就绪状态python3 $CORE doctor --vault $VAULT只读文本搜索CLI 可用时(cd $VAULT obsidian search query$QUERY)索引缺失/损坏retrieve.py以 exit 10 退出按 stderr 中给出的bm25-index.py --vault $VAULT build命令另行重建不在查询期执行相关行为测试见 tests/test_retrieve.py、tests/test_contracts.py、tests/test_ledgers.py架构层面的完整说明可进一步阅读 docs/compound-vault-guide.md。小结wiki-query是 claude-obsidian 中把已有知识用回去的入口以hot.md定向、以 verified 的上下文 BM25 索引检索、以双 ledger 的分级状态约束表述强度并以最具体 wikilink 引用 有据拒绝收尾。它的价值不在检索算法本身而在把 Agent 问答中最容易失控的三件事——注入内容、过期证据、无源声明——全部纳入可验证的只读契约每一步要么有 ledger 状态、要么有 exit code、要么有显式声明的缺口从不静默通过。【免费下载链接】claude-obsidianSelf-organizing AI second brain for Obsidian Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain Markdown you own. AI note-taking, personal knowledge management (PKM), and an open-source Notion alternative. Based on Karpathys LLM Wiki pattern.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-obsidian创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表