语义检索
语义检索是可选项。开启后,关键词检索会与向量检索混合,提升「意思相近但用词不同」的召回。
支持的 Embedding 服务
| 类型 | 说明 | 数据去向 |
|---|---|---|
| Ollama | 本地服务 | 不出本机 |
| LM Studio | 本地服务 | 不出本机 |
| OpenAI 兼容接口 | 云端服务 | 需要你显式同意上传 |
云端上传需要显式授权
本地服务强制使用回环地址;云端服务强制 HTTPS,并且必须由你显式同意上传(allow_cloud_upload),授权会绑定到当前的配置指纹。配置一改,授权自然失效。
开启步骤
- 打开 设置 → 语义检索。
- 选择 Embedding 服务并填写地址 / 密钥。
- 点击「探测连通性」确认能连上。
- 开启开关,等待索引构建完成。
索引状态
设置界面可以看到:
- 已索引 / 待处理 / 失败 / 总数
- 向量维度
- 失败原因
索引以归一化 f32 BLOB 存在 SQLite 里,按 provider + model 指纹区分。换了模型或配置,会自然触发重建。
笔记 chunk 和 DOCX/PDF 文档 chunk 共用同一套语义输入与任务队列;文档 chunk 的稳定 id 是 document:<文档 id>:<序号>,引用会带页码或结构块号。
增量与后台
- 内容 hash 没变就不重建。
- 文件删除、知识库禁用会同步清理索引。
- 后台按批次处理(每批 16 个块),失败重试上限 3 次,指数退避。
- 查询进行中时后台批次会让位,不阻塞界面。
混合召回
开启后,检索走两路召回再融合:
FTS5 关键词召回(笔记 + 文档) ─┐
├→ RRF 融合(k=60)→ 按文件去重 → 结果
向量召回(笔记 + 文档) ─┘- 向量侧有相似度阈值和 top 32 截断。
- 文档 chunk 与笔记 chunk 在同一向量空间里排序,引用会标明来源是笔记还是文档。
- 语义服务不可用、索引为空或配置变化时,会自动回退到关键词检索,并在过程面板里说明原因。
过程面板里能看到什么
Agent 过程面板会显示本次检索的方式:
| 显示 | 含义 |
|---|---|
块级 | 纯关键词块级检索 |
hybrid | 关键词 + 向量混合 |
keyword_fallback | 混合检索回退到了关键词 |
