当前位置:   article > 正文

ChatGPT 串接 Firebase,實現上下文歷史紀錄_chat with database

chat with database

ChatGPT 串接 Firebase,實現上下文歷史紀錄

在使用 ChatGPT API 時,因為 API 本身是「一次性」,無法儲存聊天的歷史紀錄,這也衍生了「無法串聯上下文」的問題,不過如果將 ChatGPT 串連 Firebase 的 Realtime database,就能夠做到在與 ChatGPT 聊天時,即時透過資料庫記錄上下文的內容,這篇教學會介紹相關的做法。

快速導覽:

建立與設定 Firebase Realtime database 

參考「建立 Firebase RealTime Database」教學,建立一個 Firebase Realtime database。

參考「設定 Firebase RealTime Database 安全規則」教學,將讀取和寫入的規則都設為 true。

參考「串接 Firebase RealTime Database 存取資料」教學,安裝 Python 的 firebase 函式庫。

pip install git+https://github.com/ozgur/python-firebase

ChatGPT 使用 text-davinci-003 模型 

參考「ChatCPT 串連上下文語句」教學中的 text-davinci-003 模型範例,加入 Firebase Realtime database 儲存對話紀錄,如此一來就能在再次開啟時,記得上一次所講的對話。

  1. import openai
  2. openai.api_key = '你的 API Key'
  3. from firebase import firebase
  4. url = 'https://XXXXXXXXX.firebaseio.com'
  5. fdb = firebase.FirebaseApplication(url, None) # 初始化 Firebase Realtime database
  6. chatgpt = fdb.get('/','chatgpt') # 取的 chatgpt 節點的資料
  7. if chatgpt == None:
  8. messages = '' # 如果節點沒有資料,訊息內容設定為空
  9. else:
  10. messages = chatgpt # 如果節點有資料,使用該資料作為歷史聊天記錄
  11. while True:
  12. msg = input('me > ')
  13. if msg == '!reset':
  14. message = ''
  15. fdb.delete('/','chatgpt') # 如果輸入 !reset 就清空歷史紀錄
  16. print('ai > 對話歷史紀錄已經清空!')
  17. else:
  18. messages = f'{messages}{msg}\n' # 在輸入的訊息前方加上歷史紀錄
  19. response = openai.Completion.create(
  20. model='text-davinci-003',
  21. prompt=messages,
  22. max_tokens=128,
  23. temperature=0.5
  24. )
  25. ai_msg = response['choices'][0]['text'].replace('\n','') # 取得 ChatGPT 的回應
  26. print('ai > '+ai_msg)
  27. messages = f'{messages}\n{ai_msg}\n\n' # 在訊息中加入 ChatGPT 的回應
  28. fdb.put('/','chatgpt',messages) # 更新資料庫資料

執行程式後,就算重新啟動程式,ChatGPT 也會記得過去的聊天內容 ( 例如說還記得名字 )

進入 Firebase Realtime database 也能看到歷史紀錄的資料。

ChatGPT 使用 gpt-3.5-turbo 模型 

參考「ChatCPT 串連上下文語句」教學中的 gpt-3.5-turbo3 模型範例,加入 Firebase Realtime database 儲存對話紀錄,如此一來就能在再次開啟時,記得上一次所講的對話。

  1. import openai
  2. openai.api_key = '你的 API Key'
  3. from firebase import firebase
  4. url = 'https://XXXXXXXXXXX.firebaseio.com'
  5. fdb = firebase.FirebaseApplication(url, None) # 初始化 Firebase Realtimr database
  6. chatgpt = fdb.get('/','chatgpt') # 讀取 chatgpt 節點中所有的資料
  7. if chatgpt == None:
  8. messages = [] # 如果沒有資料,預設訊息為空串列
  9. else:
  10. messages = chatgpt # 如果有資料,訊息設定為該資料
  11. while True:
  12. msg = input('me > ')
  13. if msg == '!reset':
  14. fdb.delete('/','chatgpt') # 如果輸入 !reset 就清空 chatgpt 的節點內容
  15. messages = []
  16. print('ai > 對話歷史紀錄已經清空!')
  17. else:
  18. messages.append({"role":"user","content":msg}) # 將輸入的訊息加入歷史紀錄的串列中
  19. response = openai.ChatCompletion.create(
  20. model="gpt-3.5-turbo",
  21. max_tokens=128,
  22. temperature=0.5,
  23. messages=messages
  24. )
  25. ai_msg = response.choices[0].message.content.replace('\n','') # 取得回應訊息
  26. messages.append({"role":"assistant","content":ai_msg}) # 將回應訊息加入歷史紀錄串列中
  27. fdb.put('/','chatgpt',messages) # 更新 chatgpt 節點內容
  28. print(f'ai > {ai_msg}')

執行程式後,就算重新啟動程式,ChatGPT 也會記得過去的聊天內容 ( 例如說還記得名字 )

進入 Firebase Realtime database 也能看到歷史紀錄的資料。

小結 

透過 Firebase Realtime database,就能非常方便快速地儲存 ChatGPT 的聊天記錄,並讓 ChatGPT 能夠分辨上下文,是相當不錯的功能!但仍然要注意的是,回傳歷史紀錄會造成 ChatGPT 的 token 數量暴增,一但超過免費額度就要開始收費囉。

文章摘自ChatGPT 串接 Firebase,實現上下文歷史紀錄 - Python 教學 | STEAM 教育學習網

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/356878
推荐阅读
相关标签
  

闽ICP备14008679号