文档 · 向量
这个别名不会在你睡觉时换掉
/v1/models 里列着四条向量条目。三条是可以直接调用的模型名;剩下一条是别名 auto/embed,它只指向一个模型,永远不变。它不会把你的请求悄悄转给别人——这个限制是故意的,下面说它挡掉了什么。
怎么调
curl https://tokenexchage.com/v1/embeddings \
-H "Authorization: Bearer sk-你的key" \
-H "Content-Type: application/json" \
-d '{"model":"auto/embed","input":"今天天气不错"}'
from openai import OpenAI
client = OpenAI(
base_url="https://tokenexchage.com/v1",
api_key="sk-你的key",
)
r = client.embeddings.create(
model="auto/embed",
input=["第一段", "第二段"],
)
print(len(r.data[0].embedding)) # 1024
input 收字符串,也收字符串数组。返回是 OpenAI 的形状({data, model, usage}),已经会调 embedding 的客户端不用改任何一行解析代码。
为什么没有降级链
大多数路由层把「模型挂了」当成「请求挂了」,于是换下一个候选重试。对话场景里这没坏处——换个模型照样能回答问题,而且你看得出来答的人变了。
向量场景里,这么干会把你的数据毁掉。
不同的 embedding 模型不共享坐标系。我们实测过三个候选,它们返回的都是 1024 维向量——长度一样、类型一样、JSON 一样。把同一句话分别喂给三个模型,比一比:
同句跨模型余弦相似度
A 与 B 0.003
A 与 C 0.010
B 与 C 0.006
基本就是 0。它们是三个互相正交的向量空间,只是恰好维数相同——也正因为「恰好相同」,这个故障极难发现:返回里没有任何一处看着不对。
用 A 把文档灌进索引,用 B 去查。结果不是检索变差,是检索变成随机的。没有报错、没有告警,你几周之后觉得搜索结果怎么不对劲,才发现。
所以 auto/embed 只有一个候选。那个模型不可用时,请求直接失败并说明原因。在「悄悄把索引污染掉」和「报错」之间,报错是唯一安全的选择。
那三个数是怎么量出来的、以及一段可以在你自己端点上复现的代码,写在 Three 1024-Dimension Embedding Models, Three Coordinate Systems(英文)。
模型要换的时候怎么办
把别名背后的 embedding 模型换掉,是破坏性变更,不是升级。所以它会以新名字发布——auto/embed-v2——老名字继续可用。
于是你的选择是明确的:
锁死 auto/embed | 底下什么都不动 |
| 换到新名字 | 你自己挑时间,重建索引,切换期两个都能用 |
不会发生的事是:别名在某天夜里被重新指向。
参数与返回
| 项 | 值 |
|---|---|
| 模型别名 | auto/embed |
| 维度 | 1024 |
| 端点 | POST /v1/embeddings |
| 鉴权 | Authorization: Bearer sk-… |
| 返回 | OpenAI 形状 {data, model, usage} |
| 别名背后的候选数 | 1 |
清单里另外三条——qwen-embed/text-embedding-v3、text-embedding-v4、qwen3.7-text-embedding——可以直接按名字调用,想做实验或者已经统一到某一个上面都行。别名的存在只是为了让生产代码有个稳定的东西可锁。
向量接口目前限时免费。要变的话会先在本页公告再生效,已有的 key 不受影响。
其他能力
同一套命名,一个能力一个别名,都在 /v1/models 里: