一、概述
POST /v1/embeddings
| 请求形式 | input 填写方式 | 说明 |
| 单条文本 | string | 为一条文本生成向量 |
| 批量文本 | string[] | 一次为多条文本生成向量 |
| 单组图文内容 | object | 在一组输入中组合文本和图片 |
二、前提条件
1. 建议提前阅读 使用约束 与 支持的模型提供商 了解相关信息。
2. 已创建模型路由实例,详细操作指导请参见 创建模型路由实例。
3. 已创建 BYOK 实例,详细操作指导请参见 创建 BYOK 实例。
4. 已创建模型路由访问密钥(API Key),详细操作指导请参见 创建模型路由访问密钥。
5. 已完成向量嵌入模型关联和模型路由策略配置,详细操作指导请参见 配置模型调度管理。
四、请求地址
POST {CMR_BASE_URL}/v1/embeddings
CMR_BASE_URL 为 CMR 实例的访问地址,请以控制台展示为准。
五、请求头
| Header | 必填 | 说明 |
| Authorization | 是 | Bearer <CMR_API_KEY> |
| Content-Type | 是 | 固定为 application/json |
七、cURL
curl –request POST "${CMR_BASE_URL}/v1/embeddings" \\ –header "Authorization: Bearer ${CMR_API_KEY}" \\ –header "Content-Type: application/json" \\ –data '{ "model": "cmr-text-embedding", "input": "今天深圳的天气很好" }'
八、Python
import osimport requestsresponse = requests.post( f"{os.environ['CMR_BASE_URL']}/v1/embeddings", headers={ "Authorization": f"Bearer {os.environ['CMR_API_KEY']}", "Content-Type": "application/json", }, json={ "model": "cmr-text-embedding", "input": "今天深圳的天气很好", }, timeout=30,)response.raise_for_status()result = response.json()print(result["data"][0]["embedding"])
十、基本参数
| 参数 | 类型 | 必填 | 说明 |
| model | string | 是 | CMR 逻辑模型名称或模型别名。可用值以控制台关联模型为准 |
| input | string | string[] | object | 是 | 需要生成向量的文本或图文内容 |
| dimensions | integer | 否 | 期望的 Dense 向量维度。仅在所选模型支持可变维度时生效 |
| encoding_format | string | 否 | Dense 向量的返回编码,常用值为 float 或 base64,以所选模型支持情况为准 |
| user | string | 否 | 终端用户标识,可用于业务追踪或上游风控。请勿传入密码、Token 等敏感信息 |
十一、文本输入
单条文本:
{ "model": "cmr-text-embedding", "input": "查询文本"}
批量文本:
{ "model": "cmr-text-embedding", "input": ["Query: 如何重置密码?", "Document: 在账户安全页面选择重置密码。"]}
批量请求时,可通过响应中的 data[].index 将向量与输入项对应。
十二、多模态输入
支持在一组输入中组合文本和图片。input 按下表填写:
| 参数 | 类型 | 必填 | 说明 |
| input.type | string | 是 | 固定为 multimodal |
| input.content | object[] | 是 | 同一组输入中的文本和图片内容 |
| input.content[].type | string | 是 | 文本内容填 text,图片内容填 image_url |
| input.content[].text | string | 当 type=text 时必填 | 文本内容 |
| input.content[].image_url | object | 当 type=image_url 时必填 | 图片输入对象 |
| input.content[].image_url.url | string | 当 type=image_url 时必填 | 图片输入值。该值不限于 HTTP/HTTPS URL;可填写的格式(如公网 URL、Data URL 等)以所选上游模型的支持情况为准,CMR 按请求值透传 |
请求示例:
{ "model": "cmr-multimodal-embedding", "input": { "type": "multimodal", "content": [ { "type": "text", "text": "红色跑鞋" }, { "type": "image_url", "image_url": { "url": "https://example.com/red-shoe.jpg" } } ] }, "encoding_format": "float"}
上例仅演示使用公网 URL 传入图片。其他图片格式是否可用,请查看所选上游模型的说明。当前标准请求不支持视频、多组多模态输入,也不支持在顶层直接混用文本和图片数组。
十三、Provider 自定义请求参数
CMR Standard 字段包括 model、input、dimensions、encoding_format 和 user。如需传入 input_type、instruction 等 CMR Standard 之外的 Provider 参数,可配置自定义字段透传。
例如,已放通 input_type 时:
{ "model": "cmr-text-embedding", "input": "如何重置密码?", "input_type": "query"}
自定义参数的名称、类型和含义以当前 Provider 为准。更换模型或 Provider 前,请确认相同参数仍然适用。
十五、基本响应字段
| 参数 | 类型 | 是否一定返回 | 说明 |
| id | string | 是 | 本次 Embedding 请求的标识 |
| created | integer | 是 | 响应创建时间,为 Unix 时间戳,单位为秒 |
| object | string | 是 | 固定为 list |
| data | object[] | 是 | 向量结果列表 |
| model | string | 是 | 请求中使用的 CMR 逻辑模型名称 |
| usage | object | 否 | 上游模型返回的用量信息。上游未提供时,响应中可能没有该字段 |
十六、响应向量结果
| 参数 | 类型 | 是否一定返回 | 说明 |
| data[].object | string | 是 | 固定为 embedding |
| data[].index | integer | 是 | 结果对应的输入序号,从 0 开始 |
| data[].embedding | number[] | string | 否 | Dense 向量。使用编码输出时可能为字符串 |
| data[].sparse_embedding | object[] | 否 | Sparse 向量,只列出非零位置及其权重 |
| data[].multi_embedding | number[][] | string | object | 否 | Multi-vector 结果。具体形式以所选模型的返回值为准 |
每个 data[] 结果至少包含 Dense、Sparse 或 Multi-vector 中的一种。所选模型支持时,同一个结果可同时包含多种向量。
sparse_embedding 中每个元素的含义如下:
| 参数 | 类型 | 是否一定返回 | 说明 |
| index | integer | 是 | 非零维度的下标 |
| value | number | 是 | 该维度的权重 |
| token | string | 否 | 上游模型返回的对应 Token |
十七、Provider 自定义响应参数
除上述字段外,响应中可能保留上游 Provider 返回的额外信息。例如:
·响应顶层的 request_id;
·data[] 中表示向量类型的 type。
这些字段以实际响应为准,更换模型或 Provider 后可能不再返回或含义发生变化。
十八、响应示例
以下示例仅展示字段形式,向量值、向量维度和 Token 用量以实际返回为准。
十九、Dense 向量
{ "id": "emb-7f3a2c10", "created": 1787385661, "object": "list", "data": [ { "object": "embedding", "index": 0, "embedding": [0.012, -0.034, 0.021] } ], "model": "cmr-text-embedding", "usage": { "prompt_tokens": 4, "total_tokens": 4 }}
20、Dense + Sparse 向量
{ "id": "emb-a1b2c3d4", "created": 1787385661, "object": "list", "data": [ { "object": "embedding", "index": 0, "embedding": [0.018, -0.041, 0.007], "sparse_embedding": [ { "index": 18452, "value": 0.73, "token": "数据库" } ] } ], "model": "cmr-hybrid-embedding", "usage": { "total_tokens": 9 }, "request_id": "provider-request-id"}
21、Dense + Multi-vector
{ "id": "emb-9e8d7c6b", "created": 1787385661, "object": "list", "data": [ { "object": "embedding", "index": 0, "embedding": [0.016, -0.028, 0.031], "multi_embedding": [ [0.021, -0.013, 0.009], [0.008, 0.034, -0.017] ] } ], "model": "cmr-multimodal-embedding"}
22、错误响应
·CMR Embedding API 使用统一的错误响应形式:
{ "error": { "message": "Invalid input: input is required.", "type": "invalid_request_error", "param": "input", "code": "400" }}
| 参数 | 说明 |
| error.message | 错误说明 |
| error.type | 错误类型;具体值可能随错误来源而不同 |
| error.param | 与错误相关的请求参数;无明确参数时可能为空 |
| error.code | 错误码。当前常见为字符串形式的 HTTP 状态码 |
CMR 可能在错误中保留已安全处理的上游附加信息。客户端应优先根据 HTTP 状态码处理失败,不要依赖上游错误文案始终不变。
·常见 HTTP 状态码:
| HTTP 状态码 | 常见场景 | 建议 |
| 400 | JSON 或参数格式错误、输入类型不支持、CMR 逻辑模型名称无效,或上游模型拒绝当前参数 | 修正请求,不要盲目重试 |
| 401 | API Key 无效或已失效,或上游鉴权失败 | 检查 API Key 和相关凭证 |
| 403 | API Key 缺失、鉴权头格式错误,或无权访问当前 CMR 实例、模型或上游资源 | 检查 Authorization Header 和权限配置 |
| 404 | 上游模型、资源或接口路径不存在 | 检查所选模型及 Provider 配置 |
| 408 | 请求或上游调用超时 | 在业务允许时重试 |
| 429 | CMR 限流、上游配额超限,或当前暂无可用部署 | 参考 Retry-After(如存在)并使用退避策略重试 |
| 500 | CMR 内部错误,或 CMR 连接上游失败 | 记录请求标识并联系支持人员 |
| 502 | 上游响应无效,或响应与当前协议配置不匹配 | 使用退避策略重试;持续出现时联系支持人员 |
| 503 | 上游服务或当前协议配置暂不可用 | 使用退避策略重试 |
| 504 | 上游网关超时 | 使用退避策略重试 |