mcpField
W
wiki-research

wiki-research

github.com/ar9av生产力3.6k2.8k 次安装1 天前更新
代码仓库

关于 wiki-research

wiki-research 是用于 Obsidian wiki 的自主多轮研究技能,面向希望将网络研究整理为长期知识的用户。它检查现有 wiki、补充研究并生成相互链接的来源、概念、实体和综合页面。

主要功能

  1. 01按多个角度开展多轮网络研究
  2. 02检查 wiki 内容与研究配置
  3. 03整合可选命令行检索后端
  4. 04创建来源、概念、实体及综合页面
  5. 05更新索引、日志与研究记录

适用场景

  1. 01将新主题研究整理进 Obsidian wiki
  2. 02补充 wiki 中覆盖不足的问题
  3. 03依据来源创建可追溯的综合页面

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ar9av/obsidian-wiki --skill wiki-research

安装后在 Claude Code 中输入/wiki-research确认已加载。

详细介绍

Wiki 研究——自主多轮研究

你正在围绕某个主题开展自主研究循环,综合所查内容,并将结果归档到 Obsidian wiki,作为永久知识。

开始之前

写作风格: 在起草或改写自然语言 Markdown 之前,请阅读并遵循 llm-wiki/SKILL.md 中的 Writing Profile Resolution 部分。框架架构、来源溯源、安全和特定操作要求优先适用。 WRITING.md 中的偏好仅适用于新起草或改写的自然语言 Markdown;请保留来源内容和结构化记录。

  1. 解析配置 — 遵循 llm-wiki/SKILL.md 中的 Config Resolution Protocol(内联 @name 覆盖 → 沿 CWD 向上查找 .env → 全局配置 → 提示设置)。由此获取 OBSIDIAN_VAULT_PATH 和 OBSIDIAN_LINK_FORMAT(默认值:wikilink)。
  2. 阅读 $OBSIDIAN_VAULT_PATH/index.md,了解 wiki 中已有的内容——不要重新研究 wiki 已充分覆盖的内容
  3. 如果 $OBSIDIAN_VAULT_PATH/hot.md 存在,请阅读——其中汇总了近期背景信息
  4. 如果 $OBSIDIAN_VAULT_PATH/references/research-config.md 存在,请查看——其中可能定义了此知识库的来源偏好、需跳过的域名或置信度规则
  5. 如果 $OBSIDIAN_VAULT_PATH/references/research-backends.md 存在,请查看——其中登记了可选的 CLI 检索后端(社交媒体、视频转录文本、付费 API 等)。将所有可用后端加载到本次会话的工作状态中。

在生成的页面中撰写内部链接时,请根据 llm-wiki/SKILL.md 中的 Link Format 部分,应用 OBSIDIAN_LINK_FORMAT 的值。

如果研究主题不明确,请先向用户确认,然后继续。

研究配置(可选)

如果知识库中存在 references/research-config.md,请阅读并应用其中定义的规则:

  • 来源偏好(例如,优先选择学术来源、避开特定域名)
  • 需跳过的域名
  • 置信度评分调整
  • 特定主题的限制

如果文件不存在,请使用默认设置继续。

研究后端(可选)

如果知识库中存在 references/research-backends.md,请在开始研究前加载。该文件以 YAML 列表的形式定义零个或多个 CLI 检索后端:

backends:
  - name: yt-dlp-transcript      # friendly label
    binary: yt-dlp                # CLI binary (checked with `command -v`)
    invoke: "yt-dlp --skip-download --write-auto-sub --sub-lang en --sub-format json3 -o /tmp/ytvid '{url}'"
    when_to_use: YouTube video URLs, video transcripts
    cost_tier: free               # free | paid
    env_key: ""                   # required env var for paid tiers (empty = always enabled)
    output: text                  # json | text | markdown

  - name: perplexity-sonar
    binary: perplexity
    invoke: "perplexity search '{query}'"
    when_to_use: deep synthesis queries needing multi-source aggregation
    cost_tier: paid
    env_key: PERPLEXITY_API_KEY   # skipped if unset
    output: text

后端可用性检查(在会话开始时运行一次):

  • 对于每个后端:运行 command -v <binary> 2>/dev/null——如果未找到,则标记为不可用,并在运行摘要中注明
  • 对于 paid 后端:还要检查 $env_key 是否非空——如果未设置,则标记为不可用,并注明
  • 构建一份活跃后端列表(通过可用性和密钥检查),供第 1–2 轮使用

调用规则(研究期间按角度/URL 执行):

  • 将 invoke 模板中的 {url} 或 {query} 替换为当前 URL 或搜索查询
  • 捕获标准输出;如果退出代码非零 → 跳过此角度下的该后端,记录简短错误,然后继续
  • 将后端输出纳入同一套主张/概念/实体/矛盾提取流程,并引用后端返回的来源 URL(或查询模式后端的查询字符串)
  • 后端故障绝不会中止研究;始终回退到 WebSearch/WebFetch

免费优先顺序: 对每个角度,先评估 free 后端,再评估 paid 后端。如果免费后端返回的内容足够,可以跳过同一角度的付费后端。

没有 research-backends.md → 完全跳过本节;行为与当前一致。

入门注册表模板

如果用户要求提供示例注册表,请在 $VAULT/references/research-backends.md 中提供此文件:

# Optional CLI backends for wiki-research. Delete rows you don't need.
# Skill docs: .skills/wiki-research/SKILL.md — Research Backends section
backends:
  # --- free / local ---
  - name: defuddle-fetch
    binary: defuddle
    invoke: "defuddle '{url}'"
    when_to_use: any URL — cleaner extraction than WebFetch alone
    cost_tier: free
    env_key: ""
    output: markdown

  - name: yt-dlp-transcript
    binary: yt-dlp
    invoke: "yt-dlp --skip-download --write-auto-sub --sub-lang en --sub-format json3 -o /tmp/ytvid '{url}'"
    when_to_use: YouTube video URLs for transcript extraction
    cost_tier: free
    env_key: ""
    output: text

  # --- paid / gated (skipped when env key is unset) ---
  - name: perplexity-sonar
    binary: perplexity
    invoke: "perplexity search '{query}'"
    when_to_use: deep synthesis queries needing multi-source aggregation
    cost_tier: paid
    env_key: PERPLEXITY_API_KEY
    output: text

第 1 轮 — 广泛调研

目标: 全面了解该主题。

  1. 将主题拆分为 3-5 个不同角度(例如,对于“向量数据库”:它们是什么、何时使用、主流实现、权衡取舍、生产环境中的注意事项)
  2. 针对每个角度,使用不同表述运行 2-3 次 WebSearch 查询
  3. 对每个角度下排名靠前的 2-3 个结果,使用 WebFetch(如果可用,也可以使用 defuddle <url> — 提取结果更简洁)获取内容。对于每个 URL,还要调用 when_to_use 与之匹配的任何活跃后端(例如,YouTube URL 会触发 yt-dlp-transcript);将其输出与 WebFetch 结果一并纳入提取,并引用后端返回的源 URL。
  4. 从每个获取的页面中提取:
    • 关键主张 — 来源明确陈述的内容
    • 概念 — 引入的思想、术语、框架
    • 实体 — 提及的工具、人物、组织
    • 矛盾 — 不同来源之间意见不一致之处

持续记录已覆盖和缺失的内容。

第 2 轮 — 补充空缺

目标: 补齐第 1 轮遗留的空缺。

回顾第 1 轮的产出:

  • 来源提出了哪些问题,却没有给出答案?
  • 来源之间有哪些矛盾?
  • 哪些角度的资料覆盖不足?

针对这些空缺运行 最多 5 次定向搜索。优先选择一手资料、官方文档和权威分析,而非链接聚合网站。对于补缺查询,还要调用任何活跃的查询模式后端(例如,替换其 invoke 模板中的 {query},调用 perplexity-sonar);将结果连同后端名称作为引用上下文,一并纳入提取。

将发现添加到工作集。更新矛盾列表。

第 3 轮 — 综合核查

目标: 化解矛盾;确认资料深度充足。

如果仍有重大矛盾未解决:

  • 最后进行一轮定向搜索(2-3 次),寻找权威的解释
  • 如果无法解决,请在综合页面中明确标出该矛盾

如果矛盾较轻微,或第 2 轮后主题的覆盖已较充分,则跳过进一步搜索并开始归档。

停止条件: 达到所需深度或完成 3 轮后即停止 — 不要无限循环。

归档 — 编写 Wiki 页面

将所有发现整理到四个输出区域的 Wiki 页面中:

1. sources/ — 每个主要参考资料对应一个页面

对于每个重要来源(通常共 4-8 个页面):

---
title: >-
  <Source title>
category: references
tags: [<2-4 domain tags>]
sources:
  - "<URL>"
source_url: "<URL>"
created: <ISO-8601 timestamp>
updated: <obsidian-wiki memory now>
summary: >-
  <1-2 sentences describing what this source covers, ≤200 chars>
provenance:
  extracted: 0.X
  inferred: 0.X
  ambiguous: 0.X
base_confidence: <0.17 + 0.5 × classify(url) for a single source>
lifecycle: draft
lifecycle_changed: <obsidian-wiki memory now --date>
---

正文:标题、URL、涵盖内容、关键主张(带出处标记)、局限性。

2. concepts/ — 每个实质性概念对应一个页面

对于从来源中提取出的每个重要概念:

使用标准概念 frontmatter 和正文。将概念相互链接,并链接到来源页面。

3. entities/ — 工具、组织、人物

对于遇到的每个重要实体(工具、库、公司、重要作者):

使用标准实体 frontmatter。链接回使用该实体的概念,以及提及该实体的来源。

4. synthesis/Research: [Topic].md — 综合总览

主要产出:对所有发现进行结构化综合。

---
title: >-
  Research: <Topic>
category: synthesis
tags: [<3-5 domain tags>, research]
sources: [<list of source URLs or page paths>]
created: <ISO-8601 timestamp>
updated: <obsidian-wiki memory now>
summary: >-
  Synthesis of <N>-round research on <topic>. Covers <core findings in ≤200 chars>.
provenance:
  extracted: 0.X
  inferred: 0.X
  ambiguous: 0.X
base_confidence: <min(N_unique_sources/3,1.0)×0.5 + avg_source_quality×0.5>
lifecycle: draft
lifecycle_changed: <obsidian-wiki memory now --date>
---

# Research: <Topic>

## Overview
<2-4 sentence executive summary of what the research found>

## Key Findings
<Bulleted list of the most important claims, each with a [[source page]] citation>

## Core Concepts
<Links to concept pages created, with one-line descriptions>

## Entities & Tools
<Links to entity pages, with one-line descriptions>

## Contradictions & Open Questions
<Where sources disagree or where the research hit limits>

## Sources Consulted
<Linked list of all source pages>

交叉链接

归档所有页面后:

  • 每个概念页面都应至少链接到 2 个来源页面
  • 每个来源页面都应链接到其提供参考的概念页面
  • 综合页面应链接到所有生成的概念、实体和来源页面

检查 index.md 中是否已有相同主题的页面 — 合并到现有页面,而不是创建重复页面。

更新跟踪文件

.manifest.json —— 添加一个 research 条目:

{
  "type": "research",
  "topic": "<topic>",
  "researched_at": "TIMESTAMP",
  "rounds_completed": 3,
  "sources_fetched": N,
  "pages_created": ["..."],
  "pages_updated": ["..."]
}

一次加锁调用即可更新索引、日志和热缓存:

obsidian-wiki memory sync WIKI_RESEARCH \
  topic="<topic>" rounds=<N> sources_fetched=<N> \
  pages_created=<M> backends_used="<name,...|none>" \
  --takeaways "<the research topic and its core finding, in one line>"

不要在日志字段中列出你创建的每个页面——memory sync 会根据磁盘内容协调索引,而冗长的字段只会挤占热缓存。如果研究仍在进行,请记录下来:obsidian-wiki memory todo add "<open question>" --origin synthesis/<page>.md。

切勿手动编辑 index.md、log.md 或 hot.md——该命令会获取锁,防止并行写入者丢失你的更新。

完整流程请参阅 .skills/llm-wiki/references/MEMORY.md。

质量检查清单

  • 已完成 3 轮(或因深度足够而停止)
  • 综合页面已创建于 synthesis/Research: [Topic].md
  • 已为主要参考资料编写来源页面
  • 已为重要条目编写概念和实体页面
  • 已在综合页面中标记矛盾
  • 所有页面均已交叉链接
  • 已更新 index.md、log.md、hot.md、.manifest.json
  • 已报告后端摘要:哪些后端处于活动状态,哪些被跳过(可执行文件不可用/未设置密钥/发生错误),以及原因

写入知识库后刷新 QMD

QMD 是搜索索引,而非事实来源。如果 $QMD_WIKI_COLLECTION 为空或未设置,请跳过此步骤。仅在此技能写入或重写知识库 Markdown 文件后运行。如果 QMD 刷新失败,不要回滚知识库更改;请单独报告 QMD 状态。

如果已设置 $QMD_CLI,请使用它;否则使用 qmd。

${QMD_CLI:-qmd} update

如果输出提示需要向量或嵌入可能已过时,请运行:

${QMD_CLI:-qmd} embed

使用以下任一方式验证集合:

${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"

或者,在已知具体页面路径时:

${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5

记录以下其中一项:

  • QMD 已刷新:更新 + 嵌入 + 已验证
  • QMD 已刷新:仅更新 + 已验证
  • QMD 已跳过:QMD_WIKI_COLLECTION 未设置
  • QMD 已跳过:qmd CLI 不可用
  • QMD 失败:<简短错误摘要>

评论

支持 Markdown