GPT API 价格与 SDK 迁移:把请求契约和费用一起核对
迁移 GPT 集成会改变计费目的地,也可能改变 API 契约。应先迁移一个已有文本流程,保持端点类型,核验准确模型 ID 和用量,再处理工具与有状态对话。
发布 2026-09-23 · 更新 2026-09-29 · KeepRouter Editorial · 5 分钟阅读

迁移 GPT API 集成时,至少要考虑两类成本:模型生成的费用,以及修改集成的工程费用。即使公开输入价格更低,如果新线路不接受应用发送的字段,或返回对象让解析器无法处理,也不能直接得出迁移划算的结论。先选一个已有功能,例如工单摘要,并写清它当前使用的请求和响应契约。
本文假设应用已经使用 OpenAI SDK。KeepRouter 提供兼容端点,但所选模型仍需配置相应操作的可用线路。可以通过模型目录和 GPT-4o 等具体条目选择候选。示例展示配置方法,不代表已经完成现场测试,也不构成对某代模型的推荐。
把端点迁移与模型更换分开
主机与密钥、模型 ID、API 类型是三个独立变化。一次全部修改,失败时就很难定位。先让一个基础文本功能通过目标端点运行,再评估模型更换;只有功能需要时,才进一步更换 API 类型。
| 当前依赖 | 要盘点的内容 | 迁移后需要的证据 |
|---|---|---|
| Chat Completions | messages、choices、finish_reason | 文本正确且终止状态明确 |
| Responses | 输入项目、输出项目、事件类型 | 解析器能处理所需对象 |
| 工具循环 | 函数定义、调用 ID、工具结果 | 一次完整调用和继续生成 |
| 对话状态 | 历史消息或响应标识 | 下一轮保留必要上下文 |
| 用量 | 输入、缓存输入、输出、其他费用 | 与账户记录核对一致 |
OpenAI 的迁移文档说明了 Responses 与 Chat Completions 在对象及流式事件上的差别。SDK 中存在 responses.create 方法,并不证明某个网关模型已经配置 Responses 路由。盘点时可对照 Responses 比较指南,并在公开 API 契约中检查目标操作。
先发出一次有边界的 Python 请求
将 KEEPROUTER_MODEL 设置为当前目录中准确的聊天模型 ID,将 KEEPROUTER_KEY 设置为获准调用该模型的 Key。应用应在锁文件中固定 OpenAI Python 包版本。下面使用 Chat Completions,不带采样或推理选项。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://keeprouter.com/v1",
api_key=os.environ["KEEPROUTER_KEY"],
timeout=30.0,
max_retries=0,
)
result = client.chat.completions.create(
model=os.environ["KEEPROUTER_MODEL"],
messages=[{"role": "user", "content": "Summarize: the test ticket is resolved."}],
max_completion_tokens=128,
)
print(result.id, result.model)
print(result.choices[0].finish_reason)
print(result.usage.model_dump() if result.usage else "usage missing")采用示例前,确认所选线路接受 max_completion_tokens;若契约要求别的输出上限字段,应明确改用该字段。第一次诊断时关闭 SDK 自动重试,有助于看清单次尝试;这不是生产可靠性配置的建议。后续重试策略仍需结合截止时间,以及前一次尝试已经产生计费工作的可能性。
密钥通过环境变量读取。Python 字符串如果只是写了一个 shell 变量名,它仍然只是字面字符串。认证失败时可以检查变量是否存在、Key 范围是否正确,但不要打印凭证。其他客户端的 Base URL 拼写见 SDK 接入指南。
从 usage 建立 GPT 成本表
对按 token 计费的文本线路,将未缓存输入、缓存输入和输出分别乘以实际服务费率。如果响应输入总数已经包含缓存量,就只减去一次缓存部分。单独计费的工具、图片、音频、批处理或服务档位,应根据该服务说明另列,不能默认都被这个简单公式覆盖。
假设某功能每月有 40,000 次调用,每次平均 1,500 个输入 token 和 250 个输出 token。在不假设缓存的情况下,就是 6,000 万输入、1,000 万输出;模型费用为 60×每百万输入价 + 10×每百万输出价。这是规划算例,不是本站真实流量。还应计算较长请求的场景,并在依赖平均值之前测量实际分布。
用 API 费用计算器调整输入假设。上下文窗口表示能力上限,并不意味着每笔调用都按窗口最大值收费;反过来,使用上一笔响应标识也不表示历史上下文天然免费。应检查实际操作返回的用量字段,而不是只看调用函数的参数数量。
按顺序扩大验证范围
普通请求成功后,加入流式输出,确认应用处理了最后事件和用量。接着运行一次返回确定性结果的无害工具调用,再测试对话第二轮。最后在受控环境中测试错误模型 ID、失效或超范围 Key,确认用户能得到可操作的错误信息。
每个案例记录请求结构、SDK 版本、线路、状态、完成条件和扣费。工单摘要通常不要求输出逐字相同,应列出必须保留的事实以及不可凭空添加的内容。如果新线路改变了工具行为,可先让该功能保留旧线路,再修正对应解析器。
更换 GPT 代际时重新检查缓存核算
不要假设每代 GPT 都以相同方式处理缓存写入。OpenAI 当前缓存指南记录了型号相关行为。KeepRouter 调用则按准确型号与路径的用户费率和用量定义计算,不能假设厂商原生缓存选项都会透传。先测未命中和受支持的读取,再把任何单独计费的写入加上,之后才推算节省。
回滚要包含状态和计费配置
把旧主机、凭证引用、模型 ID 和解析方式保存为完整可部署配置。只恢复 URL,可能留下错误的模型命名空间或事件解析器。尚未结束的有状态对话,应继续走兼容路径,或明确迁移其历史记录。
检查第一批付费样本时,按“得到一份被接受的摘要”计算成本,并计入重试和废弃答案。HTTP 成功、内容正确、账户扣费分别回答不同的问题。当这些记录互相吻合后,再逐个扩大功能范围,并在价格或用户行为变化时更新成本表。
常见问题
更换 base_url 会迁移全部 OpenAI 能力吗?
不会。应逐项检查模型、端点、工具、流式事件与状态处理。
更换服务时必须同时改用 Responses 吗?
只有功能需要时才改。先保留原 API 类型,能让服务迁移更容易定位问题。
计算器能预测最终 GPT 账单吗?
它估算所选公开单位;真实用量、重试和单独计费能力决定最终金额。
为什么密钥要读取环境变量?
Python SDK 需要密钥值;写成 shell 变量形式的字面字符串不会自动展开。
参考的一手资料
本文最近复核 2026-09-29
- [1] OpenAI Responses migration guide
- [2] OpenAI Python SDK
- [3] OpenAI prompt caching
- [4] KeepRouter OpenAPI