版本预览

嵌入模型切换

重建索引


v1.6.0 版本更新说明

发布日期:2026年3月30日
版本类型:重大功能更新 + Bug 修复
主题:云端嵌入模型支持 + 搜索质量优化


📋 版本概述

小遥搜索 v1.6.0 正式支持 OpenAI 兼容云端嵌入模型,用户可自由切换本地和云端模型。同时修复了全文搜索在高级嵌入模型下无结果的问题,并优化了混合搜索算法。

核心亮点

  • ☁️ 云端嵌入模型支持:支持 OpenAI、DeepSeek、阿里云等兼容 API

  • 🔄 本地/云端互斥切换:设置页面一键切换,重启生效

  • 🔧 全量重建索引:索引管理页面一键重建所有索引

  • 🐛 Bug 修复:修复全文搜索在高维度嵌入模型下无结果的问题

  • 混合搜索优化:调整算法权重,提升搜索准确度


✨ 新增功能

云端嵌入模型支持

支持的云端服务

服务提供商

API 兼容性

推荐模型

OpenAI

官方标准

text-embedding-3-small, text-embedding-3-large

DeepSeek

OpenAI 兼容

deepseek-embedding

阿里云百炼

OpenAI 兼容

text-embedding-v1, text-embedding-v2

其他

OpenAI 兼容 API

任何兼容 /v1/embeddings 端点的服务

模型切换方式

  1. 打开 设置嵌入模型 标签

  2. 选择 模型类型

  • 本地(BGE-M3,推荐):使用本地 BGE-M3 模型

  • 云端API(有隐私风险):使用 OpenAI 兼容 API

  1. 配置云端参数(如选择云端):

  • API 密钥

  • 端点地址(默认官方 API)

  • 模型名称

  1. 点击 保存设置

  2. 重启应用生效

  3. 根据提示前往索引管理页面 重建索引

注意事项

  • ⚠️ 搜索查询会发送到云端进行处理

  • ✅ 本地文件和索引数据不上传

  • 🔒 切换模型需要重建索引(向量空间不兼容)


全量重建索引功能

重建索引入口

  1. 打开 索引管理 页面

  2. 点击红色 "重建索引" 按钮(在"添加路径"按钮左侧)

  3. 确认后系统将:

  • 清空所有现有索引

  • 查询历史已完成的索引任务

  • 按文件夹路径去重

  • 自动创建重建任务并排队处理

重建进度

  • 重建期间可正常使用旧索引进行搜索

  • 实时显示重建进度(百分比、已处理/总文件数)

  • 支持同时重建多个文件夹路径


🐛 Bug 修复

修复:全文搜索在高维嵌入模型下无结果

问题描述

使用更高维度的云端嵌入模型(如 1536 维的 text-embedding-3-large)时,全文搜索返回空结果。

根本原因

原代码中全文搜索的阈值设置过高(0.5),对于高维向量空间中的文本匹配过于严格。

修复方案

调整全文搜索的阈值逻辑,对不同嵌入模型维度使用不同的阈值策略:

模型维度

搜索阈值

说明

768 维

0.3

BGE-Small-zh 等小模型

1024 维

0.2

BGE-M3 等标准模型

1536 维

0.1

text-embedding-3-large 等高维模型

3072 维

0.05

text-embedding-3-large-3072 等超高维模型

修复文件

  • backend/app/services/search_service.py


优化:混合搜索算法调整

问题描述

原混合搜索算法对语义搜索和全文搜索的权重分配过于简单,导致搜索结果不够准确。

优化方案

  1. 动态权重调整:根据查询类型自动调整权重

  2. 分数归一化:将语义搜索分数和全文搜索分数归一化到 [0, 1] 区间

  3. 相关性增强:优先返回两种搜索都匹配的结果

优化效果

查询类型

原算法

新算法

精确关键词匹配

可能遗漏

优先全文搜索结果

语义相似查询

可能误匹配

优先语义搜索结果

混合查询

简单平均

智能加权 + 相关性增强

优化文件

  • backend/app/services/search_service.py


📚 技术实现

云端嵌入服务架构

技术栈

  • aiohttp - 异步 HTTP 客户端

  • Pydantic - 数据验证

  • tenacity - 自动重试机制

核心特性

# 自动重试配置
@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=2, max=10)
)
async def _call_embeddings_api(self, texts: List[str]):
    # API 调用逻辑

批处理优化

  • 默认批次大小:32(云端 API 限制)

  • 自动调整:根据内容长度动态调整

  • 错误恢复:批次失败时使用零向量填充


索引重建机制

简化实现方案

复用现有 IndexJob 任务系统和 run_full_index_task 后台任务:

  1. 清空索引:删除所有 Faiss 索引文件和 Whoosh 索引目录

  2. 查询历史任务:查找已完成的索引任务,按 folder_path 去重

  3. 创建新任务:为每个唯一路径创建新的 IndexJob 记录

  4. 后台处理:利用 FastAPI BackgroundTasks 自动排队处理

技术优势

  • 无需独立的重建服务,降低复杂度

  • 复用现有任务流程,减少代码量

  • 自动排队,支持多路径重建


🔄 版本升级指南

https://www.dtsola.com/archives/a685353b-7e61-4e02-b24c-620f9e65f621


📦 下载地址


🙏 致谢

感谢以下开源项目的支持:


让我们一起打造更好的本地搜索体验! 🚀


#独立开发者 #知识工作者 #知识库 #AI工具 #内容创作者 #一人公司 #ai搜索 #dify #ragflow #vibecoding

Work Less, Earn More, Enjoy Life.