Repository navigation
fix(search-index): 补齐远端向量索引一致性与异常响应校验 - #185
Merged
2977094657 merged 7 commits intoOct 10, 2026
Merged
2977094657 merged 7 commits into
2977094657 merged 7 commits into
Conversation
本地语义检索原先只有三个 ONNX 编码器模型:权重要下载到本机,推理也只能在本机跑。WeMM-Embedding-2B 是解码器结构的多模态向量模型,官方只提供 GGUF,走不通现有的 ONNX + tokenizer.json 通路。 新增 backend 为 remote 的模型规格:文本仍在本机切分,向量交给局域网内的服务计算。模型目录加入 wemm-2b-remote(2048 维),在下载列表里直接标记为已就绪,不下载任何文件;远端服务需要 tokenizer 才能把文本切成模型认得的形式,首次使用时从服务端拉取 tokenizer.json 并缓存到模型目录,之后直接用缓存。
目录里的地址只是默认值,换机器或换端口就只能改仓库文件。把 remote_endpoint 补进账号设置:留空沿用目录默认地址,非空则覆盖,前端在远端模型的卡片里提供输入框。 地址必须列进 DEFAULTS:_configure 只比较 DEFAULTS 里的键,否则「只改地址」会被当成没有改动而直接返回旧配置。
Windows 上代理客户端会把代理写进注册表,httpx 默认会读取并使用它。向量服务跑在同一台机器或局域网内时,请求会被代理拦下,报错表现为 502 或连接失败:实测把地址指向 127.0.0.1 上已关闭的端口,拿到的是代理的 502,而不是连接被拒绝,完全看不出真正原因。 新增 is_lan_endpoint() 判断是否需要直连:回环、.local、单标签主机名,以及 ai.providers.is_lan_address 认的 RFC 1918 / IPv6 ULA 网段;局域网定义直接复用该函数,与「允许局域网 IP 的模型服务使用 HTTP」保持同一套口径。远端 tokenizer 的拉取同样处理。
- 远端推理固定走 POST {base}/v1/embeddings({model,input,encoding_format}),
按 data[].index 取向量并兼容 base64 编码;Ollama、LM Studio、vLLM 等可直接
接入,WeMM 等退化为目录预设,不再要求服务方实现本工具自有接口。
- 账号配置新增远端模型名、可选 API Key、允许自签名证书;保存时探测向量维度
并在每次响应校验,维度不一致直接报错而不是给出无意义结果。
- 索引身份指纹(协议+地址+模型名+维度)变化时重建 generation,避免换服务后
旧向量与新查询落在不同向量空间却继续复用。
- 远端不提供 tokenizer.json 时按字符上界切块,不再中断整轮建索引;查询串按
字符上限收口。
- 代理绕过扩展到 100.64.0.0/10(Tailscale 等覆盖网络)与链路本地地址,明文
HTTP 的允许范围保持不变。
- 新增 POST /api/ai/local-search/remote/test,供前端「测试连接」列出服务模型
并探测维度;模型名不被服务端校验,因此清单里没有时给出明确提示。
- 远端模型卡片提供服务地址、模型名、可选 API Key、允许自签名证书,以及 WeMM 2B / Ollama / LM Studio 快速预设与「测试连接」(列出服务上的模型并 探测维度,模型名对不上时直接提示)。 - 底部隐私说明按当前模型是否为远端切换措辞:远端检索会把文本发送到该服务, 本机模型仍是「不上传聊天」。 - AI 服务页标签改为「本机或你指定的服务」,不再笼统承诺检索只在本机运行。
xiaoshengbao
marked this pull request as ready for review
October 9, 2026 16:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
配套修复 #184 的远端 OpenAI 兼容向量实现。切换服务或模型后,旧索引仍使用建立时的模型快照查询,避免新查询向量与旧索引落在不同空间;全账号部分索引同步保存身份指纹,防止后续任务错误触发全量重建。
同时拒绝重复、缺失、越界的响应序号,以及 NaN、Infinity、float32 溢出、零向量和批次维度不一致。远端 tokenizer 在下载与读取缓存时均验证可加载性,坏文件回退字符切块并可重新获取,缓存按远端模型身份隔离。
新增 37 项隔离回归,覆盖 Ollama/OpenAI 请求约定、乱序与 base64 响应、建索引与查询、模型切换、旧版本索引回退、密钥轮换、部分进度复用和 tokenizer 恢复;既有部分索引覆盖测试改用真实目录模型,保留原断言。
合并顺序
分支基于 #184 的
6cac45d,保留作者提交与署名。请先合并 #184(建议 merge commit),再合并本 PR;在 #184 合并前,本 PR 的差异会包含其基础实现。若 #184 使用 squash/rebase,需要先将配套修复重放到更新后的 main。验证
9bcfdaa11dd00ad17e286a4b79c3270c6233923a(包含 feat(search-index): 远端向量推理改用 OpenAI 兼容协议,支持 Ollama / WeMM 等服务 #184 原实现及本 PR 修复)。完整检查记录。两平台均覆盖 AI/本地检索回归、聊天日期导航回归、前端测试与生成构建、桌面契约测试,以及打包后 AI 运行时自检。所有远端回归均使用固定合成数据与模拟 HTTP 服务,不访问真实账号或付费模型 API;不将模拟验证描述为真实 Ollama 实测。
上游 fork PR 的工作流仍需维护者批准;上面的结果来自 fork 中同一份工作流和同一提交,不能替代上游的分支保护检查。
协议参考:Ollama OpenAI compatibility — /v1/embeddings。请求使用
model、字符串数组input和encoding_format: float,支持 Ollama 根地址、/v1或完整/v1/embeddings地址。