/v1/chat/completions 是大模型行业的事实标准接口 —— 几乎所有框架、客户端、SDK 默认支持它。通过 API易,这一个端点可以统一调用 OpenAI、Claude、Gemini、DeepSeek 等全部 400+ 模型,切换模型只需要换一个字符串。
怎么选端点:用现成框架/客户端、或要用同一套代码调多家模型 → 用本页的兼容模式;要内置工具(联网搜索、代码解释器)、状态管理、或调 Pro 系列模型 → 用 原生调用(/v1/responses)。OpenAI 官方对 Chat Completions 的定位是”长期支持,但新项目推荐 Responses”。
快速开始
curl https://api.apiyi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-5.4",
"messages": [
{"role": "user", "content": "用一句话介绍你自己"}
]
}'
一个接口调用全平台模型
这是兼容模式最大的价值:换模型只换字符串,代码一行不动。
def ask(message: str, model: str) -> str:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": message}]
)
return response.choices[0].message.content
print(ask("解释量子纠缠", "gpt-5.4")) # OpenAI
print(ask("解释量子纠缠", "claude-sonnet-4-6")) # Anthropic
print(ask("解释量子纠缠", "gemini-3-pro-preview")) # Google
print(ask("解释量子纠缠", "deepseek-chat")) # DeepSeek
各家模型的完整名称和价格见 模型与价格总览。注意:用兼容格式调 Claude 时拿不到 Claude 的 Prompt Cache 优惠,深度使用 Claude 请走 Claude 原生调用。
各语言 SDK 配置
所有官方 SDK 都支持自定义 base_url,配置一次即可。
Python
from openai import OpenAI, AsyncOpenAI
# 同步客户端
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1"
)
# 异步客户端
async_client = AsyncOpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1"
)
也可以用环境变量,代码里零配置:
export OPENAI_API_KEY="YOUR_API_KEY"
export OPENAI_BASE_URL="https://api.apiyi.com/v1"
from openai import OpenAI
client = OpenAI() # 自动读取环境变量
Node.js / TypeScript
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.apiyi.com/v1'
});
const response = await openai.chat.completions.create({
model: 'gpt-5.4-mini',
messages: [{ role: 'user', content: 'Hello!' }],
temperature: 0.7
});
.NET
dotnet add package OpenAI
using OpenAI;
using OpenAI.Chat;
var client = new OpenAIClient(
new System.ClientModel.ApiKeyCredential("YOUR_API_KEY"),
new OpenAIClientOptions { Endpoint = new Uri("https://api.apiyi.com/v1") }
);
var chatClient = client.GetChatClient("gpt-5.4");
var response = await chatClient.CompleteChatAsync("Hello!");
Console.WriteLine(response.Value.Content[0].Text);
使用 OpenAI 官方 Go SDK(github.com/openai/openai-go):
go get github.com/openai/openai-go
package main
import (
"context"
"fmt"
"github.com/openai/openai-go"
"github.com/openai/openai-go/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey("YOUR_API_KEY"),
option.WithBaseURL("https://api.apiyi.com/v1"),
)
completion, err := client.Chat.Completions.New(context.TODO(), openai.ChatCompletionNewParams{
Model: "gpt-5.4",
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Hello!"),
},
})
if err != nil {
panic(err)
}
fmt.Println(completion.Choices[0].Message.Content)
}
Java
使用 OpenAI 官方 Java SDK(com.openai:openai-java):
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java</artifactId>
<version>LATEST</version>
</dependency>
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey("YOUR_API_KEY")
.baseUrl("https://api.apiyi.com/v1")
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("gpt-5.4")
.addUserMessage("Hello!")
.build();
ChatCompletion completion = client.chat().completions().create(params);
System.out.println(completion.choices().get(0).message().content().orElse(""));
老项目如果还在用第三方库(Go 的 sashabaranov/go-openai、Java 的 theokanning 系列),改 base_url 同样能跑通,但建议迁移到上面的官方 SDK —— 第三方库对新模型参数(如 reasoning_effort)跟进较慢。
常用功能
流式输出
stream = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "写一首关于秋天的短诗"}],
stream=True
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
推理控制
Chat Completions 端点用顶层 reasoning_effort 参数(注意与 Responses 端点的嵌套写法不同):
response = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "证明根号2是无理数"}],
reasoning_effort="high" # none / low / medium / high / xhigh
)
gpt-5 系列推理模型在该端点同样不支持 temperature / top_p,传了会报错。
图像输入
response = client.chat.completions.create(
model="gpt-5.4",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "这张图片里有什么?"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
]
}
]
)
Embeddings
response = client.embeddings.create(
model="text-embedding-3-small",
input="要嵌入的文本内容"
)
embedding = response.data[0].embedding
错误处理与重试
官方 SDK 内建自动重试(默认 2 次,针对 429 / 5xx / 连接错误),优先用它而不是自己写循环:
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1",
max_retries=3, # 内建指数退避重试
timeout=60.0
)
需要精细处理时按异常类型捕获:
from openai import (
APIError,
APIConnectionError,
RateLimitError,
InternalServerError,
)
try:
response = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "Hello"}]
)
except RateLimitError:
print("请求频率超限,稍后重试")
except APIConnectionError:
print("网络连接错误,检查网络或代理")
except InternalServerError:
print("上游服务错误,建议重试")
except APIError as e:
print(f"API 错误:{e}")
兼容模式的能力边界
| 能力 | 兼容模式 | 说明 |
|---|
| 基础对话 / 流式 / 多模态输入 | ✅ | 完整支持 |
| 函数调用(FC) | ✅ | 见 FC函数调用 |
| Prompt 缓存折扣 | ✅ | OpenAI 模型自动生效,见 缓存计费 |
| 内置工具(联网搜索、代码解释器等) | ❌ | 仅 原生调用 |
| 状态管理(previous_response_id) | ❌ | 仅原生调用,兼容模式需自己拼历史 |
verbosity 输出控制 | ❌ | 仅原生调用 |
| Pro 系列模型(gpt-5.4-pro 等) | ❌ | 实务上仅原生调用可用 |
从 OpenAI 官方迁移
已经在用 OpenAI 官方服务的项目,迁移只需两步、代码零改动:
- 换 base_url 和 key
# 原来
client = OpenAI(api_key="sk-...")
# 改为
client = OpenAI(
api_key="YOUR_APIYI_KEY",
base_url="https://api.apiyi.com/v1"
)
- 或者只改环境变量(代码完全不动)
export OPENAI_API_KEY="YOUR_APIYI_KEY"
export OPENAI_BASE_URL="https://api.apiyi.com/v1"
方法调用、参数格式、响应结构全部保持一致。
相关链接
- 同组页面:原生调用 · 缓存计费 · FC函数调用
- 模型与价格:模型与价格总览
- 获取 / 管理令牌:
https://api.apiyi.com/token
- OpenAI 官方 SDK 列表:
platform.openai.com/docs/libraries