问题域/PD-238

Embedding 提供者抽象

Embedding Provider Abstraction

通过 Protocol 接口统一多种嵌入模型提供者,支持本地和远程 API 的即插即用切换

子问题

1.Dense vs Sparse 嵌入统一接口

2.多提供者切换

3.API 密钥与认证管理

4.本地模型跨实例内存共享(SPLADE 类级缓存)

5.OpenAI 兼容协议复用(Jina 通过 base_url 复用 OpenAI SDK)

6.BM25 自定义语料训练与内置编码器切换

各项目的解法1 solutions

Signals

横向对比

维度zvec
接口定义@runtime_checkable Protocol[MD] 泛型,单方法 embed(),鸭子类型
提供者数量5 家:OpenAI/Qwen/Jina/SentenceTransformer/BM25
Dense-Sparse统一双 Protocol 分离,Qwen 同时提供 Dense+Sparse 实现
依赖管理require_module 懒加载,按需导入,友好错误提示
缓存策略LRU 缓存 API 结果 + ClassVar 类级缓存本地模型
多模态支持泛型 MD 支持 TEXT/IMAGE/AUDIO,当前仅 TEXT 有实现
API兼容复用Jina 复用 OpenAI SDK 通过 base_url 切换端点

最佳实践

1.用 Protocol 而非 ABC 定义接口,允许鸭子类型

2.require_module 懒加载:延迟导入可选 SDK 并给出 pip install 提示

3.ClassVar 类级模型缓存:多实例共享同一本地模型减少内存

4.ClassVar 维度查表:_MODEL_DIMENSIONS 存储模型默认维度自动推断