OpenAI 兼容接口
网关完整兼容 OpenAI 的 REST 形状,绝大多数 OpenAI SDK / 工具改 base_url 即可直接用。
对话补全 /v1/chat/completions
最核心的接口。关键请求参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| model | string | 模型名,必填 |
| messages | array | 消息数组,含 role(system/user/assistant/tool) 与 content |
| temperature | number | 0–2,越大越发散,默认 1 |
| top_p | number | 核采样,与 temperature 二选一调节 |
| max_tokens | int | 限制输出长度 |
| stream | bool | true 时以 SSE 流式返回 |
| stop | string/array | 遇到即停止生成 |
| tools | array | 函数/工具定义(function calling) |
| tool_choice | string/object | 是否强制调用工具 |
| response_format | object | 如 {type:'json_object'} 结构化输出 |
| presence_penalty / frequency_penalty | number | 话题新鲜度 / 重复惩罚 |
| seed | int | 尽量可复现(视上游支持) |
curl https://ai.moespark.dev/v1/chat/completions \
-H "Authorization: Bearer sk-你的令牌" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "写一句 slogan"}],
"temperature": 0.8,
"max_tokens": 64
}'
流式输出(stream=true)
流式返回是一串 data: 行(SSE),以 data: [DONE] 结束。逐块读取 choices[0].delta.content 拼接即可。
import openai
client = openai.OpenAI(api_key="sk-...", base_url="https://ai.moespark.dev/v1")
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "讲个长一点的故事"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta and delta.content:
print(delta.content, end="", flush=True)
注意
SSE 需要客户端保持长连接;反向代理需关闭缓冲。本站 nginx 已对 AI 路径关闭 proxy_buffering。
其它 OpenAI 风格接口
| 接口 | 用途 |
|---|---|
| POST /v1/completions | 传统文本补全(面向 base 模型) |
| POST /v1/embeddings | 文本向量化,输入文本数组,返回向量 |
| POST /v1/images/generations | 文生图(若渠道支持) |
| POST /v1/audio/transcriptions | 语音转写(Whisper 类) |
| POST /v1/audio/speech | 文本转语音 |
| POST /v1/moderations | 内容审核 |
| POST /v1/rerank | 重排序(配合检索使用) |
| GET /v1/models | 列出可用模型 |
多模态(图片输入)
用 content 数组承载文本与图片(URL 或 base64):
{
"model": "gpt-4o-mini",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "这张图里是什么?"},
{"type": "image_url", "image_url": {"url": "https://example.com/a.png"}}
]
}]
}
函数调用(tools)
定义工具后,模型可能返回 tool_calls;你执行函数再把结果以 role:"tool" 回传。详见 高级用法。