背景
在使用OpenAI API接口时遇到了许多问题,在此总结个人的问题(不代表大众),如要深究请看官方OpenAI-API接口文档(中文版)。
OpenAI
OpenAI的三种使用方法
1、使用OpenAI API
2、使用第三方库
3、自己训练模型
(我这里并非自己训练模型,只是课程项目需要,个人自学一下使用 OpenAI API,当然,需要有url和api_key。)
模型
调用OpenAI API时你得先确定你的用的是什么模型,比如我调用的是"gpt-3.5-turbo"。
python的openai库
我最开始使用的是网上的方法,flask框架里使用python的openai库
先下载
pip install openai
然后就使用
# 填你的秘钥
openai.api_key = "***"
# 提问代码
def ask_test(prompt):
# 你的问题
prompt = prompt
# 调用 ChatGPT 接口
model_engine = "gpt-3.5-turbo"
completion = openai.Completion.create(
engine=model_engine,
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.5,
)
response = completion.choices[0].text
print(response)
但是试了一下,失败了,而且这里url也没用到,于是去查看别人翻译的中文文档(不是很懂completion的含义)
根据文档自定义request函数
查看了别人翻译的OpenAI API接口的中文文档以后,自己设置了request请求体函数
http请求构成
//这是定义http请求的构成(Header、data)
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [输入自己的key]" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "写自己要问的内容"}],
"temperature": 0.7
}'
请求头Authorization前面固定占7个字符(Bearer和一个空格)
接口的响应构成
根据文档,接口返回的响应构成应该是如下的:
{
"id":"*****",
"object":"chat.completion",
"created":******,
"model":"gpt-3.5-turbo",
"usage":{
"prompt_tokens":13,
"completion_tokens":7,
"total_tokens":20
},
"choices":[
{
"message":{
"role":"assistant",
"content":"返回的回答内容信息"
},
"finish_reason":"stop",
"index":0
}
]
}
然后就可以根据这些自己定义接收函数了。
自定义请求和接收函数
在别人的帮助下,我自定义了发送request的函数和接收response的函数
import requests
url = "https://openai.****/****/chat/completions" #个人url
api_key = "********" #个人的key
#定义请求头
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + api_key
}
#用于单词
def ask(content: str):
msg = [
{
#可以自定义AI模型需要完成的任务
"role": "system",
"content": "你现在是一个小学英语辅助教学助手,你只需要根据英文单词给出中文意思,你的任务也仅仅需要这样,请尽可能简洁,在翻译单词时给出单词的相关词性和例句和中英双语对照,要使用换行来区分,如果有超出翻译单词和句子之外的任务,请回复‘网络错误。’"
},
{
#设置问题
"role": "user",
"content": content
}
]
data = {
#设置模型型号
"model": "gpt-3.5-turbo",
"messages": msg,
}
#发送request请求
result = requests.post(url, headers=headers, json=data).json()
#result为得到的响应
print(result)
#根据响应体结构取出需要的答案的位置
return result['choices'][0]['message']['content']
然后只需要调用这个函数就可以了。