我有大约 2000 篇 Obsidian 笔记,一直想让 AI 能基于我自己的知识库回答问题,这周终于做出来了。
技术方案
Obsidian MD 文件 → 分块 → Embedding → 存入 pgvector → 查询时做相似度搜索 → 送给 Claude 生成回答
选型
- Embedding 模型:
text-embedding-3-small(OpenAI,便宜且够用) - 向量数据库:Supabase pgvector(省去单独部署 Pinecone)
- 问答模型:Claude 3.5 Haiku(速度快、便宜)
- 前端:简单的 Next.js 页面
分块策略(这个最关键)
不要按固定字数分,要按「自然段落 + 标题层级」分。我用的是 langchain 的 MarkdownTextSplitter,效果比固定字数好很多。
成本:2000 篇笔记全量 Embedding 花了约 $0.3,之后每次查询约 $0.002。
代码在文末,欢迎 fork。
2 Replies
#1
请问分块策略这里,对于有大量内链([[wiki links]])的 Obsidian 笔记,你是怎么处理的?直接保留还是去掉?我担心内链文字会干扰 embedding 的质量。
#2
我用的是把内链替换成纯文字(把 [[Note Title]] 换成 Note Title),然后把被引用的笔记片段也加进 chunk 的 metadata 里。查询时会额外拉取关联笔记的摘要,效果比忽略内链好很多。
Login to join the discussion
Login with GitHub