通过 Ollama 将本地 LLM 集成到 Obsidian 笔记中

Ollama 已经提出了一种将大型语言模型(LLMs)集成到 Obsidian 笔记中的方法,以实现对话式交互和概念搜索。通过将本地 LLM 与索引工具结合,用户可以超越精确关键词搜索,根据概念和含义来查询笔记。

使用嵌入实现概念搜索

为了让模型能够与大量笔记进行对话,系统必须识别并仅提供最相关的文本部分,因为大多数模型无法一次性处理整个知识库。这通过使用嵌入创建索引来实现,使系统能够搜索概念而非精确短语。

构建索引器

可以配置一个 Obsidian 插件,在加载时对笔记进行索引,并将进度持久化以避免重复生成。以下技术方案使用 Llama Index 进行索引过程:

  • 数据存储:初始化一个内存中的数据存储,可选择 Chroma DB 或默认的 Llama Index 存储。
  • 持久化:定义存储上下文,确保索引被保存到本地目录。
  • 读取:使用 MarkdownReader 加载和处理 Markdown 文件,Llama Index 会理解词语的含义及其关系。

虽然可以使用 OpenAI 服务进行嵌入,但 Ollama 提供了嵌入功能,而 LangChain 为希望完全自托管环境的用户提供了本地替代方案。

通过检索增强生成(RAG)查询笔记

一旦建立索引,系统就可以检索相关的笔记片段,以构建 LLM 的系统提示。此过程遵循检索增强生成(RAG)工作流:

  1. 初始化:从持久化存储中初始化索引。
  2. 检索:配置检索器(例如,将 similarityTopK 设置为 5),以查找与用户提示最匹配的项。
  3. 提示构建:将检索到的文本块连接并插入系统提示中,指示模型使用这些特定文本回答提示。
  4. 生成:通过 ollama-node 库执行本地模型(如 llama2)以生成最终响应。

为了保持速度并确保检索到的文本适合模型的输入上下文窗口,建议使用较小的模型。在提供的示例中,使用了五个每块 256 个标记的文本块。

笔记集成的扩展用例

除了简单的问答,将 LLM 集成到笔记工具中还能支持多种高级生产力工作流:

  • 自动摘要:为长篇笔记生成简洁的摘要。
  • 元数据增强:识别最佳关键词添加到笔记的前端信息中,以增强文档间的连接性。
  • Obsidian 到 Anki 管道:从笔记中生成问答对,导出到 Anki 用于间隔重复学习。

这些工作流可以通过尝试不同的模型权重和提示工程来优化,以适应特定任务。

Sources

相关

  • 项目
  • Dispatch
  • 项目
  • Dispatch
  • 项目