0. 介绍
chatgpt 是一个人工智能模型,该公司提供了可调用的 api 接口进行使用。
1. openai库
python 下载安装 openai 库,即可使用官方提供的库文件进行api使用。
pip install openai
据目前所了解资料,openai 认证方式是通过密钥进行验证,密钥生成之后就不会显示第二次,所以需要进行及时保存。
以下是官方示例:
from openai import OpenAI
client = OpenAI(
organization='org-QJDpr7acI5F99Zo3RVHGYzAD',
)
通过OpenAI 创建对象的时候,需要填写密钥进行验证。openai 可使用任何类型语言,只要能够进行http通信,都可以模拟出类似的报文进行发送。
2. chatgpt的api
chatgpt 是通过 网络的http报文进行发送和接收的。官网可使用流的方式进行使用。官方提供了openai的接口。可以创建OpenAI对象进行对话。
client = OpenAI()
client.chat.completions.create(
model 模型
messages 发送的消息,如果联系上下文,可以使用一个列表将问题添加进去。
问题使用字典形式{"role":"user", "content":content}表示用户输入的对话。
gpt模型的回答形式{"role":"assistant", "content":content},
其中的role表示角色,content表示内容。
联系上下文的话,是通过这样一种形式:
[
{"role":"user", "content":content},
{"role":"assistant", "content":content}
]
就能够表示之前和gpt模型之间的问题交互了。
stream = True 如果使用流模式进行交互的话,则需要开启 stream这个功能,之后,就可以流动式获取gpt模型的回答。另外,可以设置max_token对token进行限制。防止消耗token过多。
)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=conversation_history,
max_tokens=50, # 控制生成的文本长度
temperature=0.7, # 控制生成文本的多样性
stop=["\n", "Why"], # 设置停止条件,当生成文本中包含指定的条件时停止
frequency_penalty=0.2, # 用于调整特定单词的频率
presence_penalty=0.0, # 用于调整特定单词的频率
best_of=1, # 选择最佳回复的数量
stream=False # 设置为 True 以启用生成器方式逐步获取生成的文本
)
model_reply = response.choices[0].message["content"] # 获取回复
# 如果使用流模式:
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
def test03():
try:
client = OpenAI(api_key="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")
conversation_history = []
max_history_length = 3
# 用户输入新的问题
while True:
user_input = input("用户: ")
# 将用户输入添加到对话历史
conversation_history.append({"role": "user", "content": user_input})
stream = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=conversation_history,
stream=True,
# max_tokens=50
)
model_reply = ''
for chunk in stream:
if chunk.choices[0].delta.content is not None:
model_reply += chunk.choices[0].delta.content
print(chunk.choices[0].delta.content, end="")
time.sleep(20)
conversation_history.append({"role": "assistant", "content": model_reply})
if "exit" in user_input:
print("问答结束.")
break
except:
for conversation in conversation_history:
print(conversation)
至此,可以完成对 chatgpt 的 api 的调用,并能够完成连续对话,且记忆上下文,但值得注意的是,上下文是通过每次对话发送请求的时候,将全部所需上下文的token都进行发送,询问问题并回答是消耗大量token的。
标签:chunk,content,conversation,api,openai,history From: https://www.cnblogs.com/zxinlog/p/17923250.html