之前写过一篇文章,初步实现调用chatgpt的api实现与机器人的对话,但是并没有提及多轮对话如何实现。在这篇文章中,我将介绍如何利用openai的api实现聊天机器人的多轮对话。
第一步:官网申请api,可参考我之前的博文:
用chatgpt的api实现你的简易个人聊天机器人demo_聊天机器人api_qq_38100666的博客-CSDN博客
第二步:编写程序
设置代理和api
import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:47890"
os.environ["https_proxy"] = "http://127.0.0.1:47890"openai.api_key="your api_key"
定义一个函数进行对话:
def chat(m):history = mwhile True:messages = history[-10:]message = input("")if message.lower() == "stop":breakmessages.append({"role":"user","content": message})history.append({"role":"user","content": message})response=openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=messages)reply = response["choices"][0]["message"]["content"]print(reply)history.append({"role":"assistant", "content": reply})return
定义一个变量history存放历史记录,这是实现多轮对话的关键
history = m
每次对话取前10条历史记录:
messages = history[-10:]
对于openai api的参数的解释:
model:所采用的模型
messages:
role:对话中的角色,包括'user', 'assistant', 'system',‘user’代表终端用户,‘assistant’代表模型扮演的角色。
content:对话的内容。
每轮对话中,首先将历史对话记录与当前用户输入内容合并,通过api输入给模型:
messages = history[-10:]
message = input("")
messages.append({"role":"user","content": message})
response=openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=messages)
得到模型反馈后,输出当前反馈,并将当前会话加入到历史记录中:
reply = response["choices"][0]["message"]["content"]
print(reply)
history.append({"role":"user","content": message})
history.append({"role":"assistant", "content": reply})
如果用户输入‘stop’,则停止对话
if message.lower() == "stop":break
主函数:
if __name__ == "__main__":messages = []print("I am ready to be your friendly chatbot" + "\n" + "You can now type your messages.")chat(messages)print("finished!")
第三步:进行对话,查看效果