创建模型
每个嵌入模型接收一个凭证、一个模型名,以及可选的Parameters 对象,与其他模型族的模式完全一致。Parameters 承载 dimensions,即输出向量的维度:
dimensions 的合法取值因模型而异:每张模型卡片通过顶层的 dimensions 字段固定默认值,通过 supported_dimensions 声明允许的取值(例如 text-embedding-v4 接受 2048 / 1536 / 1024 / … / 64)。参见 Embedding 模型卡片。调用模型
通过传入一组输入调用模型。纯文本模型接受list[str];多模态模型还接受 DataBlock 元素:
- 输入按模型的批大小切分(DashScope 文本为 10,OpenAI 为 2048,Gemini 为 100,Ollama 为 512)。
- 所有批次通过
asyncio.gather并发发出。 - 每个批次在 API 专属的可重试错误下独立重试,最多
max_retries次。 - 结果合并为单个
EmbeddingResponse,并保持输入顺序。
EmbeddingResponse 包含:
多模态嵌入
多模态模型(DashScopeEmbeddingModel 搭配 qwen3-vl-embedding 等,GeminiEmbeddingModel 搭配 gemini-embedding-2)在字符串之外还接受 DataBlock 输入(图片支持 URL 或 base64,视频支持 URL):
多模态模型用内容感知分批取代简单的批大小切分:输入会按贪心策略打包,确保每个批次满足模型对总元素数、图片数、视频数的单次请求限制(例如
qwen3-vl-embedding 单次允许 20 个元素 / 5 张图片 / 1 个视频,tongyi-embedding-vision-plus 允许 20 / 64 / 8)。开发者无需自行拆分输入。嵌入缓存
通过embedding_cache 参数传入一个 EmbeddingCacheBase 实现,即可复用已计算过的向量。内置的 FileEmbeddingCache 将每次结果存为 .npy 文件,以请求的 SHA-256 哈希命名:
max_file_number 或 max_cache_size 时,最旧的文件会被优先淘汰。如需其他后端(Redis、SQLite 等),继承 EmbeddingCacheBase 并实现它的四个方法:store、retrieve、remove、clear。
自定义模型 API
新增嵌入模型 API 的步骤与自定义大语言模型 API一致。步骤 1:关联凭证
在你的凭证上重写get_embedding_model_class()(基类默认返回 None,表示”不支持嵌入模型”):
步骤 2:实现模型类
继承EmbeddingModelBase 并实现 _call_api 处理单个批次,分批、并发与重试逻辑全部继承自基类。通过 _get_retryable_exceptions 声明 API 专属的瞬态错误:
EmbeddingModelBase[str],多模态用 EmbeddingModelBase[str | DataBlock],IDE 会据此为调用方提示正确的 inputs 类型。
步骤 3:添加模型卡片(可选)
将 YAML 文件放入实现旁边的_models/ 目录,MyProviderEmbeddingModel.list_models() 即可加载,与 Chat 模型卡片完全一致。
Embedding 模型卡片
EmbeddingModelCard 是通用模型卡片在嵌入场景下的对应物,带有嵌入专属的默认值:输出类型 application/x-embedding 表示该模型产出稠密向量。
一张典型的 YAML 卡片(
text-embedding-v4 的真实卡片):
get_embedding_model_class() 发现模型类: