Skip to main content
嵌入模型(Embedding)将文本(多模态模型还包括图片、视频等媒体)转换为稠密向量,支撑语义检索、RAG 与记忆召回。AgentScope 当前提供以下模型类:

创建模型

每个嵌入模型接收一个凭证、一个模型名,以及可选的 Parameters 对象,与其他模型族的模式完全一致。Parameters 承载 dimensions,即输出向量的维度:
所有嵌入模型共享的构造参数:
dimensions 的合法取值因模型而异:每张模型卡片通过顶层的 dimensions 字段固定默认值,通过 supported_dimensions 声明允许的取值(例如 text-embedding-v4 接受 2048 / 1536 / 1024 / … / 64)。参见 Embedding 模型卡片

调用模型

通过传入一组输入调用模型。纯文本模型接受 list[str];多模态模型还接受 DataBlock 元素:
分批与重试由框架自动处理:
  1. 输入按模型的批大小切分(DashScope 文本为 10,OpenAI 为 2048,Gemini 为 100,Ollama 为 512)。
  2. 所有批次通过 asyncio.gather 并发发出。
  3. 每个批次在 API 专属的可重试错误下独立重试,最多 max_retries 次。
  4. 结果合并为单个 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_numbermax_cache_size 时,最旧的文件会被优先淘汰。如需其他后端(Redis、SQLite 等),继承 EmbeddingCacheBase 并实现它的四个方法:storeretrieveremoveclear

自定义模型 API

新增嵌入模型 API 的步骤与自定义大语言模型 API一致。

步骤 1:关联凭证

在你的凭证上重写 get_embedding_model_class()(基类默认返回 None,表示”不支持嵌入模型”):

步骤 2:实现模型类

继承 EmbeddingModelBase 并实现 _call_api 处理单个批次,分批、并发与重试逻辑全部继承自基类。通过 _get_retryable_exceptions 声明 API 专属的瞬态错误:
按模型 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() 发现模型类: