Files
HomeAgent/docs/embedding-comparison.md
JianFeeeee 6c2039f5c9 feat(vector): pluggable multimodal vector space
核心暴露 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.
2026-09-09 17:38:34 +08:00

5.0 KiB
Raw Permalink Blame History

检索方案对比报告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
fastText200k 中文+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

关键发现

  1. Jina 的优势来自"短语语义"能力

    • "邮件代理是否已经成功接入" → TF-IDF rank 5Jina rank 1
    • "升级安装 QQ 插件包" → fastText rank 169Jina rank 1margin +0.30
    • "我所在城市的天气预报" → fastText rank 44Jina rank 1
    • "聊天输入区域文字多了会不会自动增高" → TF-IDF rank 1Jina rank 1margin +0.33
  2. TF-IDF 在精确匹配上不可替代

    • "长期文档记忆功能是否健康" → TF-IDF rank 3Jina rank 1
    • "重新加载全部扩展组件" → TF-IDF rank 0完全未命中Jina rank 2
    • TF-IDF 的 Hit@5 70% 证明精确关键词召回仍有价值
  3. 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

关键发现

  1. 中文文本→图片Jina 明显优于 CLIPMRR 0.833 vs 0.611

    • CLIP 中文查询余弦可低至 -0.076(完全反直觉)
    • Jina 最差也是 +0.045,正样本始终高于负样本
  2. 新闻截图是共同弱点

    • CLIP 和 Jina 都被"深色模式备忘录"抢走新闻截图的排序
    • 原因:新闻截图的文字描述含"深色"、"备忘录"等词,与备忘录图片的视觉特征重叠
    • 这是描述质量 vs 视觉特征的竞争,不是模型问题
  3. 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 78s492篇 ~4GB

四、结论与建议

核心判断

维度 TF-IDF/fastText CLIP Jina v5-omni
文本精确匹配 ★★★★★ N/A ★★★★
文本语义检索 ★★ N/A ★★★★★
中文文本→图片 无能力 ★★★★
英文文本→图片 无能力 ★★★ ★★★★
图片→图片 无能力 ★★★ ★★★★
多语言统一空间 无能力 有限 ★★★★★
延迟 ★★★★★ ★★★ ★★

架构建议

  1. 保留 TF-IDF 作为精确召回的一级通道

    • 0.3ms 延迟不可替代
    • Hit@5 70% 证明在关键词匹配场景仍有价值
    • 特别是"插件安装"、"设备查询"这类精确操作指令
  2. 用 Jina 替换 fastText + CLIP 的稠密通道

    • Jina 单路 MRR=0.90,超过 fastText+CLIP 融合
    • 统一空间消除三条通道的维护成本
    • 中文文本→图片从"无法检索"提升到"可检索"
  3. 两路融合TF-IDF + Jina RRF(而非 TF-IDF + fastText RRF

    • TF-IDF 精确匹配 + Jina 语义覆盖
    • RRF 避免跨空间分数归一化问题
    • 预期 MRR > 0.90(精确匹配补 Jina 的语义盲区)
  4. 图片检索仍需阈值校准

    • Jina 的 margin 平均 +0.024,生产环境需设置合理阈值
    • 建议:用真实正负样本对重新标定,而非沿用 CLIP 的 0.20 阈值

下一步

  • 实现 TF-IDF + Jina RRF 融合,验证 MRR 是否能突破 0.90
  • 用更多生产图片标定 Jina 的图片检索阈值
  • 测试 fastText 词嵌入是否可以完全被 Jina 文本编码替代L0 相关性计算)