# GPT API 价格与 SDK 迁移：把请求契约和费用一起核对

> 迁移 GPT 集成会改变计费目的地，也可能改变 API 契约。应先迁移一个已有文本流程，保持端点类型，核验准确模型 ID 和用量，再处理工具与有状态对话。

_发布 2026-09-23 · 更新 2026-09-29 · [KeepRouter Editorial](https://keeprouter.com/editorial-policy#editorial-team) · 5 分钟阅读_

![从请求契约到回滚的 OpenAI 兼容 API 字段级迁移清单](https://keeprouter.com/editorial/blog/openai-compatible-api-migration-checklist.png)

_迁移客户端时，将端点、模型、解析器和用量一起核查。_

迁移 GPT API 集成时，至少要考虑两类成本：模型生成的费用，以及修改集成的工程费用。即使公开输入价格更低，如果新线路不接受应用发送的字段，或返回对象让解析器无法处理，也不能直接得出迁移划算的结论。先选一个已有功能，例如工单摘要，并写清它当前使用的请求和响应契约。

本文假设应用已经使用 OpenAI SDK。KeepRouter 提供兼容端点，但所选模型仍需配置相应操作的可用线路。可以通过[模型目录](/models)和 [GPT-4o 等具体条目](/models/gpt-4o)选择候选。示例展示配置方法，不代表已经完成现场测试，也不构成对某代模型的推荐。

## 把端点迁移与模型更换分开

主机与密钥、模型 ID、API 类型是三个独立变化。一次全部修改，失败时就很难定位。先让一个基础文本功能通过目标端点运行，再评估模型更换；只有功能需要时，才进一步更换 API 类型。

| 当前依赖 | 要盘点的内容 | 迁移后需要的证据 |
|---|---|---|
| Chat Completions | messages、choices、finish_reason | 文本正确且终止状态明确 |
| Responses | 输入项目、输出项目、事件类型 | 解析器能处理所需对象 |
| 工具循环 | 函数定义、调用 ID、工具结果 | 一次完整调用和继续生成 |
| 对话状态 | 历史消息或响应标识 | 下一轮保留必要上下文 |
| 用量 | 输入、缓存输入、输出、其他费用 | 与账户记录核对一致 |

OpenAI 的迁移文档说明了 Responses 与 Chat Completions 在对象及流式事件上的差别。SDK 中存在 `responses.create` 方法，并不证明某个网关模型已经配置 Responses 路由。盘点时可对照 [Responses 比较指南](/zh/blog/responses-api-vs-chat-completions)，并在[公开 API 契约](/api/docs)中检查目标操作。

## 先发出一次有边界的 Python 请求

将 `KEEPROUTER_MODEL` 设置为当前目录中准确的聊天模型 ID，将 `KEEPROUTER_KEY` 设置为获准调用该模型的 Key。应用应在锁文件中固定 OpenAI Python 包版本。下面使用 Chat Completions，不带采样或推理选项。

```python
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 接入指南](/use-cases/openai-sdk)。

## 从 usage 建立 GPT 成本表

对按 token 计费的文本线路，将未缓存输入、缓存输入和输出分别乘以实际服务费率。如果响应输入总数已经包含缓存量，就只减去一次缓存部分。单独计费的工具、图片、音频、批处理或服务档位，应根据该服务说明另列，不能默认都被这个简单公式覆盖。

假设某功能每月有 40,000 次调用，每次平均 1,500 个输入 token 和 250 个输出 token。在不假设缓存的情况下，就是 6,000 万输入、1,000 万输出；模型费用为 `60×每百万输入价 + 10×每百万输出价`。这是规划算例，不是本站真实流量。还应计算较长请求的场景，并在依赖平均值之前测量实际分布。

用 [API 费用计算器](/tools/api-cost-calculator)调整输入假设。上下文窗口表示能力上限，并不意味着每笔调用都按窗口最大值收费；反过来，使用上一笔响应标识也不表示历史上下文天然免费。应检查实际操作返回的用量字段，而不是只看调用函数的参数数量。

## 按顺序扩大验证范围

普通请求成功后，加入流式输出，确认应用处理了最后事件和用量。接着运行一次返回确定性结果的无害工具调用，再测试对话第二轮。最后在受控环境中测试错误模型 ID、失效或超范围 Key，确认用户能得到可操作的错误信息。

每个案例记录请求结构、SDK 版本、线路、状态、完成条件和扣费。工单摘要通常不要求输出逐字相同，应列出必须保留的事实以及不可凭空添加的内容。如果新线路改变了工具行为，可先让该功能保留旧线路，再修正对应解析器。

## 更换 GPT 代际时重新检查缓存核算

不要假设每代 GPT 都以相同方式处理缓存写入。[OpenAI 当前缓存指南](https://developers.openai.com/api/docs/guides/prompt-caching)记录了型号相关行为。KeepRouter 调用则按准确型号与路径的用户费率和用量定义计算，不能假设厂商原生缓存选项都会透传。先测未命中和受支持的读取，再把任何单独计费的写入加上，之后才推算节省。

## 回滚要包含状态和计费配置

把旧主机、凭证引用、模型 ID 和解析方式保存为完整可部署配置。只恢复 URL，可能留下错误的模型命名空间或事件解析器。尚未结束的有状态对话，应继续走兼容路径，或明确迁移其历史记录。

检查第一批付费样本时，按“得到一份被接受的摘要”计算成本，并计入重试和废弃答案。HTTP 成功、内容正确、账户扣费分别回答不同的问题。当这些记录互相吻合后，再逐个扩大功能范围，并在价格或用户行为变化时更新成本表。

## 常见问题

### 更换 base_url 会迁移全部 OpenAI 能力吗？

不会。应逐项检查模型、端点、工具、流式事件与状态处理。

### 更换服务时必须同时改用 Responses 吗？

只有功能需要时才改。先保留原 API 类型，能让服务迁移更容易定位问题。

### 计算器能预测最终 GPT 账单吗？

它估算所选公开单位；真实用量、重试和单独计费能力决定最终金额。

### 为什么密钥要读取环境变量？

Python SDK 需要密钥值；写成 shell 变量形式的字面字符串不会自动展开。

## 参考的一手资料

_本文最近复核 2026-09-29_

1. [OpenAI Responses migration guide](https://developers.openai.com/api/docs/guides/migrate-to-responses)
2. [OpenAI Python SDK](https://github.com/openai/openai-python)
3. [OpenAI prompt caching](https://developers.openai.com/api/docs/guides/prompt-caching)
4. [KeepRouter OpenAPI](https://keeprouter.com/api/openapi.json)

## 继续阅读

- [gpt 4o](https://keeprouter.com/models/gpt-4o.md)
- [openai sdk](https://keeprouter.com/use-cases/openai-sdk.md)
- [Responses API 与 Chat Completions：按契约选择，而不是追新](https://keeprouter.com/zh/blog/responses-api-vs-chat-completions.md)
- [api cost calculator](https://keeprouter.com/tools/api-cost-calculator)
- [用 OpenAI SDK 调用 Gemini：区分原生、兼容端点和网关路径](https://keeprouter.com/zh/blog/gemini-openai-compatible-api-differences.md)
- [从 OpenRouter 迁移到 KeepRouter：核对 URL、模型 ID 与路由字段](https://keeprouter.com/zh/blog/openrouter-to-keeprouter-migration.md)

## 迁移前，先检查你的请求

在浏览器中检查型号 ID 与请求字段，无需 API Key，也不发送推理请求。

[检查示例配置](https://keeprouter.com/tools/api-migration-checker)

[创建 Key，测试免费模型](https://keeprouter.com/login?returnTo=%2Fconsole%2Fkeys%3Fmodel%3Dfree)

免费测试使用 free 模型；其他付费型号需要足够预付额度。

[全部文章](https://keeprouter.com/zh/blog.md) · [模型与价格](https://keeprouter.com/models.md)
