向量化 - 多模态(DashScope 协议)

适用于多模态向量化模型(如 qwen3-vl-embedding)。支持文本、图片、视频的多模态融合向量化,采用 DashScope 原生协议。

请求体用 input.contents 数组承载多模态内容(与《文本向量-OpenAI格式》的 input 字符串写法不同),响应在 output.embeddings 里返回向量。

接口概述

  • 输入模态:文本、图片(URL 或 Base64)、视频(URL),一个请求里可以混着传。
  • 两种用法:enable_fusiontrue 时把所有 content 融合成 一个 向量;不融合时每个 content 各出一个 向量,用 type 标注它是哪种模态。
  • 同步返回,无需轮询。

接口地址

POST https://test.jw-info.com/v1/embeddings

请求头

Header必填说明
Content-Type固定 application/json
AuthorizationBearer <你的 API Key>;也可用 x-api-key

请求参数

参数类型必填说明
modelstring模型名称,如 qwen3-vl-embedding
inputobject输入容器
input.contentsarray多模态内容数组,每个元素可包含 textimagevideo
input.contents[].textstring文本内容
input.contents[].imagestring图片 URL 或 Base64
input.contents[].videostring视频 URL
parametersobject向量控制参数
parameters.enable_fusionbool是否融合多模态向量。true:所有 content 融合为一个向量;false:每个 content 各生成一个向量。默认 false
parameters.dimensioninteger输出向量维度,可选 2560(默认)、204815361024768512256
parameters.output_typestring向量输出格式,目前仅支持 dense
parameters.instructstring自定义任务提示(建议英文),可小幅提升检索效果
parameters.fpsfloat视频抽帧比例,取值 0~1,默认 1.0

注意:enable_fusion 默认是 false。要拿到「整段内容合成一个向量」的效果,请显式传 "enable_fusion": true;否则返回的向量个数与 input.contents 等长。

请求示例

多模态融合向量化(一个向量):

{
  "model": "qwen3-vl-embedding",
  "input": {
    "contents": [
      {"text": "商品描述文本"},
      {"image": "https://example.com/img.png"},
      {"video": "https://example.com/video.mp4"}
    ]
  },
  "parameters": {
    "enable_fusion": true
  }
}

各模态独立向量化(每个 content 一个向量):

{
  "model": "qwen3-vl-embedding",
  "input": {
    "contents": [
      {"text": "商品描述文本"},
      {"image": "https://example.com/img.png"}
    ]
  },
  "parameters": {
    "enable_fusion": false
  }
}

响应参数

参数类型说明
outputobject输出信息
output.embeddingsarray向量结果列表
output.embeddings[].embeddingarray向量 float 数组,维度由 parameters.dimension 决定
output.embeddings[].indexint对应输入 contents 数组下标
output.embeddings[].typestring向量类型:融合模式下为 fusion;不融合模式下按模态为 text / image / video(多模态服务也可能统一标为 vl
usageobject用量信息
usage.input_tokensint文本 token(含系统模板,不含图片视频)
usage.image_tokensint图片 / 视频视觉部分消耗 token
usage.total_tokensint总 token(= input_tokens + image_tokens)
request_idstring请求唯一标识,排障时提供

响应示例

融合响应(enable_fusion: true,所有 content 合并为一个向量):

{
  "output": {
    "embeddings": [{
      "embedding": [0.0234, -0.0092, 0.0156],
      "index": 0,
      "type": "fusion"
    }]
  },
  "usage": {
    "image_tokens": 2186,
    "input_tokens": 43,
    "total_tokens": 2229
  },
  "request_id": "4d82fb3e-e9df-95f8-af*******90201fe"
}

不融合响应(enable_fusion: false,每个 content 各一个向量):

{
  "output": {
    "embeddings": [
      {"embedding": [-0.0012, 0.0234], "index": 0, "type": "text"},
      {"embedding": [-0.0098, 0.0156], "index": 1, "type": "image"}
    ]
  },
  "usage": {
    "image_tokens": 1093,
    "input_tokens": 12,
    "total_tokens": 1105
  },
  "request_id": "4d82fb3e-e9d*****fa4490201fe"
}

实际返回的是完整维度的 float 数组(默认 2560 维),上例只展示前几维;不融合时 output.embeddings 元素个数与 input.contents 一一对应。

用量与计费

  • 按输入 token(input_tokens + image_tokens)计费,人民币计价(精确到 0.000001 元,无最低消费),单价见模型广场对应卡片。
  • 费用不进响应,到控制台「费用中心」查看明细。
  • 拿不到用量统计的极少数情况会按估算用量计费,并在明细里标「估」便于对账。

错误响应

情况说明
参数错误(缺 modelinput 结构不对)按「错误码」页返回
{
  "error": {
    "message": "model is required",
    "type": "invalid_request_error",
    "code": "invalid_request_error"
  }
}

完整状态码与处理方式见「错误码」页。

可用模型

模型 ID说明
qwen3-vl-embedding文本 / 图片 / 视频多模态向量化,支持融合与不融合两种用法,默认 2560 维

更多向量模型见模型广场(筛选「文本向量」)。

代码示例(Python)

import requests

BASE = "https://test.jw-info.com"
API_KEY = "sk-你的密钥"

resp = requests.post(
    f"{BASE}/v1/embeddings",
    headers={"Content-Type": "application/json",
             "Authorization": f"Bearer {API_KEY}"},
    json={
        "model": "qwen3-vl-embedding",
        "input": {
            "contents": [
                {"text": "商品描述文本"},
                {"image": "https://example.com/img.png"},
            ]
        },
        "parameters": {"enable_fusion": True, "dimension": 1024},
    },
    timeout=60,
)
result = resp.json()

if resp.status_code == 200:
    embeddings = result["output"]["embeddings"]
    print("向量个数:", len(embeddings))
    for emb in embeddings:
        print(f"  [{emb['index']}] type={emb['type']}, dim={len(emb['embedding'])}")
    print("用量:", result["usage"])
else:
    print("请求失败:", result.get("error", result))