# 从其他网关迁移 (/docs/cookbook/migration/from-other-gateways)



先迁移一次请求：改 API 地址、Key 和模型 ID。下面示例面向兼容 OpenAI Chat Completions 的客户端，不会自动把其他请求协议转换成 Chat。

## 1. 准备终端 [#1-准备终端]

准备 Python 3.10+ 和 [uv](https://docs.astral.sh/uv/getting-started/installation/)。将 [Praxis 云 API Key](/docs/cloud/account/api-keys) 放入环境变量 `PRAXIS_API_KEY`，不要写入代码或日志。

```bash
test -n "$PRAXIS_API_KEY"
```

期望：退出码为 0。退出码 1 表示变量未设置，先设置再继续。示例默认使用 `https://api.deepraxis.ai`。切换环境时，将 `PRAXIS_API_BASE` 设为相应 API 域名，不带末尾斜杠或 API 路径。

## 2. 修改三项配置 [#2-修改三项配置]

1. 将 `base_url` 改为 `https://api.deepraxis.ai/openai/v1`。期望：地址只含一次 `/openai/v1`，不是控制台网址，也不是完整的 `/chat/completions` 端点。
2. 将客户端 Key 改为 `PRAXIS_API_KEY`。期望：不再向 Praxis 发送旧网关的 Key；另存原配置以便回滚。
3. 本次冒烟验证将模型 ID 改为 `deepseek-flash`。期望：它出现在 `GET /openai/v1/models?api=chat`。旧网关的供应商前缀或别名不一定在此有效。

按当前使用的 API 选择更详细的迁移指南：

| 当前 API 或网关                          | 指南                                                          |
| ----------------------------------- | ----------------------------------------------------------- |
| OpenAI Chat Completions 或 Responses | [从 OpenAI 迁移](/docs/cookbook/migration/from-openai)         |
| OpenRouter                          | [从 OpenRouter 迁移](/docs/cookbook/migration/from-openrouter) |
| Anthropic Messages                  | [从 Anthropic 迁移](/docs/cookbook/migration/from-anthropic)   |

## 3. 验证新配置 [#3-验证新配置]

保存为 `gateway-migration.py`，运行 `uv run -q --no-project --with openai --with anthropic --with google-genai python gateway-migration.py`。

```python
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ['PRAXIS_API_KEY'],
    base_url=os.environ.get('PRAXIS_API_BASE', 'https://api.deepraxis.ai') + '/openai/v1')
models = client.models.list(extra_query={'api': 'chat'})
print('catalog X-Request-Id:', models._request_id)
assert 'deepseek-flash' in [model.id for model in models]
response = client.chat.completions.create(model='deepseek-flash',
    messages=[{'role': 'user', 'content': 'Reply with exactly: MIGRATION_OK'}],
    reasoning_effort='none', max_tokens=256)
print('X-Request-Id:', response._request_id)
assert response.choices[0].finish_reason == 'stop'
assert response.choices[0].message.content.strip() == 'MIGRATION_OK'
assert response.usage is not None and response.usage.total_tokens > 0
print(response.choices[0].message.content)
print('usage:', response.usage.model_dump())
```

期望：输出 `MIGRATION_OK`、大于 0 的 token 用量、目录请求 ID 与推理请求 ID，退出码 0。保留请求 ID 用于排障，不记录 Key。

## 4. 切流量前检查 [#4-切流量前检查]

用自己的提示词检查流式、工具、结构化输出和[思考设置](/docs/cloud/services/model/guides/reasoning)。冒烟通过不代表模型行为相同。按需重建文件或响应资源：旧网关的 ID 不随配置迁移。验证失败时，一起恢复原地址、Key 和模型配置。

实测 `gpt-5.6-sol` 调用 Responses 返回 `model_protocol_not_offered`（HTTP 404）。支持 Chat 不代表支持 Responses，应按 [Responses 指南](/docs/cloud/services/model/guides/responses-api)查询对应目录。模型断言失败表示所选 ID 未出现在该协议目录中，应先核对再切流量。

[API 参考 →](/docs/api/compatible/openai) · [模型指南 →](/docs/cloud/services/model/guides/openai-compatible)
