这个接口做什么
托管向量化接口省去了模型部署与显存规划:把文本数组发给服务,返回等长向量数组。text-embedding-3-small 默认 1536 维、text-embedding-3-large 默认 3072 维,两者都支持 dimensions 参数输出更短的向量,属于 Matryoshka 表示思路,可按存储预算与效果要求折中。
基本信息
| 小模型 | text-embedding-3-small,默认 1536 维 |
|---|---|
| 大模型 | text-embedding-3-large,默认 3072 维 |
| 可缩短 | 支持 dimensions 参数,按需输出更短向量 |
| 计费口径 | 按输入 token 计费,重试会重复计费 |
| 适用 | 无自建推理资源、要求快速接入的场景 |
批量调用与缩短维度
批量调用与缩短维度
from openai import OpenAI
client = OpenAI()
resp = client.embeddings.create(
model="text-embedding-3-small",
input=["如何配置超时", "超时设置方法"],
dimensions=512, # 可选:按需缩短向量
)
for d in resp.data:
print(len(d.embedding))使用要点
- 批量提交:一次请求里放多条文本,能显著降低往返开销
- 控制单批大小:批太大容易触发请求体上限或超时,按报错逐步下调
- 加重试退避:失败重试要带指数退避,并保证写入幂等,避免重复计费
- 记录用量:把每次调用的 token 用量落到监控里,容量与成本才有依据
- 锁定模型版本:即使同名模型也可能更新,出问题时要能定位到具体版本
两个模型的取舍
| 维度 | small | large |
|---|---|---|
| 默认维度 | 1536 | 3072 |
| 存储与检索成本 | 较低 | 约为前者两倍量级 |
| 精度 | 多数检索场景够用 | 更难的语义匹配更占优 |
| 缩短维度 | 可降到 512 等 | 可降到 1024 等 |
缩短向量可省存储与带宽,但可能损失效果,需要用自己的评测集验证后再决定,不要凭直觉直接砍半。
缩短后的向量与库里已有的全维度向量无法共存:同一索引列必须维度统一,切换时只能全量重建。
成本与稳定性
- 先估量:文档总量换算成 token 数再乘单价,重建一次索引的费用要提前算清
- 加缓存:同一文本的向量落到本地缓存,重复实验或重跑任务时不必再次调用
- 设并发上限:并发过高容易触发限流,配合队列与退避比盲目重试更稳
- 留降级路径:接口不可用时能临时改用本地模型,或暂停入库而不阻塞在线检索
- 监控失败率与用量曲线,异常波动往往先于业务感知出现