Skip to content

Chat Completions

POST /v1/chat/completions

创建聊天补全。该端点完全兼容 OpenAI Chat Completions API

认证

Authorization 请求头中包含你的 API Key:

Authorization: Bearer sk-your-xmai-key

请求参数

参数类型必填说明
modelstring模型 ID,如 gpt-4oclaude-sonnet-4-20250514gemini-2.5-pro
messagesarray消息数组 [{role, content}]
streamboolean是否通过 SSE 流式返回。默认:false
temperaturenumber采样温度,范围 0–2。默认:1
max_tokensnumber最大生成 token 数
top_pnumber核采样参数,范围 0–1
frequency_penaltynumber频率惩罚,范围 -2 到 2
presence_penaltynumber存在惩罚,范围 -2 到 2
stopstring | array停止序列

消息对象

字段类型说明
rolestringsystemuserassistant
contentstring消息内容

响应(非流式)

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参数
Pythonbase_urlhttps://api.xmai.sg/v1
Node.jsbaseURLhttps://api.xmai.sg/v1

其余代码完全不变。你可以用相同的 OpenAI SDK 接口调用 xmAI 上所有可用模型(包括 Claude、Gemini 等)。

The Unified API for LLMs