多模态向量:把文本、图片与视频放进同一个向量空间

有些向量模型不只接受文本,还接受图片与视频,而它们在标准 embeddings 端点上会被拒绝。本文给出应发送的结构、用量如何计数,以及它能替代什么。

发布 2026-09-12 · 更新 2026-09-29 · KeepRouter Editorial · 4 分钟阅读

三种带类型输入(文本、图片、视频)汇聚成一个向量块
带类型的文字与媒体输入形成向量表示;建立检索索引前,应先明确一条记录的边界。

先给结论:向量就是一组数,而多模态向量模型能用同一个空间里的文本、图片与视频生成这组数。这个特性正是使用它的理由:一张图片与描述它的一句话会靠得很近,于是跨两者的检索变成对同一个索引的一次查询,而不是「先转写、再描述、再对描述做向量化」的流水线。

端点不同,而且这不是小毛病

有些上游把这些模型放在与普通文本向量不同的操作上。把这类模型发到标准 embeddings 端点,会得到明确错误,提示该模型不支持这个 API。这就是本站把它们放在独立模态下、并在模型页指向 POST /v1/embeddings/multimodal 而不是文本端点的原因。

发布错误端点比不发布更糟:客户端会照着模型页抄一个看起来能用的示例,然后被拒绝。本站遵循的规则是,模型页上的端点就是真正能服务该模型的端点。

请求结构

输入是带类型的部件数组,而不是一个裸字符串,因此纯文本请求仍然可用,但需要显式声明:

curl https://keeprouter.com/v1/embeddings/multimodal \
  -H "Authorization: Bearer $KEEPROUTER_KEY" -H "Content-Type: application/json" \
  -d '{"model":"doubao-embedding-vision-251215","input":[
        {"type":"text","text":"桌上的一架纸飞机"},
        {"type":"image_url","image_url":{"url":"https://keeprouter.com/logo-512.png"}}
      ]}'

网关会把响应归一化成 OpenAI 的列表形式,因此即使上游返回单个对象,读取 data[0].embedding 的既有代码仍可工作。它也接受纯字符串或字符串数组并自动包装成部件,所以纯文本调用不需要另写一条代码路径。

用量如何计数

响应里的用量会把媒体与文本分开。一次带一张小图与一句短文本的请求返回 362 个 prompt token,其中 334 个是图片 token,28 个是文本 token。这份明细是看清成本来源的诚实方式,也解释了为什么一个看起来很小的请求仍可能被计到几百。

上游对图片 token 的收费高于文本 token。本站的价格表每个模型只有一个输入费率,因此公布的是文本费率,媒体 token 也按它计费。实际效果是运营方吸收了折扣,而不是多收;在这样的费率下,全部差异也就是每次调用几分之一美分。如果将来图片流量变得重要,正确的做法是增加第二个输入费率,而不是提高文本费率。

什么时候该用它

当你手里的查询与语料属于不同种类,而你想要一次覆盖两者的排序时,用多模态向量模型:

  • 商品目录里的视觉搜索:买家的一句话要匹配到一张照片。
  • 去重:面对截图、视频帧与文字笔记混杂的档案。
  • 多模态助手的检索:让一个问题直接取回相关画面,而不必在前面加一步图片描述。

当任务需要的是文字而不是相似度时,请换别的工具。如果你必须读出图片里的文字,那是 OCR;如果你必须用句子描述图片内容,那是视觉模型。向量模型返回的是数字,它的职责是让相似的东西靠近,而不是解释它们。

生成向量前先定义一个目录条目

在商品搜索原型中,一张商品图及其说明可以描述一个条目,无关图片应保持为独立条目。索引和查询使用一致的表示方法,再用已知图片与文本配对检查检索。KeepRouter API 参考定义该路由;豆包检索教程补充有限向量检查与评估方法。向量请求成功并不能证明搜索结果有用。

实践要点

维度由模型固定。 本站该模型返回 2048 维向量。把这个宽度写进你的表结构并固定下来,因为以后换模型意味着重新向量化整个语料,而不是改一个查询。

上下文很大但并非无限。 公布的上下文窗口是 131,072 token,对文档与视频抽帧来说很宽裕,但它仍然是有限值。长输入会按上游实现被截断或拒绝,因此请有意识地分块。

一次向量化,多次复用。 向量的价值来自语料只嵌入一次、却被查询很多次。把向量库当作持久产物,把嵌入调用当作构建步骤,而不是在请求处理函数里顺手做的事。

多模态模型 API 说明解释了每种模态各自端点的规则,模型目录列出当前费率与每个模型的确切端点,视频任务指南则覆盖了本站另一条异步路径。

常见问题

为什么不能直接在 /v1/embeddings 上加一个图片字段?

因为提供该能力的上游把它实现成了独立操作。这类模型在标准 embeddings 端点上会被明确拒绝,若在那里发布就等于宣传一个无法服务的端点。网关为它们单独设置模态,并在模型页指向多模态路径。

图片和文本的费率一样吗?

上游对图片 token 的收费高于文本 token,但价格表只有一个输入费率,因此公布的是文本费率,媒体 token 也按文本计费。这是运营方吸收的折扣,而不会多收;在这样的费率下,每次调用差异只有几分之一美分。

接受哪些输入?

文本、图片与视频,以带类型的部件放在同一个请求里。本站该模型返回 2048 维向量,上下文窗口为 131,072 token,其用量明细会把图片 token 与文本 token 分开,便于你核对请求是如何计数的。

参考的一手资料

本文最近复核 2026-09-29

  1. [1] Google Gemini API embeddings documentation (multimodal input, per-type limits)
  2. [2] OpenAI embeddings guide (request and response shape)
  3. [3] KeepRouter API reference

继续阅读

← 全部文章 · 模型与价格 · 获取 API Key