OpenAI的API接口是基于请求/响应模式的,每次请求的上下文是独立的,不会被记录和保存。因此,ChatGPT机器人无法记录和理解上一次请求的内容,也不会把上下文信息带入到下一次请求中。请看下面我通过API调用的方式和ChatGPT的聊天记录:
很显然API版的ChatGPT没有记住我第一个问题里面的内容,在随后对我提的所有问题,ChatGPT开始了一本正经的胡说八道!是否有办法避免这种情况的发生,同时让API版的chatGPT和平台版的chatGPT有一样的用户体验呢?办法还是有的!!!首先看看没有记性的ChatGPT长什么样。
无记忆能力的ChatGPT
下面是我通过API的方式来调用ChatGPT,每次只把用户的当前问题喂给ChatGPT, 然后ChatGPT也只会针对当前问题做出回答,仅此而已:
# 以下是我写的chat.py文件的聊天机器人代码
import openai
#申请的api_key
openai.api_key = "XXXXXXXXXXX"
def get_answer(question):response = openai.Completion.create(model="text-davinci-003",prompt=question,temperature=0.5, max_tokens=2048) return response.choices[0].textdef ask_question():flag=True#问候语print()greeting="\033[1;31mChatGPT: 我是ChatGPT聊天机器人,我可以回答您的任何问题!如果您想退出,请输入:quit\033[0m"print(greeting)print()while(flag==True):question = input()if(question!='quit'):answer=get_answer(question)answer = answer[2:]print(f"\033[1;31mChatGPT:{answer}\033[0m")print()else:flag=Falseprint("\033[1;31mChatGPT:后会有期,bye!\033[0m") ask_question()
运行上面这段代码后如果你提出类似我上面聊天记录里的问题,那么ChatGPT的回答会让你很失望!因为机器人无法参考之前的历史聊天内容,机器人只理解当前问题的含义,所以有时候无法做出令人满意的正确回答。
长记性的ChatGPT
如何能让ChatGPT长点记性呢?办法还是有的,经过我的一番尝试,终于让API版的ChatGPT有了记忆能力,为了让ChatGPT长记性,我们要做的就是在每次提问的时候将历史聊天记录再加上当前的问题一起喂给ChatGPT,这样机器人在回答当前问题时就会参考历史的聊天记录,从而使ChatGPT长了记性,不再会胡说八道了。
# 以下是我写的chat.py文件的聊天机器人代码
import openai
#申请的api_key
openai.api_key = "XXXXXXXXXXX"
def get_answer(history):response = openai.Completion.create(model="text-davinci-003",prompt="\n".join(history),temperature=0.5, max_tokens=2048) return response.choices[0].textdef ask_question(): flag=True# 存储会话历史history = []print()greeting="\033[1;31mChatGPT: 我是ChatGPT聊天机器人,\我可以回答您的任何问题!如果您想退出,请输入:quit\033[0m"print(greeting)print()while(flag==True):question = input()if(question!='quit'):history.append(question)#将历史记录和当前问题一起喂给ChatGPTanswer=get_answer(history)history.append(answer)answer = answer[2:]print(f"\033[1;31mChatGPT:{answer}\033[0m")print()else:flag=Falseprint()print("\033[1;31mChatGPT:后会有期,bye!\033[0m") ask_question()
运行上面这段代码后,我向机器人提出了之前聊天时的相同问题,下面看看长了记性的ChatGPT是怎么回答我的问题的。
这回ChatGPT的回答让我很满意,机器人似乎有了记忆力,它能记住我之前对它提出的要求,然后做出了非常正确的回答。
总结
要让API版的ChatGPT有记忆能力,我们需要让ChatGPT能记住我们的历史聊天记录,因此我们在向ChatGPT提出问题的时候,需要将历史聊天记录再加上当前问题统统喂给ChatGPT,这样它就会产生令人满意的答案。