天天看點

我讓API版的ChatGPT長了記性!無記憶能力的ChatGPT長記性的ChatGPT總結

我讓API版的ChatGPT長了記性!無記憶能力的ChatGPT長記性的ChatGPT總結

OpenAI的API接口是基于請求/響應模式的,每次請求的上下文是獨立的,不會被記錄和儲存。是以,ChatGPT機器人無法記錄和了解上一次請求的内容,也不會把上下文資訊帶入到下一次請求中。請看下面我通過API調用的方式和ChatGPT的聊天記錄:

我讓API版的ChatGPT長了記性!無記憶能力的ChatGPT長記性的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].text

def 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=False
            print("\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].text

def 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)
            #将曆史記錄和目前問題一起喂給ChatGPT
            answer=get_answer(history)
            history.append(answer)
            answer = answer[2:]
            print(f"\033[1;31mChatGPT:{answer}\033[0m")
            print()

        else:
            flag=False
            print()
            print("\033[1;31mChatGPT:後會有期,bye!\033[0m")  

ask_question()
           

 運作上面這段代碼後,我向機器人提出了之前聊天時的相同問題,下面看看長了記性的ChatGPT是怎麼回答我的問題的。

我讓API版的ChatGPT長了記性!無記憶能力的ChatGPT長記性的ChatGPT總結

 這回ChatGPT的回答讓我很滿意,機器人似乎有了記憶力,它能記住我之前對它提出的要求,然後做出了非常正确的回答。

總結

要讓API版的ChatGPT有記憶能力,我們需要讓ChatGPT能記住我們的曆史聊天記錄,是以我們在向ChatGPT提出問題的時候,需要将曆史聊天記錄再加上目前問題統統喂給ChatGPT,這樣它就會産生令人滿意的答案。