You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests调用OpenAI API遇model参数缺失及端点请求异常

问题:用Python的requests库调用OpenAI API遇到参数错误及端点请求问题

我不想用官方的openai包,想通过更灵活的requests库调用OpenAI API。初始代码如下:

>>> headers = {"Authorization": "Bearer xxx"}
>>> url = 'https://api.openai.com/v1/completions'
>>> data = {'model': 'text-davinci-002', 'prompt': 'Once upon a time'}
>>> requests.get(url, headers=headers, data=data).content
...  "error": {\n        "message": "you must provide a model parameter"

API令牌已验证是正确的。我试过把字典用json参数传入、转成JSON字符串传入data参数,都返回同样的错误。

更新尝试

我又试了以下几种方式,同样返回相同错误,也尝试在请求头里加了'Content-Type': 'application/json':

>>> requests.get(url, headers=headers, json=data).content
>>> requests.get(url, headers=headers, json=json.dumps(data)).content
>>> requests.get(url, headers=headers, data=json.dumps(data)).content
>>> requests.get(url, headers=headers, data=json.dumps(data).encode()).content

update2:端点请求新问题

用POST请求completions端点能正常工作,但调用edit端点时出问题:

>>> completion_url =  "https://api.openai.com/v1/completions"
>>> completion_data = {'model': 'text-davinci-002', 'prompt': 'Once upon a time'}
>>> requests.post(completion_url, headers=headers, json=completion_data).json()
... # 正常返回结果
>>> edit_url =  "https://api.openai.com/v1/edits"
>>> edit_data = {'model': 'text-davinci-002', 'input': 'Once upon a time', 'instruction': 'Continue'}
>>> requests.get(edit_url, headers=headers, json=edit_data).json()['error']['message']
'you must provide a model parameter'
>>> requests.post(edit_url, headers=headers, json=edit_data).json()['error']['message']
'Invalid URL (POST /v1/edits)'

解答

1. Completions端点的问题根源

OpenAI的/v1/completions端点只接受POST请求,不支持GET请求。你之前用GET方式发送,哪怕参数正确,服务器也不会解析请求体里的参数,所以才会提示“必须提供model参数”。

正确的调用方式就是你后来用的POST请求:

import requests

headers = {"Authorization": "Bearer YOUR_API_KEY"}
completion_url = "https://api.openai.com/v1/completions"
completion_data = {'model': 'text-davinci-002', 'prompt': 'Once upon a time'}
response = requests.post(completion_url, headers=headers, json=completion_data)
print(response.json())

2. Edits端点的问题解决

(1)端点错误的核心原因

/v1/edits端点是存在的,但你遇到的Invalid URL错误,本质是text-davinci-002不支持Edits接口。Edits接口要求使用专门的编辑模型,比如text-davinci-edit-001或者code-davinci-edit-001,普通的completion模型无法调用这个端点。

(2)正确的Edits调用示例

把模型换成支持的编辑模型,用POST请求:

import requests

headers = {"Authorization": "Bearer YOUR_API_KEY"}
edit_url = "https://api.openai.com/v1/edits"
edit_data = {
    'model': 'text-davinci-edit-001',
    'input': 'Once upon a time',
    'instruction': 'Continue the story in a magical tone'
}
response = requests.post(edit_url, headers=headers, json=edit_data)
print(response.json())

关键注意事项

  • OpenAI的所有生成类接口(completions、edits、chat/completions等)全部要求用POST请求,GET请求无法传递请求体参数,会被服务器拒绝解析。
  • 每个接口对应支持的模型不同,调用前要确认模型是否兼容目标接口,比如Edits接口只能用带edit标识的模型。

内容的提问来源于stack exchange,提问作者Adam Schmideg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:35:59