> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tapapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI 兼容

> 文本模型迁移时优先走的接入方式

如果你已有 OpenAI SDK 代码，文本模型优先按兼容路径迁移：保留 SDK 和请求结构，只替换 `base_url`、`api_key` 和 `model`。

<Note>示例模型使用 `gpt-5.4`。实际接入时，请以控制台可用模型和模型详情为准。</Note>

## 迁移前

```python theme={null}
from openai import OpenAI

client = OpenAI(api_key="OPENAI_API_KEY")

resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)
```

## 迁移后

```python theme={null}
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxx",
    base_url="https://tapapi.ai/v1",
)

resp = client.chat.completions.create(
    model="gpt-5.4",
    messages=[{"role": "user", "content": "Hello"}],
)
```

## Node.js

```javascript theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-xxx",
  baseURL: "https://tapapi.ai/v1",
});

const resp = await client.chat.completions.create({
  model: "gpt-5.4",
  messages: [{ role: "user", content: "Hello" }],
});

console.log(resp.choices[0].message.content);
```

## 迁移检查表

| 项                      | 要求                                                                            |
| ---------------------- | ----------------------------------------------------------------------------- |
| `base_url` / `baseURL` | 必须是 `https://tapapi.ai/v1`                                                    |
| API Key                | 换成 Tapapi 控制台创建的 `sk-` Key                                                    |
| `model`                | 换成控制台可用模型                                                                     |
| 请求头                    | 使用 `Authorization: Bearer sk-xxx`                                             |
| 前端安全                   | 不要把 Key 暴露在浏览器或 App 里                                                         |
| 错误日志                   | 记录 HTTP 状态码、`error.type`、`error.code`、`error.message` 和 `X-Oneapi-Request-Id` |
| 图片 / 视频                | 不要默认复用文本解析逻辑，按对应 API 文档处理                                                     |

## 兼容边界

OpenAI 兼容表示 Tapapi 尽量兼容常见 SDK、请求结构和返回结构。它不等于所有模型都支持所有 OpenAI 参数。

| 能力                                | 文档口径                   |
| --------------------------------- | ---------------------- |
| `messages`、`temperature`、`stream` | 常见文本模型主线能力             |
| `/v1/responses`                   | 可选文本协议，按模型详情和 SDK 版本确认 |
| `response_format`                 | 视模型支持情况而定              |
| `tools` / `tool_choice`           | 视模型支持情况而定              |
| 特定上游私有参数                          | 不保证通用，接入前用真实请求测试       |

`/v1/chat/completions` 是 OpenAI-compatible 文本入口。`/v1/messages` 属于 Claude-format 入口，不是 Chat Completions 的别名。

## 迁移后先测什么

| 检查项   | 通过标准                                      |
| ----- | ----------------------------------------- |
| 非流式文本 | 能读取 `choices[0].message.content`          |
| 流式文本  | 能读取 `choices[0].delta.content`，并跳过空 chunk |
| 错误处理  | 401、403、429、5xx 能进入正确分支                   |
| 用量记录  | 控制台能看到调用记录和扣费记录                           |
| 限额控制  | 测试 Key 有合理额度和模型范围                         |

更多语言示例见 [Python](/integrations/python)、[Node.js / TypeScript](/integrations/node-typescript)、[PHP / Laravel](/integrations/php-laravel) 和 [HTTP REST](/integrations/http-rest)。
