Obsidian知识库搜索服务器

一个为Obsidian知识库提供搜索和读取功能的服务器,支持AI代理的信息检索和知识管理。

  • by alexsmirnov
  • Python
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 alexsmirnov/mcp-server-continue

使用说明

黑曜石保险库的模型上下文协议(MCP)服务器

这是一个附带的研究和学习项目,主要关注人工智能代理和信息检索,以及人工智能工具的评估。

服务器允许访问 黑曜石.md 带有搜索和读取工具的Vault。Obsidian是一个纯文本Markdown编辑器,将所有笔记文件保存在一个文件夹中。该格式使其成为AI代理的完美伴侣和知识存储。

自2024年以来,我确实使用了AI编码代理(Claude Code、Cursor)与Obsidian.md Vault的组合,类似于 Andrej Karpathy法学硕士维基,但他的提议有点复杂。 有超过1500个笔记,代理经常错过重要信息,所以我决定创建一个搜索工具,了解我使用的知识组织

提供功能

网络深度研究

web_research 该工具是一个AI代理,其功能与 Perplaxity.ai 根据互联网上的公共信息回答问题。它经过优化,可以回答技术或学术问题。 核心回路:

  1. 生成网络搜索查询
  2. 从搜索结果URL中获取内容。没有试图绕过机器人程序保护,但支持广泛的公共来源:Arxiv.org文章、Github存储库、Reddit论坛、维基百科、pdf文档-从中提取信息的特殊情况,如切换到Reddit API而不是阅读网页,或使用Github原始格式而不是html页面。
  3. 使用LLM从获取结果中提取相关信息,减少主代理上下文
  4. 反思步骤,分析结果并决定完成研究或重复循环以填补知识空白
  5. 最终答案生成器,创建简短答案、详细解释如何得出结论以及支持答案的相关链接

评价结果

为了节省成本,使用Gamini Flash lite或GPT 5.4 nano等小型模型进行了评估,但问题很少。 GAIA数据集 -60%回答20个问题 DRACO数据集 -约40%,主要是因为答案不如评估标准中预期的详细

评估代码不在此存储库中,它是团队范围内人工智能软件开发工具内部项目的一部分,旨在优化我的创业流程 乔布斯弗洛.从那个项目移植的工具。

黑曜石拱顶RAG

obsidian_search 是混合向量+BM25搜索引擎,主要是经典的RAG。它针对我使用的Vault组织进行了优化

注释格式假设

我确实用相同的模式保存所有笔记,索引工具使用预期的格式将笔记分割成块并生成额外的元数据。由特殊的克劳德代码技能强制执行的格式,用于处理所有新的诺顿。

  1. Frontmatter属性:
    1. title -短句是关于什么的
    2. description -3-4个句子描述笔记内容。用作类似的摘要 猛禽 几个块的组合摘要
    3. tags -我有一组预定义的标签,将笔记按3个维度进行划分:知识领域(人工智能、编程、财务等)、笔记类型(文章、教程、行动项等)和狭义主题(编程语言、工具类型、活动)。该工具允许检索标签分类并对其进行过滤
  2. 笔记内容-所有笔记均遵循科学论文格式,每一部分由第一级或第二级标题分隔。语义组块将笔记按部分分割。笔记之间的链接使用[[Wikilinks]格式,也提取并存储在数据库中。它允许图形化导航
  3. 笔记大小-保持不超过200行

索引

该工具按模式抓取vault文件夹,并提取所有标记文件。解析每个文件以提取frontmatter属性,按标头(不超过500个令牌)拆分,并将其与元信息一起保存到数据库中。块内容和描述也存储为向量嵌入。创建的块没有重叠,积极的搜索结果与邻居相结合。

额外 摘要 LLM从整个笔记内容中创建块,以增加进入搜索结果的机会。

由vault内容更改触发或从命令行显式触发的重新索引。

搜索

通过LLM创建的查询 低血压 查询本身用于全文搜索,并为矢量搜索生成答案。这类似于 qmd降价搜索

通过Reranker API调用(Cohere或Voiage.ai)过滤的数据库搜索结果,或来自LanceDB的倒数排名融合。RRFReranker根据排名位置而不是原始分数来融合结果,因此它避免了必须使向量和全文分数具有可比性。

第二个过滤使用LLM来选择重新关联到查询的块。结果块与其相邻块组合在一起(因此,如果选择了笔记中的第5个块,则搜索返回4-6个块的组合)

附加过滤器

要缩小搜索范围,可选参数:

  • tags 结果中必须存在的标签列表
  • path 文件路径模式 我有两个特别的笔记, 标签.md 分类法,以及 文件夹.md 描述保险库组织的MCP服务器提供了阅读它们的工具和说明

评估

我确实使用了一个简单的评估工具,该工具对My Vault快照执行查询,并计算预期单词(精度)和不需要单词(召回)的数量。共25个问题,F1得分~0.9

用法

服务器仅使用单个LLM API提供程序。我确实有 LiteLLM AI网关(LLM代理) ,但它可以与 Openrouter

克隆存储库,创建 .env 文件来自 env.example ,然后运行

# Create vault index
uv run --project <local copy> mcps --vault <Vault Folder> --reindex
# run as HTTP MCP Server
uv run --project <local copy> mcps --vault <Vault Folder> --port 1234

使用http协议,所有AI工具都可以使用单个服务器。我确实将其用作所有项目的共享知识库和内存。

码头工人

将服务器构建为具有流式HTTP传输的独立容器并运行:

# Build image
docker build -t mcps:local .

# Run container (vault and secrets are mounted/injected explicitly)
docker run --rm --env-file .env -e VAULT=/vault -v <host-vault-path>:/vault -p 8000:8000 mcps:local

服务器可在以下位置访问 http://localhost:8000/mcp.