在 obsidian 里面使用 ai 语义搜索和展示不同笔记相似度是一个很不错的功能。这次使用 Similar Notes 插件(官方插件市场)基本实现了,过程中有点曲折,这里记录一下。
首先此插件作者就对语义模型做了推荐说明:“For Chinese, Japanese, and Korean text, multilingual models like bge-m 3 (via Ollama) often outperform OpenAI models in both quality and token efficiency.“也可以使用自带的 paraphrase-multilingual-MiniLM-L12-v2 模型,考虑到本来就有 ollama 而且 bge-m 3 性能自然更好,于是我这里选择 bge-m 3 进行语义理解。
bge-m 3 说是专为中文/多语言设计,上下文长度是 8192 tokens(约 6000 字中文),所以还不错。
使用 ollama 安装之后,在插件里面选择,开始 index,发现很多报错,研究之后认为是很多笔记几千字,超出了上下文长度。
这存在问题,笔记虽长,但还没到 8192 tokens,和 ai 讨论后认为是 ollama 配置覆盖了模型默认参数 bge-m 3 的 8192 tokens 上下文是模型能力,但 Ollama 会强制限制上下文长度,可以使用下面指令查询:
ollama show bge-m 3 --modelfile # 查看实际配置
我这里输出发现就是 Modelfile 中缺少关键参数 :PARAMETER num_ctx 8192
于是就是默认,设置为 2048 tokens,这不行。
只能创建自定义 Modelfile:随便找一个文件夹创建文件 Modelfile(注意无扩展名,可以先 txt 再删掉后缀),粘贴以下内容:
FROM bge-m3:latest
PARAMETER num_ctx 8192
TEMPLATE {{ .Prompt }}
FROM bge-m3:latest 是基于现有模型
PARAMETER num_ctx 8192 就是解除上下文限制
TEMPLATE {{ .Prompt }} 是保留原有模板
然后就在 PowerShell 中执行:
# 导航到 Modelfile 所在目录
cd C:\xxx
# 创建自定义模型
ollama create bge-m3-custom -f Modelfile
看输出没问题就可以了。
之后就是去 obsidian 内的插件 simiar notes 设置改为模型 bge-m 3-custom 就行。再 index 就没有报错了。
我个人到这里问题就解决了。
最后 ob 内输入指令:
Show in Sidebar
就可以看到右边栏的关联度展示了
Similar Notes: Semantic search
还可以打开语义搜索,完全可以代替传统的机械搜索。