一个Key调用多个大模型

📅 2026-11-01 · 分类:教程

上个月接了个文档处理的需求:短文本走 DeepSeek 图个便宜,长合同得过 128K 上下文就得换通义千问,偶尔还要看眼扫描件,又得挂一个多模态的。一开始老老实实三个平台注册、三个控制台充值、三个 Key 塞进 .env,代码里维护三套 SDK 和三种返回结构。最烦的是排查问题——报错了第一反应是“这到底是模型的锅、网络的锅,还是我参数写错了”。

后来改成走 OpenAI 兼容协议,世界清静了。DeepSeek、通义千问、智谱这些都提供兼容 OpenAI 的接口,只要 base_url 和 model 名对得上,一个 openai 客户端就能全调通。更省事的做法是找一个聚合入口:一个 Key、一个 base_url,后面挂着一排模型。充站就是这类服务,注册一次拿 Key,余额通用,不用每个平台单独实名和充值。

准备工作

一个 openai Python 包,一个聚合平台的 Key,再加上平台文档里给的 base_url。就这些,不用装各家自己的 SDK。

第一步:建一个通用客户端

client = OpenAI( api_key=os.environ["API_KEY"], base_url=os.environ["BASE_URL"], )

def chat(prompt: str, model: str = "deepseek-chat") -> str: resp = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], timeout=60, ) return resp.choices[0].message.content `

第二步:切换模型只改一个字符串

没了。不用换 client,不用换认证方式,不用改返回解析。

第三步:把 model 名做成配置

硬编码迟早要还债。项目里建个 models.py,按场景命名(FAST / LONG_CTX / VISION),后面换模型只动一处。顺手记一下每次请求实际用的 model 和耗时,出问题时能立刻定位是哪个模型抽风。

几个踩过的坑

不是所有模型都吃极端的 temperature 和 top_p,有的直接 400,先用默认值跑通再调。模型名拼错一般报 404 model not found,别怀疑网络。长上下文模型按 token 计费差距很大,切之前看一眼价目表。另外加个 tenacity 重试和 fallback 链——主模型超时就切备用模型,可用性会好很多。

说到底

一个 Key 管所有模型,账单只有一份,代码里没有 if-else 去切 SDK,换模型的成本从“改一上午”降到“改一行”。新项目尤其受益:早期不确定哪个模型效果最好,可以挨个试一轮再定,不用为每次实验付注册和实名的时间。先把主链路跑通,再考虑自建网关——那是以年为单位的事。

← 返回文章列表