Chat Completions
POST /v1/chat/completions
创建聊天补全。该端点完全兼容 OpenAI Chat Completions API。
认证
在 Authorization 请求头中包含你的 API Key:
Authorization: Bearer sk-your-xmai-key请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 模型 ID,如 gpt-4o、claude-sonnet-4-20250514、gemini-2.5-pro |
messages | array | 是 | 消息数组 [{role, content}] |
stream | boolean | 否 | 是否通过 SSE 流式返回。默认:false |
temperature | number | 否 | 采样温度,范围 0–2。默认:1 |
max_tokens | number | 否 | 最大生成 token 数 |
top_p | number | 否 | 核采样参数,范围 0–1 |
frequency_penalty | number | 否 | 频率惩罚,范围 -2 到 2 |
presence_penalty | number | 否 | 存在惩罚,范围 -2 到 2 |
stop | string | array | 否 | 停止序列 |
消息对象
| 字段 | 类型 | 说明 |
|---|---|---|
role | string | system、user 或 assistant |
content | string | 消息内容 |
响应(非流式)
json
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1710000000,
"model": "gpt-4o",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!有什么可以帮助你的?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 12,
"total_tokens": 22
}
}响应(流式)
当 stream: true 时,响应以 Server-Sent Events(SSE)格式发送。
每个事件是以 data: 为前缀的 JSON 对象:
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1710000000,"model":"gpt-4o","choices":[{"index":0,"delta":{"role":"assistant","content":"你好"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1710000000,"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1710000000,"model":"gpt-4o","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]代码示例
基本请求
python
from openai import OpenAI
client = OpenAI(
api_key="sk-your-xmai-key",
base_url="https://api.xmai.sg/v1",
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "法国的首都是哪里?"},
],
temperature=0.7,
)
print(response.choices[0].message.content)javascript
import OpenAI from 'openai'
const client = new OpenAI({
apiKey: 'sk-your-xmai-key',
baseURL: 'https://api.xmai.sg/v1',
})
const response = await client.chat.completions.create({
model: 'gpt-4o',
messages: [
{ role: 'system', content: '你是一个有帮助的助手。' },
{ role: 'user', content: '法国的首都是哪里?' },
],
temperature: 0.7,
})
console.log(response.choices[0].message.content)go
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
body := map[string]interface{}{
"model": "gpt-4o",
"messages": []map[string]string{
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "法国的首都是哪里?"},
},
"temperature": 0.7,
}
jsonBody, _ := json.Marshal(body)
req, _ := http.NewRequest("POST",
"https://api.xmai.sg/v1/chat/completions",
bytes.NewBuffer(jsonBody))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer sk-your-xmai-key")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(string(data))
}bash
curl https://api.xmai.sg/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-xmai-key" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "法国的首都是哪里?"}
],
"temperature": 0.7
}'流式输出
python
from openai import OpenAI
client = OpenAI(
api_key="sk-your-xmai-key",
base_url="https://api.xmai.sg/v1",
)
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "讲一个小故事。"}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")javascript
import OpenAI from 'openai'
const client = new OpenAI({
apiKey: 'sk-your-xmai-key',
baseURL: 'https://api.xmai.sg/v1',
})
const stream = await client.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: '讲一个小故事。' }],
stream: true,
})
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content
if (content) process.stdout.write(content)
}go
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
)
func main() {
body := map[string]interface{}{
"model": "gpt-4o",
"messages": []map[string]string{{"role": "user", "content": "讲一个小故事。"}},
"stream": true,
}
jsonBody, _ := json.Marshal(body)
req, _ := http.NewRequest("POST",
"https://api.xmai.sg/v1/chat/completions",
bytes.NewBuffer(jsonBody))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer sk-your-xmai-key")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
line := scanner.Text()
if !strings.HasPrefix(line, "data: ") {
continue
}
data := strings.TrimPrefix(line, "data: ")
if data == "[DONE]" {
break
}
var chunk map[string]interface{}
if err := json.Unmarshal([]byte(data), &chunk); err != nil {
continue
}
choices := chunk["choices"].([]interface{})
delta := choices[0].(map[string]interface{})["delta"].(map[string]interface{})
if content, ok := delta["content"].(string); ok {
fmt.Print(content)
}
}
}bash
curl https://api.xmai.sg/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-xmai-key" \
-N \
-d '{
"model": "gpt-4o",
"messages": [{"role": "user", "content": "讲一个小故事。"}],
"stream": true
}'OpenAI SDK 兼容性
xmAI 完全兼容 OpenAI SDK。从 OpenAI 迁移只需修改 base_url:
| SDK | 参数 | 值 |
|---|---|---|
| Python | base_url | https://api.xmai.sg/v1 |
| Node.js | baseURL | https://api.xmai.sg/v1 |
其余代码完全不变。你可以用相同的 OpenAI SDK 接口调用 xmAI 上所有可用模型(包括 Claude、Gemini 等)。