文本生成
通用对话接口
通过一个 OpenAI 兼容接口调用全部文本模型,换模型只改 model
POST
/
v1
/
chat
/
completions
curl -X POST https://api.qingbo.ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"messages": [
{
"role": "system",
"content": "你是一个专业的AI助手。"
},
{
"role": "user",
"content": "解释一下冒泡排序算法。"
}
],
"temperature": 0.7,
"max_tokens": 1024
}'
from openai import OpenAI
client = OpenAI(
base_url="https://api.qingbo.ai/v1",
api_key="YOUR_API_KEY"
)
response = client.chat.completions.create(
model="gpt-5.6-luna",
messages=[
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"}
],
temperature=0.7,
max_tokens=1024
)
print(response.choices[0].message.content)
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.qingbo.ai/v1',
apiKey: 'YOUR_API_KEY'
});
const response = await client.chat.completions.create({
model: 'gpt-5.6-luna',
messages: [
{ role: 'system', content: '你是一个专业的AI助手。' },
{ role: 'user', content: '解释一下冒泡排序算法。' }
],
temperature: 0.7,
max_tokens: 1024
});
console.log(response.choices[0].message.content);
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "gpt-5.6-luna",
"messages": []map[string]string{
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"},
},
"temperature": 0.7,
"max_tokens": 1024,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.qingbo.ai/v1/chat/completions", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
result, _ := io.ReadAll(resp.Body)
fmt.Println(string(result))
}
import java.net.http.*;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String payload = """
{
"model": "gpt-5.6-luna",
"messages": [
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"}
],
"temperature": 0.7,
"max_tokens": 1024
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.qingbo.ai/v1/chat/completions"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
{
"id": "chatcmpl-CdA8u0qPqzeN2gu8QLuQfjaP9CHU4",
"object": "chat.completion",
"created": 1763449816,
"model": "gpt-5.6-luna",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "冒泡排序(Bubble Sort)是一种简单的比较交换排序。它通过重复遍历序列,比较相邻元素并把较大的“冒泡”到右侧末端,直到序列有序。\n\n核心思想\n- 每一趟从左到右比较相邻元素,若前者大于后者则交换。一次趟结束后,当前未排部分中最大的元素被放到末尾。\n- 重复多趟,直到没有发生交换或已完成 n−1 趟。\n\n流程示例(以 [5, 1, 4, 2] 为例)\n- 第1趟:比较并交换 → [1, 5, 4, 2] → [1, 4, 5, 2] → [1, 4, 2, 5](最大元素5到末尾)\n- 第2趟:比较并交换 → [1, 4, 2, 5] → [1, 2, 4, 5](已整体有序,可提前结束)\n\n性质\n- 时间复杂度:平均/最坏 O(n^2),最好 O(n)(当已基本有序且使用提前退出优化)\n- 空间复杂度:O(1)(就地排序)\n- 稳定性:稳定(相等元素相对次序不变)\n- 适用场景:数据量小或序列几乎有序;不适合大规模无序数据\n\n常见优化\n- 提前退出:某趟未发生交换则已排序完成。\n- 缩短边界:记录本趟最后一次交换的位置,下一趟只需遍历到该位置。\n- 双向冒泡(鸡尾酒排序):从左到右、再从右到左各走一遍,更快收敛。\n\n简要伪代码\nfunction bubbleSort(a):\n n = length(a)\n repeat\n swapped = false\n for j = 0 to n-2:\n if a[j] > a[j+1]:\n swap(a[j], a[j+1])\n swapped = true\n n = n - 1 // 末尾已就位,缩短范围\n until swapped == false\n\n如需,我可以给出某种语言的实现代码或更多变体说明。",
"refusal": null,
"annotations": []
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 1030,
"total_tokens": 1054,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 512,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
}
}
{
"error": {
"code": 400,
"message": "请求参数无效",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "身份验证失败,请检查您的API密钥",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "账户余额不足,请充值后再试",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "访问被禁止,您没有权限访问此资源",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "请求过于频繁,请稍后再试",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "服务器内部错误,请稍后重试",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "网关错误,服务器暂时不可用",
"type": "bad_gateway"
}
}
OpenAI Chat Completions 兼容接口,是全部文本模型的默认入口。换模型只改
model,不需要更换 URL 或 Key。各模型支持的能力见文本模型总览。
curl -X POST https://api.qingbo.ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"messages": [
{
"role": "system",
"content": "你是一个专业的AI助手。"
},
{
"role": "user",
"content": "解释一下冒泡排序算法。"
}
],
"temperature": 0.7,
"max_tokens": 1024
}'
from openai import OpenAI
client = OpenAI(
base_url="https://api.qingbo.ai/v1",
api_key="YOUR_API_KEY"
)
response = client.chat.completions.create(
model="gpt-5.6-luna",
messages=[
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"}
],
temperature=0.7,
max_tokens=1024
)
print(response.choices[0].message.content)
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.qingbo.ai/v1',
apiKey: 'YOUR_API_KEY'
});
const response = await client.chat.completions.create({
model: 'gpt-5.6-luna',
messages: [
{ role: 'system', content: '你是一个专业的AI助手。' },
{ role: 'user', content: '解释一下冒泡排序算法。' }
],
temperature: 0.7,
max_tokens: 1024
});
console.log(response.choices[0].message.content);
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "gpt-5.6-luna",
"messages": []map[string]string{
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"},
},
"temperature": 0.7,
"max_tokens": 1024,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.qingbo.ai/v1/chat/completions", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
result, _ := io.ReadAll(resp.Body)
fmt.Println(string(result))
}
import java.net.http.*;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String payload = """
{
"model": "gpt-5.6-luna",
"messages": [
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"}
],
"temperature": 0.7,
"max_tokens": 1024
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.qingbo.ai/v1/chat/completions"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
{
"id": "chatcmpl-CdA8u0qPqzeN2gu8QLuQfjaP9CHU4",
"object": "chat.completion",
"created": 1763449816,
"model": "gpt-5.6-luna",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "冒泡排序(Bubble Sort)是一种简单的比较交换排序。它通过重复遍历序列,比较相邻元素并把较大的“冒泡”到右侧末端,直到序列有序。\n\n核心思想\n- 每一趟从左到右比较相邻元素,若前者大于后者则交换。一次趟结束后,当前未排部分中最大的元素被放到末尾。\n- 重复多趟,直到没有发生交换或已完成 n−1 趟。\n\n流程示例(以 [5, 1, 4, 2] 为例)\n- 第1趟:比较并交换 → [1, 5, 4, 2] → [1, 4, 5, 2] → [1, 4, 2, 5](最大元素5到末尾)\n- 第2趟:比较并交换 → [1, 4, 2, 5] → [1, 2, 4, 5](已整体有序,可提前结束)\n\n性质\n- 时间复杂度:平均/最坏 O(n^2),最好 O(n)(当已基本有序且使用提前退出优化)\n- 空间复杂度:O(1)(就地排序)\n- 稳定性:稳定(相等元素相对次序不变)\n- 适用场景:数据量小或序列几乎有序;不适合大规模无序数据\n\n常见优化\n- 提前退出:某趟未发生交换则已排序完成。\n- 缩短边界:记录本趟最后一次交换的位置,下一趟只需遍历到该位置。\n- 双向冒泡(鸡尾酒排序):从左到右、再从右到左各走一遍,更快收敛。\n\n简要伪代码\nfunction bubbleSort(a):\n n = length(a)\n repeat\n swapped = false\n for j = 0 to n-2:\n if a[j] > a[j+1]:\n swap(a[j], a[j+1])\n swapped = true\n n = n - 1 // 末尾已就位,缩短范围\n until swapped == false\n\n如需,我可以给出某种语言的实现代码或更多变体说明。",
"refusal": null,
"annotations": []
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 1030,
"total_tokens": 1054,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 512,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
}
}
{
"error": {
"code": 400,
"message": "请求参数无效",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "身份验证失败,请检查您的API密钥",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "账户余额不足,请充值后再试",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "访问被禁止,您没有权限访问此资源",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "请求过于频繁,请稍后再试",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "服务器内部错误,请稍后重试",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "网关错误,服务器暂时不可用",
"type": "bad_gateway"
}
}
鉴权
string
必填
所有接口均需要使用Bearer Token进行认证获取 API Key:访问 API Key 管理页面 获取您的 API Key使用时在请求头中添加:
Authorization: Bearer YOUR_API_KEY
请求参数
string
必填
模型 ID全部可用模型与各自支持的能力见文本模型总览;实时可用性以
GET /v1/models 为准。切换模型只改这一个字段。参数是否可用取决于具体模型,不是所有 OpenAI 参数在每个模型上都可用:GPT-5 及之后的模型用 max_completion_tokens 和 reasoning_effort,Claude 用 max_tokens;gpt-5-pro / gpt-5.2-pro / gpt-5.4-pro / gpt-5.3-codex / o3-pro 只接受 Responses 接口。array
必填
number
控制输出随机性,范围 0-2
- 较低的值(如 0.2)使输出更确定
- 较高的值(如 1.8)使输出更随机
integer
生成的最大token数量不同模型有不同的最大值限制,请参考具体模型文档
boolean
是否使用流式输出
true: 流式返回(SSE格式)false: 一次性返回完整响应
number
核采样参数,范围 0-1控制生成文本的多样性,建议与 temperature 二选一使用默认值:1.0
number
频率惩罚,范围 -2.0 到 2.0正值会降低重复使用相同词汇的可能性默认值:0
number
存在惩罚,范围 -2.0 到 2.0正值会增加谈论新主题的可能性默认值:0
string or array
停止序列最多4个序列,遇到这些序列时将停止生成
integer
生成的回复数量默认值:1
integer
输出 token 上限(GPT-5 及之后的 OpenAI 模型)这些模型拒绝
max_tokens,必须用本字段。思考 token 也从这个预算里扣:finish_reason: "length" 表示输出可能没写完,不能当作完整回答。string
推理档位(OpenAI 推理模型)取值
none / low / medium / high / xhigh。GPT-5.6 与 GPT-5.4 / 5.5 支持 none;GPT-6.1 Sol 支持 low / medium / high / xhigh,不支持 none;GPT-6 Astra 只支持 low。非 OpenAI 模型不要传这个字段。object
流式附加选项设
{"include_usage": true} 时,SSE 会在 [DONE] 之前多发一帧只带 usage 的事件。这一帧的 choices 可能是空数组,读取时先取 usage 再判断文本增量,否则会因数组越界丢掉费用信息。详见流式输出。object
结构化输出
{"type": "json_schema", "json_schema": {...}} 按 JSON Schema 约束返回,{"type": "json_object"} 只保证是合法 JSON。只在总览表「JSON / 工具」一列左侧为 ✓ 的模型上可用。Claude 全系不支持,会返回 400;deepseek-v3.2-exp 与 deepseek-v3.1-terminus 不保证严格遵循 schema。array
可调用的函数声明
[{"type": "function", "function": {"name": ..., "description": ..., "parameters": {JSON Schema}}}]。模型只生成函数名和参数并放在响应的 tool_calls 里,平台不执行任何工具,执行与结果回传由你的应用负责。只在总览表「JSON / 工具」一列右侧为 ✓ 的模型上可用。string or object
工具选择方式
"auto"(默认)、"none",或 {"type": "function", "function": {"name": "..."}} 强制调用指定函数。Claude Fable 系列只接受 "auto","required" 或指定函数名会返回 400。响应
string
响应的唯一标识符
string
对象类型,固定为
chat.completioninteger
创建时间戳
string
实际使用的模型名称
array
object
string
系统指纹标识(用于追踪后端配置)
可用模型
全部模型 ID、支持的能力、长上下文分档与计费方式见文本模型总览。实时可用性与单价以目录接口为准:curl https://api.qingbo.ai/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
使用示例
基础对话
{
"model": "gpt-5.6-luna",
"messages": [
{"role": "user", "content": "你好"}
]
}
系统提示词
{
"model": "claude-sonnet-5",
"messages": [
{"role": "system", "content": "你是一位专业的Python编程导师"},
{"role": "user", "content": "如何使用列表推导式?"}
]
}
多轮对话
{
"model": "gemini-3.5-flash",
"messages": [
{"role": "user", "content": "什么是机器学习?"},
{"role": "assistant", "content": "机器学习是人工智能的一个分支..."},
{"role": "user", "content": "能举个例子吗?"}
]
}
流式输出
{
"model": "gpt-5.6-luna",
"messages": [
{"role": "user", "content": "写一首关于春天的诗"}
],
"stream": true
}
用量与计费
usage.prompt_tokens 是输入总量,已包含 prompt_tokens_details.cached_tokens;usage.completion_tokens 已包含 completion_tokens_details.reasoning_tokens。缓存部分按缓存价替代普通输入价,思考 token 按输出价计一次,两者都不叠加。
响应里的 usage.cost 是整数 quota,不是美元(500,000 quota = 1 USD)。最终扣款以控制台账单中的文本账务记录为准;pricing_pending 表示仍待核对,不是零费用。完整口径、状态含义和计算公式见文本模型总览 · 计费口径。
没有收到完整
usage、连接中断或响应缺少费用字段,都不代表本次调用免费。先到控制台核对已有用量记录,不要自动重发。当前不支持
以下请求返回400,不计费:
- 厂商内置工具——
tools里出现function/custom之外的类型。由调用方自己执行的函数工具正常使用。 web_search_options。service_tier取standard/default以外的值。
tools、tool_choice、response_format,同样返回 400。各模型支持的能力见文本模型总览。计费方式为「输入输出两项」的模型会忽略显式 cache_control,输入全部按输入价计费;其余模型的处理见文本模型总览 · 缓存。
相关文档
⌘I
curl -X POST https://api.qingbo.ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"messages": [
{
"role": "system",
"content": "你是一个专业的AI助手。"
},
{
"role": "user",
"content": "解释一下冒泡排序算法。"
}
],
"temperature": 0.7,
"max_tokens": 1024
}'
from openai import OpenAI
client = OpenAI(
base_url="https://api.qingbo.ai/v1",
api_key="YOUR_API_KEY"
)
response = client.chat.completions.create(
model="gpt-5.6-luna",
messages=[
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"}
],
temperature=0.7,
max_tokens=1024
)
print(response.choices[0].message.content)
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.qingbo.ai/v1',
apiKey: 'YOUR_API_KEY'
});
const response = await client.chat.completions.create({
model: 'gpt-5.6-luna',
messages: [
{ role: 'system', content: '你是一个专业的AI助手。' },
{ role: 'user', content: '解释一下冒泡排序算法。' }
],
temperature: 0.7,
max_tokens: 1024
});
console.log(response.choices[0].message.content);
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "gpt-5.6-luna",
"messages": []map[string]string{
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"},
},
"temperature": 0.7,
"max_tokens": 1024,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.qingbo.ai/v1/chat/completions", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
result, _ := io.ReadAll(resp.Body)
fmt.Println(string(result))
}
import java.net.http.*;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String payload = """
{
"model": "gpt-5.6-luna",
"messages": [
{"role": "system", "content": "你是一个专业的AI助手。"},
{"role": "user", "content": "解释一下冒泡排序算法。"}
],
"temperature": 0.7,
"max_tokens": 1024
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.qingbo.ai/v1/chat/completions"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
{
"id": "chatcmpl-CdA8u0qPqzeN2gu8QLuQfjaP9CHU4",
"object": "chat.completion",
"created": 1763449816,
"model": "gpt-5.6-luna",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "冒泡排序(Bubble Sort)是一种简单的比较交换排序。它通过重复遍历序列,比较相邻元素并把较大的“冒泡”到右侧末端,直到序列有序。\n\n核心思想\n- 每一趟从左到右比较相邻元素,若前者大于后者则交换。一次趟结束后,当前未排部分中最大的元素被放到末尾。\n- 重复多趟,直到没有发生交换或已完成 n−1 趟。\n\n流程示例(以 [5, 1, 4, 2] 为例)\n- 第1趟:比较并交换 → [1, 5, 4, 2] → [1, 4, 5, 2] → [1, 4, 2, 5](最大元素5到末尾)\n- 第2趟:比较并交换 → [1, 4, 2, 5] → [1, 2, 4, 5](已整体有序,可提前结束)\n\n性质\n- 时间复杂度:平均/最坏 O(n^2),最好 O(n)(当已基本有序且使用提前退出优化)\n- 空间复杂度:O(1)(就地排序)\n- 稳定性:稳定(相等元素相对次序不变)\n- 适用场景:数据量小或序列几乎有序;不适合大规模无序数据\n\n常见优化\n- 提前退出:某趟未发生交换则已排序完成。\n- 缩短边界:记录本趟最后一次交换的位置,下一趟只需遍历到该位置。\n- 双向冒泡(鸡尾酒排序):从左到右、再从右到左各走一遍,更快收敛。\n\n简要伪代码\nfunction bubbleSort(a):\n n = length(a)\n repeat\n swapped = false\n for j = 0 to n-2:\n if a[j] > a[j+1]:\n swap(a[j], a[j+1])\n swapped = true\n n = n - 1 // 末尾已就位,缩短范围\n until swapped == false\n\n如需,我可以给出某种语言的实现代码或更多变体说明。",
"refusal": null,
"annotations": []
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 1030,
"total_tokens": 1054,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 512,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
}
}
{
"error": {
"code": 400,
"message": "请求参数无效",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "身份验证失败,请检查您的API密钥",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "账户余额不足,请充值后再试",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "访问被禁止,您没有权限访问此资源",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "请求过于频繁,请稍后再试",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "服务器内部错误,请稍后重试",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "网关错误,服务器暂时不可用",
"type": "bad_gateway"
}
}