调试请求

除了 API 响应返回的错误代码外,有时可能还需要检查 HTTP 响应标头。特别值得一提的是包含特定 API 请求的唯一 ID 的标头,以及应用于请求的速率限制信息。以下是随 API 响应返回的 HTTP 标头的不完整列表:source

API 元信息source

  • openai-organization:与请求关联的组织
  • openai-processing-ms:处理 API 请求所花费的时间
  • openai-version:用于此请求的 REST API 版本(当前2020-10-01)
  • x-request-id:此 API 请求的唯一标识符(用于故障排除)

速率限制信息source

  • 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页眉。source

Python 中的请求 IDsource

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 中的请求 IDsource

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 客户端(如 fetchHttpClient在 C 语言中#),您应该已经可以访问作为 HTTP 接口一部分的响应标头。source

如果您使用的是 OpenAI 的官方 SDK 之一(在很大程度上抽象了 HTTP 请求/响应周期),您将需要以略有不同的方式访问原始 HTTP 响应。source

下面是访问原始响应对象(以及x-ratelimit-limit-tokens标头)使用我们的 Python SDK 进行source

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 进行source

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'));