上周做客服问答的模型选型,要拿 DeepSeek、通义千问和两个开源模型跑同一批测试集。本来打算一个个接,结果光注册就耗掉一下午:三个平台、三次实名认证、三张账单,代码里还得维护三套 SDK 和鉴权逻辑,改个 prompt 要同步改三个文件。后来换成用一个 Key 走统一接口,同样的活二十分钟收工。
东西不多:一个支持多模型转发的 API Key、一个 OpenAI 兼容的 base_url、一个 HTTP 客户端。各家 SDK 都不用装,留着 openai 这个包就够,因为现在主流聚合接口都按 OpenAI 的请求格式走。选聚合站时留意两点:是不是按 token 实扣、有没有并发限流说明,别只看价格。
client = OpenAI(
api_key="sk-你的Key",
base_url="https://api.xxx.com/v1" # 指向聚合站
)
`
关键就一处:base_url 末尾的 /v1 别漏,少了会 404。原来指向 api.openai.com 的那行删掉,下面的业务代码一行不用动——这是走 OpenAI 兼容格式最大的好处。
模型名对不上会直接返回 model not found,所以第一次接先翻文档里的可用列表,别凭记忆写。同一个 Key 余额通用,切模型不用再改 key、不用再配一次额度。
def ask(task, prompt):
return client.chat.completions.create(
model=MODELS[task],
messages=[{"role": "user", "content": prompt}]
).choices[0].message.content
`
业务代码只认任务类型,后面想换供应商,改字典就够了,调用方无感。要注意的是各家对流式输出、function calling、JSON mode 的支持程度不完全一致,上线前挑两个接口实测一遍,别等跑起来才发现某个模型不支持。
一个 Key 跑多模型,省的不只是注册时间:账单合成一张好对,密钥只存一处好管,做 A/B 对比时切模型就是一个字符串的事。建议按任务分配模型,别一个模型干所有活——简单任务用便宜的,复杂推理再上贵的,成本能压下来一大截。我常用的这个充站支持 DeepSeek 和通义全系,充一次余额通用,适合先小量试再决定长期用哪个。