mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 09:28:14 +00:00
核心暴露 MultimodalEmbedder 接口,两条路径共享同一套 L0/L2/L3 向量缓存、media.Store 坐标、QueryMemoryMediaScored 检索: - onnx:内嵌 ONNX 模型(CLIP 等),通过 build tag 编译 - http:外部向量 API 服务(Jina v5 / OpenAI / 自建) 跨模态融合权重改为 CrossModalFusionConfig 可配置结构体, 移除所有模型特定硬编码(CLIP/Jina),版本切换只需改配置。 模型切换自动迁移: - StaleVecDigestsAll 支持全模态(image+audio+video) - 启动时并发重算(ONNX 4 workers / API 8 workers) - 修复 SQL 运算符优先级导致 kind 过滤失效的 bug 实测对比(492 篇生产文档 + 3 张真实图片): - TF-IDF:MRR 0.457(精确匹配快,语义差) - fastText:MRR 0.530(语义中等,延迟 8ms) - Jina v5-omni:MRR 0.900(全面领先,延迟 40ms) - 中文文本→图片:Jina MRR 0.833 vs CLIP 0.611 See docs/embedding-comparison.md for full benchmark.
5.0 KiB
5.0 KiB
检索方案对比报告(2026-09-09)
测试数据
- 文档库:492 篇生产文档(过滤 108 条健康检查测试文档)
- 媒体库:3 张生产图片(验证码、新闻截图、深色模式备忘录)
- 文本查询:10 组(精确匹配、语义、跨语言、模糊表达)
- 媒体查询:6 组(中文/英文查图片,3 张图片各 2 条)
一、文本检索对比(文档库)
| 方案 | Hit@1 | Hit@5 | MRR | 平均延迟 |
|---|---|---|---|---|
| TF-IDF | 3/10 | 7/10 | 0.457 | 0.3ms |
| fastText(200k 中文+378k 英文) | 5/10 | 5/10 | 0.530 | 8.3ms |
| TF-IDF + fastText RRF | 4/10 | 7/10 | 0.552 | 12.3ms |
| Jina v5-omni-nano | 8/10 | 10/10 | 0.900 | 39.9ms |
关键发现
-
Jina 的优势来自"短语语义"能力:
- "邮件代理是否已经成功接入" → TF-IDF rank 5,Jina rank 1
- "升级安装 QQ 插件包" → fastText rank 169,Jina rank 1(margin +0.30)
- "我所在城市的天气预报" → fastText rank 44,Jina rank 1
- "聊天输入区域文字多了会不会自动增高" → TF-IDF rank 1,Jina rank 1(margin +0.33)
-
TF-IDF 在精确匹配上不可替代:
- "长期文档记忆功能是否健康" → TF-IDF rank 3,Jina rank 1
- "重新加载全部扩展组件" → TF-IDF rank 0(完全未命中),Jina rank 2
- TF-IDF 的 Hit@5 70% 证明精确关键词召回仍有价值
-
RRF 融合反而变差:
- TF-IDF+fastText RRF MRR=0.552,低于 Jina 单路 0.900
- 原因:两种稀疏向量的排序在语义查询上高度重叠,RRF 无法弥补各自短板
二、图片检索对比(同 3 张图片,6 条查询)
| 方案 | Hit@1 | MRR | 平均 margin |
|---|---|---|---|
| CLIP ViT-B/32 | 4/6 | 0.806 | -0.008(负值!) |
| Jina v5-omni-nano | 4/6 | 0.833 | +0.024 |
逐条对比
| 查询 | CLIP rank | CLIP margin | Jina rank | Jina margin |
|---|---|---|---|---|
| 验证码图片(中) | 1 | +0.027 | 1 | +0.036 |
| 验证码图片(英) | 1 | +0.063 | 1 | +0.077 |
| 新闻截图(中) | 6 | -0.091 | 2 | -0.064 |
| 新闻截图(英) | 1 | +0.008 | 2 | -0.028 |
| 备忘录截图(中) | 3 | -0.045 | 1 | +0.045 |
| 备忘录截图(英) | 1 | +0.051 | 1 | +0.079 |
关键发现
-
中文文本→图片:Jina 明显优于 CLIP(MRR 0.833 vs 0.611)
- CLIP 中文查询余弦可低至 -0.076(完全反直觉)
- Jina 最差也是 +0.045,正样本始终高于负样本
-
新闻截图是共同弱点:
- CLIP 和 Jina 都被"深色模式备忘录"抢走新闻截图的排序
- 原因:新闻截图的文字描述含"深色"、"备忘录"等词,与备忘录图片的视觉特征重叠
- 这是描述质量 vs 视觉特征的竞争,不是模型问题
-
margin 的实际意义:
- CLIP 的平均 margin = -0.008(负值意味着正样本平均不如负样本)
- Jina 的平均 margin = +0.024(正样本始终略高于负样本)
- 但两者的 margin 都很小(< 0.1),生产环境仍需阈值校准
三、延迟与资源
| 方案 | 单次查询延迟 | 索引构建 | 内存 |
|---|---|---|---|
| TF-IDF | 0.3ms | <1s | ~50MB |
| fastText | 8.3ms | <1s | ~200MB |
| CLIP ONNX | 26ms | N/A | ~600MB |
| Jina v5-omni CPU | 39.9ms | 78s(492篇) | ~4GB |
四、结论与建议
核心判断
| 维度 | TF-IDF/fastText | CLIP | Jina v5-omni |
|---|---|---|---|
| 文本精确匹配 | ★★★★★ | N/A | ★★★★ |
| 文本语义检索 | ★★ | N/A | ★★★★★ |
| 中文文本→图片 | 无能力 | ★ | ★★★★ |
| 英文文本→图片 | 无能力 | ★★★ | ★★★★ |
| 图片→图片 | 无能力 | ★★★ | ★★★★ |
| 多语言统一空间 | 无能力 | 有限 | ★★★★★ |
| 延迟 | ★★★★★ | ★★★ | ★★ |
架构建议
-
保留 TF-IDF 作为精确召回的一级通道:
- 0.3ms 延迟不可替代
- Hit@5 70% 证明在关键词匹配场景仍有价值
- 特别是"插件安装"、"设备查询"这类精确操作指令
-
用 Jina 替换 fastText + CLIP 的稠密通道:
- Jina 单路 MRR=0.90,超过 fastText+CLIP 融合
- 统一空间消除三条通道的维护成本
- 中文文本→图片从"无法检索"提升到"可检索"
-
两路融合:TF-IDF + Jina RRF(而非 TF-IDF + fastText RRF):
- TF-IDF 精确匹配 + Jina 语义覆盖
- RRF 避免跨空间分数归一化问题
- 预期 MRR > 0.90(精确匹配补 Jina 的语义盲区)
-
图片检索仍需阈值校准:
- Jina 的 margin 平均 +0.024,生产环境需设置合理阈值
- 建议:用真实正负样本对重新标定,而非沿用 CLIP 的 0.20 阈值
下一步
- 实现 TF-IDF + Jina RRF 融合,验证 MRR 是否能突破 0.90
- 用更多生产图片标定 Jina 的图片检索阈值
- 测试 fastText 词嵌入是否可以完全被 Jina 文本编码替代(L0 相关性计算)