对话补全 Chat Completions

Chat Completions 是最核心的 API 端点,用于与大语言模型进行对话交互。

OpenAI 兼容:本端点 100% 兼容 OpenAI Chat Completions API 格式。如果你已有 OpenAI 代码,只需替换 base_urlapi_key 即可无缝迁移。

端点

POST https://api2everything.xyz/v1/chat/completions

请求时需在 Header 中携带 API Key 进行认证:

Authorization: Bearer sk-your-api-key
Content-Type: application/json

请求参数

参数类型必填默认值说明
modelstring-模型 ID,如 gpt-4oclaude-sonnet-4-20250514deepseek-chat。查看 模型列表
messagesarray-对话消息数组,详见下方 Messages 格式
temperaturenumber1.0采样温度,范围 0-2。值越低回复越确定,越高越随机
top_pnumber1.0核采样概率,范围 0-1。与 temperature 二选一调整即可
max_tokensinteger模型默认生成的最大 token 数量
streambooleanfalse是否启用流式输出(SSE)。详见 流式输出
toolsarray-可用工具/函数列表。详见 函数调用
tool_choicestring/objectauto工具选择策略:autononerequired 或指定函数
response_formatobject-指定输出格式,如 {"type": "json_object"} 强制 JSON 输出
ninteger1为每条消息生成多少个回复
stopstring/arraynull停止序列,遇到指定字符串时停止生成
presence_penaltynumber0话题存在惩罚,范围 -2.0 到 2.0。正值鼓励模型讨论新话题
frequency_penaltynumber0频率惩罚,范围 -2.0 到 2.0。正值降低模型重复相同内容的可能性

Messages 格式

messages 是一个消息对象数组,每个对象包含 rolecontent 字段:

角色类型

role说明
system系统提示词,用于设定模型的行为和角色。放在消息数组的最前面
user用户消息,代表人类的输入
assistant助手消息,代表模型的回复。在多轮对话中用于提供历史上下文

content 字段

content 支持两种格式:

{
  "role": "user",
  "content": [
    {"type": "text", "text": "这张图片里有什么?"},
    {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
  ]
}
提示:图片识别需要使用支持 Vision 的模型(如 gpt-4oclaude-sonnet-4-20250514)。详见 图片识别 文档。

多轮对话

要实现多轮对话,需要将之前的对话历史按顺序放入 messages 数组中。模型会根据完整的上下文生成回复:

{
  "model": "gpt-4o",
  "messages": [
    {"role": "system", "content": "你是一个有帮助的助手。"},
    {"role": "user", "content": "法国的首都是哪里?"},
    {"role": "assistant", "content": "法国的首都是巴黎。"},
    {"role": "user", "content": "那里有什么著名景点?"}
  ]
}
注意:每次请求都需要发送完整的对话历史。API 本身不保存对话状态,上下文管理需在客户端完成。消息数量越多,消耗的 token 越多。

响应格式

成功调用后返回如下 JSON 结构:

{
  "id": "chatcmpl-abc123def456",
  "object": "chat.completion",
  "created": 1713345600,
  "model": "gpt-4o-2024-08-06",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!有什么可以帮助你的吗?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 15,
    "total_tokens": 27
  }
}

字段说明

字段类型说明
idstring本次请求的唯一标识符
objectstring对象类型,固定为 chat.completion
createdinteger创建时间的 Unix 时间戳
modelstring实际使用的模型 ID(可能包含版本后缀)
choicesarray模型生成的回复列表。通常只有一个元素(除非 n > 1
choices[].messageobject回复消息,包含 rolecontent
choices[].finish_reasonstring停止原因:stop(正常结束)、length(达到 max_tokens)、tool_calls(调用工具)
usageobjecttoken 用量统计,包含 prompt_tokenscompletion_tokenstotal_tokens

示例

基本请求 — Python

from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api2everything.xyz/v1"
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "用一句话解释量子计算"}
    ],
    temperature=0.7,
    max_tokens=200
)

print(response.choices[0].message.content)

基本请求 — cURL

curl https://api2everything.xyz/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "用一句话解释量子计算"}
    ],
    "temperature": 0.7,
    "max_tokens": 200
  }'

多轮对话 — Python

from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api2everything.xyz/v1"
)

# 维护对话历史
history = [
    {"role": "system", "content": "你是一个专业的烹饪助手。"}
]

def chat(user_message):
    history.append({"role": "user", "content": user_message})
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=history
    )
    reply = response.choices[0].message.content
    history.append({"role": "assistant", "content": reply})
    return reply

print(chat("我想做一道简单的意大利面"))
print(chat("家里没有培根,可以用什么替代?"))

使用 System Prompt — cURL

curl https://api2everything.xyz/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "messages": [
      {"role": "system", "content": "你是一个资深的 Python 开发者,回答简洁且附带代码示例。"},
      {"role": "user", "content": "如何用 Python 读取 CSV 文件?"}
    ],
    "temperature": 0.3
  }'

错误处理

当请求失败时,API 返回包含 error 对象的 JSON 响应:

{
  "error": {
    "message": "Invalid API key provided.",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}

常见错误码

HTTP 状态码含义常见原因处理建议
401认证失败API Key 无效、过期或未提供检查 Key 是否正确,前往 控制台 确认 Key 状态
429请求频率超限短时间内发送了过多请求实现指数退避重试;降低并发数;联系客服提升限额
400请求参数错误缺少必填参数、参数类型错误、模型不存在检查请求体格式;确认 model 名称是否正确
402余额不足账户额度已用完前往 控制台 充值
500服务器内部错误上游模型服务异常稍后重试;如持续出现请联系客服或更换模型

重试建议

最佳实践:对于 429500 错误,建议使用指数退避策略进行重试。初始等待 1 秒,每次重试等待时间翻倍,最多重试 3 次。
import time
from openai import OpenAI, APIError, RateLimitError

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api2everything.xyz/v1"
)

def chat_with_retry(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model="gpt-4o",
                messages=messages
            )
        except RateLimitError:
            wait = 2 ** attempt  # 1s, 2s, 4s
            print(f"频率限制,{wait}秒后重试...")
            time.sleep(wait)
        except APIError as e:
            if e.status_code == 500 and attempt < max_retries - 1:
                time.sleep(2 ** attempt)
                continue
            raise
    raise Exception("重试次数已用尽")