Skip to content

Chat Completions API(完整文档)

创建模型响应,支持对话、函数调用、流式输出等。


📋 基本信息

请求地址

http
POST https://api.nextapi.pro/v1/chat/completions

认证方式

http
Authorization: Bearer sk-你的密钥
Content-Type: application/json

📝 请求参数

必填参数

参数类型说明示例
modelstring模型名称"gpt-4o-mini"
messagesarray对话消息列表见下方说明

messages 参数说明

每个消息对象包含:

字段类型说明
rolestring角色:systemuserassistant
contentstring消息内容

示例:

json
[
  {"role": "system", "content": "You are a helpful assistant."},
  {"role": "user", "content": "你好!"},
  {"role": "assistant", "content": "你好!有什么可以帮你的吗?"},
  {"role": "user", "content": "写一首诗"}
]

可选参数

参数类型默认值说明
temperaturefloat1.0温度参数 (0-2),控制随机性
max_tokensint-最大生成 token 数
streamboolfalse是否流式输出
top_pfloat1.0Top-p 采样 (0-1)
frequency_penaltyfloat0频率惩罚 (-2 to 2)
presence_penaltyfloat0存在惩罚 (-2 to 2)
stoparraynull停止词列表
toolsarraynull函数调用工具列表
tool_choicestring"auto"函数调用选择
response_formatobjectnull响应格式
seedintnull随机种子
userstringnull用户标识

🎯 参数详解

temperature(温度)

控制输出的随机性:

  • 0:最确定,每次输出几乎相同
  • 1:默认,平衡创造性和一致性
  • 2:最随机,更有创造性但不稳定

推荐值:

场景推荐值
代码生成0.2
日常对话0.7
创意写作1.0
头脑风暴1.5

max_tokens(最大 token 数)

限制生成的 token 数量:

  • 不设置:模型会生成直到自然结束
  • 设置值:限制输出长度,节省成本

示例:

json
{
  "model": "gpt-4o-mini",
  "messages": [{"role": "user", "content": "写一首诗"}],
  "max_tokens": 100
}

stream(流式输出)

是否使用流式输出:

  • false(默认):等待完整响应
  • true:逐块返回,实时显示

流式输出优点:

  • ✅ 用户体验更好,实时看到响应
  • ✅ 可以提前终止,节省 token
  • ✅ 适合长文本生成

流式输出缺点:

  • ❌ 实现复杂
  • ❌ 需要处理 SSE 格式

📤 响应格式

成功响应

json
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1234567890,
  "model": "gpt-4o-mini",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!有什么可以帮你的吗?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 10,
    "completion_tokens": 20,
    "total_tokens": 30
  }
}

响应字段说明

字段说明
id请求 ID
object对象类型
created创建时间戳
model使用的模型
choices响应选项列表
usageToken 使用统计

finish_reason 可能的值

说明
stop自然结束
length达到 max_tokens 限制
content_filter内容过滤
tool_calls函数调用

🌊 流式响应

设置 stream: true 后,响应为 SSE (Server-Sent Events) 格式:

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1234567890,"model":"gpt-4o-mini","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1234567890,"model":"gpt-4o-mini","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1234567890,"model":"gpt-4o-mini","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

💻 代码示例

Python 示例

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-你的密钥",
    base_url="https://api.nextapi.pro/v1"
)

# 普通请求
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "你好!"}]
)
print(response.choices[0].message.content)

# 流式请求
stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "写一首诗"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

# 带参数的请求
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "写一首诗"}],
    temperature=0.7,
    max_tokens=100
)

Node.js 示例

javascript
const OpenAI = require('openai');

const openai = new OpenAI({
  apiKey: 'sk-你的密钥',
  baseURL: 'https://api.nextapi.pro/v1'
});

// 普通请求
async function chat() {
  const completion = await openai.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: [{ role: 'user', content: '你好!' }],
  });
  
  console.log(completion.choices[0].message.content);
}

// 流式请求
async function streamChat() {
  const stream = await openai.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: [{ role: 'user', content: '写一首诗' }],
    stream: true,
  });

  for await (const chunk of stream) {
    if (chunk.choices[0]?.delta?.content) {
      process.stdout.write(chunk.choices[0].delta.content);
    }
  }
}

chat();

cURL 示例

bash
# 普通请求
curl https://api.nextapi.pro/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-你的密钥" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "你好!"}]
  }'

# 流式请求
curl https://api.nextapi.pro/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-你的密钥" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "写一首诗"}],
    "stream": true
  }'

# 带参数的请求
curl https://api.nextapi.pro/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-你的密钥" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "写一首诗"}],
    "temperature": 0.7,
    "max_tokens": 100
  }'

❌ 错误处理

HTTP 状态码

状态码说明解决方案
400请求参数错误检查请求格式和参数
401认证失败检查 API Key 是否正确
403权限不足检查账户权限和余额
404资源不存在检查 API 地址和模型名称
429请求过于频繁降低请求频率,添加重试逻辑
500服务器错误稍后重试,联系客服
503服务不可用稍后重试

错误响应格式

json
{
  "error": {
    "message": "Incorrect API key provided",
    "type": "invalid_request_error",
    "code": "invalid_api_key"
  }
}

💡 最佳实践

1. 选择合适的模型

场景推荐模型原因
简单对话gpt-4o-mini便宜快速
复杂推理gpt-4o性能强
写代码claude-sonnet-4-6代码能力强
中文任务qwen3-max中文效果好

2. 控制 token 使用

python
# 使用 max_tokens 限制输出
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "写一首诗"}],
    max_tokens=100  # 限制输出
)

3. 使用流式输出

python
# 流式输出可以提前终止
stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "写一首诗"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
        # 可以根据条件提前终止
        if some_condition:
            break

4. 错误重试

python
import time
from openai import OpenAI, RateLimitError

client = OpenAI(
    api_key="sk-你的密钥",
    base_url="https://api.nextapi.pro/v1"
)

def chat_with_retry(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = client.chat.completions.create(
                model="gpt-4o-mini",
                messages=messages
            )
            return response
        except RateLimitError:
            if attempt < max_retries - 1:
                time.sleep(2 ** attempt)  # 指数退避
                continue
            raise

下一步