最近做了一个多模型 API 网关:同一套鉴权、统一的调用格式,按实际模型与实际用量计费;需要时可以指定模型,也可以传 model: "auto" 交给平台在已开放能力中路由。
这篇不讲泛泛的“AI 聚合”概念,直接记录我用 Python / PowerShell 跑通文本与视频请求的最小流程。
先说结论
- 文本接口:
POST /v1/chat/completions - 视频接口:
POST /v1/videos - 鉴权:同一个 API Key
- 指定模型时按指定模型调用;
auto只会在后台已配置且可用的模型中选择 - 每次请求都会返回实际模型、用量与本次扣费;失败请求不进入本次客户扣费
项目代码与示例:
1. 获取 API Key
注册后在开发者中心创建 Key。不要把 Key 写进前端、仓库或截图。
本文用环境变量保存:
export XQ_API_KEY="你的 API Key"
Windows PowerShell:
$headers = @{ Authorization = "Bearer 你的_API_Key" }
$base = "https://xinqingapi.com"
2. 文本模型:指定 DeepSeek 的最小请求
import os
import requests
resp = requests.post(
"https://xinqingapi.com/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['XQ_API_KEY']}",
"Content-Type": "application/json",
},
json={
"model": "deepseek-v4-flash",
"messages": [
{"role": "user", "content": "只回复四个字:连接成功"}
],
"max_tokens": 16,
},
timeout=60,
)
print(resp.json())
响应中建议重点保存这几个字段:
routing.requested_model:请求的模型routing.actual_model:实际执行的模型usage:输入、输出 Tokenbilling.charged_cny:本次实际扣费
做 API 接入最怕“调用的是什么、花了多少钱”说不清。开发阶段把请求 ID、模型、用量与异常原因一并记录下来,后面排查会省很多时间。
3. model: "auto" 什么时候用?
明确需要某个模型时,始终传具体模型名,例如 deepseek-v4-pro。
auto 更适合内部工具、原型或任务类型不固定的场景。它不是“随便换模型”,而是在后台已配置、已开放、能力匹配的模型内选择。关键业务建议指定模型,并做好超时、失败重试和降级。
payload = {
"model": "auto",
"messages": [
{"role": "user", "content": "把这段会议纪要整理为待办清单"}
],
}
4. 视频生成:Seedance 任务提交与轮询
视频生成是异步任务,不能当成普通聊天接口处理。
$body = @{
model = "seedance-2.5"
prompt = "日出时的海边,一只白色小船缓慢驶过,电影感镜头"
seconds = 5
size = "1280x720"
generate_audio = $false
watermark = $false
} | ConvertTo-Json
$task = Invoke-RestMethod `
-Uri "$base/v1/videos" `
-Method Post `
-Headers $headers `
-ContentType "application/json; charset=utf-8" `
-Body $body
$task.id
使用返回的任务 ID 查询状态:
$jobId = $task.id
Invoke-RestMethod `
-Uri "$base/v1/videos/$jobId" `
-Method Get `
-Headers $headers
任务完成后,响应会包含状态、结果地址和实际完成单位。异步任务应该以最终完成结果为准,而不是只看“任务已提交”。
5. 几个实践建议
- 一开始只接最常用的文本模型与一个明确的多媒体模型。
- 永远记录请求 ID、实际模型、输入/输出 Token、失败原因。
- 为每个上游设置月度预算、单次费用上限和连续故障熔断。
- 上线前做小额全链路测试:创建 Key → 请求 → 查询账单 → 异常处理。
写在最后
多模型 API 的价值,不在于模型名越多越好,而在于:接入是否稳定、计费是否可核对、出现异常是否能定位。
项目开源地址:
如果你想看 Node.js、Python 或 PowerShell 的完整调用示例,欢迎在评论区留言。