调试请求
除了 API 响应返回的错误代码外,有时可能还需要检查 HTTP 响应标头。特别值得一提的是包含特定 API 请求的唯一 ID 的标头,以及应用于请求的速率限制信息。以下是随 API 响应返回的 HTTP 标头的不完整列表:
API 元信息
openai-organization
:与请求关联的组织openai-processing-ms
:处理 API 请求所花费的时间openai-version
:用于此请求的 REST API 版本(当前2020-10-01
)x-request-id
:此 API 请求的唯一标识符(用于故障排除)
x-ratelimit-limit-requests
x-ratelimit-limit-tokens
x-ratelimit-remaining-requests
x-ratelimit-remaining-tokens
x-ratelimit-reset-requests
x-ratelimit-reset-tokens
OpenAI 建议在生产部署中记录请求 ID,这将在需要时与我们的支持团队一起更有效地进行故障排除。我们的官方 SDK 在顶级响应对象上提供了一个属性,其中包含x-request-id
页眉。
Python 中的请求 ID
1
2
3
4
5
6
7
8
9
10
11
12
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
messages=[{
"role": "user",
"content": "Say this is a test",
}],
model="gpt-4o-mini",
)
print(response._request_id)
JavaScript 中的请求 ID
1
2
3
4
5
6
7
8
9
import OpenAI from 'openai';
const client = new OpenAI();
const response = await client.chat.completions.create({
messages: [{ role: 'user', content: 'Say this is a test' }],
model: 'gpt-4o-mini'
});
console.log(response._request_id);
在 SDK 中访问原始响应对象
如果您使用的是较低级别的 HTTP 客户端(如 fetch 或HttpClient
在 C 语言中#),您应该已经可以访问作为 HTTP 接口一部分的响应标头。
如果您使用的是 OpenAI 的官方 SDK 之一(在很大程度上抽象了 HTTP 请求/响应周期),您将需要以略有不同的方式访问原始 HTTP 响应。
下面是访问原始响应对象(以及x-ratelimit-limit-tokens
标头)使用我们的 Python SDK 进行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.with_raw_response.create(
messages=[{
"role": "user",
"content": "Say this is a test",
}],
model="gpt-4o-mini",
)
print(response.headers.get('x-ratelimit-limit-tokens'))
# get the object that `chat.completions.create()` would have returned
completion = response.parse()
print(completion)
以下是您访问原始响应(以及x-ratelimit-limit-tokens
标头)使用我们的 JavaScript SDK 进行
1
2
3
4
5
6
7
8
9
10
import OpenAI from 'openai';
const client = new OpenAI();
const response = await client.chat.completions.create({
messages: [{ role: 'user', content: 'Say this is a test' }],
model: 'gpt-4o-mini'
}).asResponse();
// access the underlying Response object
console.log(response.headers.get('x-ratelimit-limit-tokens'));