认识 Sift:一个为笔记之外一切而生的知识库
太长不看
Sift 是我花了三四个月时间开发的个人知识库,它可以导入任何东西——URL、PDF、书签、网页、视频和音频文件——然后让所有这些内容都可以按语义搜索,而不仅仅是关键词搜索,而且还能感知你保存内容的时间。它运行在你自己的硬件上,用你自己保存的材料作为来源来回答问题,并且和 Obsidian 是互补关系而非替代关系。我已经在 github.com/pablooliva/sift 上将它开源了。这篇文章讲的是它为什么存在、我在构建过程中学到了什么,以及如果你克隆它可以期待什么。
我的书签帮我省了钱
几周前,我在为这个网站设计一个多媒体发布流水线。我需要语音合成和视频生成工具,心里有一个大致的预算,大概每月 56 美元,分布在几个 SaaS 订阅上。
在做决定之前,我搜索了我的 Sift 知识库。它找到了我一周前收藏的两个 ComfyUI 集成:用于本地语音克隆的 Qwen3-TTS 和支持人像的开源视频生成工具 LTX-2.3。我当时只是把它们作为简单的 URL 书签保存下来,附了简短的描述——这是最省力的导入方式了。
就这两个搜索结果,把整个流水线从付费 SaaS 方案变成了 0 美元的本地方案。
我根本不记得保存过它们。用关键词搜索我也找不到它们。我搜索的不是"ComfyUI"或"Qwen3-TTS"。我搜索的是它们能做什么。Sift 理解了我查询的含义,并将其匹配到我收藏后就几乎没再想过的内容上。
这就是一个真正有效的外部知识库所做的事情。它在正确的时刻呈现正确的信息,即使是你忘了自己保存过的内容——尤其是当这些内容来自你信任的来源时。
Sift 到底是什么
如果你一直在关注这个系列——第一篇、第二篇——Sift 就是下一层:所有不属于本地文本文件的内容。
简单来说:Sift 是一个个人知识库,可以导入任何类型的文档并使其可查询。你可以按语义搜索,也可以问一个问题,然后得到一个引用了你自己材料的答案。
它主要运行在你自己的硬件上。我用的是家里的服务器,但任何装了 Docker 的机器都能跑。我在某些 AI 工作流中确实使用了 LLM 推理服务提供商,但你的数据始终是你的。
它不是 Obsidian 的替代品,而是它的伙伴。Obsidian 存放我的工作笔记——我写的、思考的、以及相互关联的内容。Sift 存放其他一切——我遇到过的、保存过的、将来想找到的内容。
它是怎么开发出来的
Sift 始于两个问题。
第一个是实用层面的:如果我有一个单一的容器来存放所有经手的东西,不管是什么媒体格式呢?一个地方,URL、PDF 和文本笔记最终都在同一个系统里可搜索?
第二个是方法论层面的:我能不能用规范驱动开发(SDD)配合 AI 编程代理,从头到尾构建一个真正的项目?不是快速原型,而是一个有正式规范、批判性评审和记录在案的决策的工程化系统?
三个月和 549 次提交之后,两个问题的答案都是肯定的,但有一些注意事项。
技术选型
我选择了 txtai 作为基础,因为它是开箱即用的:嵌入向量(embeddings)、向量搜索和 Web API 集中在一个 Python 包里,依赖很少。不需要单独配置向量数据库,也不需要额外运行服务。对于概念验证来说,这一点很重要。
但我很快发现了"开箱即用"在实践中到底意味着什么。一些默认模型已经过时了。技术栈的某些部分比独立替代方案表现差。让我快速上手的便利性,在系统成熟后变成了制约。
这导致了大量的定制化改造。我把向量后端换成了 Qdrant,以获得更好的性能和持久化。我集成了 Graphiti 和 Neo4j 来实现知识图谱功能——不仅理解我保存了什么,还理解概念之间的关系。我还加入了 Together.ai 作为 RAG 生成的 LLM 后端,因为本地模型在从检索到的上下文中生成综合性回答方面还不够好。
回过头来看,我也许应该在某个时候完全放弃 txtai,从零开始构建一个自定义方案。但这个决定本身也是一个教训:有时候重新开始的成本会超过解决现有限制的成本,尤其是当系统已经在产生价值的时候。ComfyUI 的故事就是在这些限制存在的情况下发生的。
工程流程
不那么显眼但同样重要的是开发流程本身。Sift 有 45 多份正式的规范文档——需求、研究、批判性评审、实施总结。每一个重要的决策都在写代码之前先落到纸面上。每份规范都经过了批判性评审,通常是由 Claude Code 充当设计上的第二视角来完成。我开发的一个 Claude Code 插件 让这个开发工作流运转得非常顺畅。
对于一个个人项目来说,这听起来像是过度工程化了,也许确实是。但这些 SDD 产出物以我意想不到的方式展现了价值。当我在做出某个设计决策六周后遇到 bug 时,规范文档告诉了我当初为什么要那样选择。当我想替换某个组件时,研究文档告诉了我之前已经评估和排除了哪些替代方案。流程文档本身变成了一种知识管理方式。
谨慎享用
我将它开源,是因为我认为它有用,而不是因为它已经打磨完美。以下是你应该了解的:
txtai 有实实在在的局限性。 默认技术栈中的一些模型已经过时,如果是今天从头开始,我可能会选择不同的基础。运行原始的 txtai 应用程序需要 20 GB 的 VRAM,而且是持续占用。这是不可接受的,也是我进行所有重构的最大原因之一,当然也顺带添加和增强了功能。我所做的定制化改造是可以工作的,集成得也比较干净,但它们增加了在更精简的架构下本不需要的复杂性。
知识图谱前景可观但成本不低。 Graphiti 使用 LLM 调用来从文档中提取实体和关系;大约每个分块需要 12-15 次调用。这累积得很快。把我所有的 Obsidian 笔记导入 Sift 的知识图谱是我想做的事,但还没做,因为 API 成本不容忽视。目前图谱有 796 个实体,但只有 19 个关系,这意味着 97.7% 的节点是孤立的。它能用,但还不够密集,无法呈现一个成熟知识图谱应该能发现的那种关联。
它运行在家庭服务器上。 Docker 部署需要一台配置不错的机器。这不是一个轻量级应用。我会在仓库中记录硬件要求,但准备好你需要的不止一个 Raspberry Pi。
这是一个带有个人取舍的个人项目。 有些决策专门为我的工作流做了优化。有些代码可以写得更整洁。SDD 规范文档记录了背后的推理,所以你可以自己判断我的取舍是否符合你的需求。
为什么选择开源
有几个原因,更多是出于个人考量而非战略考量。
知识管理系列 声称构建了一个生产级别的系统。没有公开仓库的话,你只能听我说。有了公开仓库,你可以验证、克隆、自己跑起来。
工程流程——45 多份规范、批判性评审、研究文档——和代码一样有意思。我还没在 GitHub 上见过另一个个人项目附带这种级别的流程文档。如果 SDD 方法引起了你的共鸣,可以看看 SDD/ 目录。
而且说实话,生态系统中还没有完全类似的东西存在。RAG 演示有很多,txtai 示例也有,知识图谱教程也不少。但这个系统将 txtai + Graphiti + Neo4j + Qdrant + MCP server 结合在一起,最终由 AI 代理来消费使用。这些技术放在一起用,听起来是不是很迷人?如果你的答案是肯定的……那就是同道中人了。
仓库已上线:github.com/pablooliva/sift。
下一步
这篇文章是公告篇。技术深度解析将在系列的下一篇文章中展开,届时我会详细介绍 Sift 的架构。如果你想在克隆之前先了解它怎么运作,那就等那一篇。
之后,我会介绍 MCP 和 Claude Code 如何将 Sift、CK Search 和 Obsidian 连接成一个统一的系统,让 AI 代理可以同时跨所有这些工具进行查询。到那时,每个独立工具才真正实现了 1+1+1 大于 3 的效果。
目前,如果你感兴趣,仓库里有 README 和安装说明。克隆它、折腾它、对着它流口水。它就是为这个存在的。
本文是 AI 驱动的知识管理系列 的一部分。上一篇:用 CK Search 在笔记中寻找意义。下一篇:超越 Obsidian——用 Sift 构建外部知识库。