在 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

还可以打开语义搜索,完全可以代替传统的机械搜索。