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

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 儲存對話紀錄,如此一來就能在再次開啟時,記得上一次所講的對話。

import openai
openai.api_key = '你的 API Key'

from firebase import firebase
url = 'https://XXXXXXXXX.firebaseio.com'
fdb = firebase.FirebaseApplication(url, None)    # 初始化 Firebase Realtime database
chatgpt = fdb.get('/','chatgpt')                 # 取的 chatgpt 節點的資料

if chatgpt == None:
    messages = ''        # 如果節點沒有資料,訊息內容設定為空
else:
    messages = chatgpt   # 如果節點有資料,使用該資料作為歷史聊天記錄

while True:
    msg = input('me > ')
    if msg == '!reset':
        message = ''
        fdb.delete('/','chatgpt')         # 如果輸入 !reset 就清空歷史紀錄
        print('ai > 對話歷史紀錄已經清空!')
    else:
        messages = f'{messages}{msg}\n'   # 在輸入的訊息前方加上歷史紀錄
        response = openai.Completion.create(
            model='text-davinci-003',
            prompt=messages,
            max_tokens=128,
            temperature=0.5
        )

        ai_msg = response['choices'][0]['text'].replace('\n','')  # 取得 ChatGPT 的回應
        print('ai > '+ai_msg)
        messages = f'{messages}\n{ai_msg}\n\n'   # 在訊息中加入 ChatGPT 的回應
        fdb.put('/','chatgpt',messages)          # 更新資料庫資料

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

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

ChatGPT 使用 gpt-3.5-turbo 模型 

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

import openai
openai.api_key = '你的 API Key'

from firebase import firebase
url = 'https://XXXXXXXXXXX.firebaseio.com'
fdb = firebase.FirebaseApplication(url, None)   # 初始化 Firebase Realtimr database
chatgpt = fdb.get('/','chatgpt')                # 讀取 chatgpt 節點中所有的資料

if chatgpt == None:
    messages = []        # 如果沒有資料,預設訊息為空串列
else:
    messages = chatgpt   # 如果有資料,訊息設定為該資料

while True:
    msg = input('me > ')
    if msg == '!reset':
        fdb.delete('/','chatgpt')   # 如果輸入 !reset 就清空 chatgpt 的節點內容
        messages = []
        print('ai > 對話歷史紀錄已經清空!')
    else:
        messages.append({"role":"user","content":msg})  # 將輸入的訊息加入歷史紀錄的串列中
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            max_tokens=128,
            temperature=0.5,
            messages=messages
        )
        ai_msg = response.choices[0].message.content.replace('\n','')  # 取得回應訊息
        messages.append({"role":"assistant","content":ai_msg})  # 將回應訊息加入歷史紀錄串列中
        fdb.put('/','chatgpt',messages)   # 更新 chatgpt 節點內容
        print(f'ai > {ai_msg}')

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

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

小結 

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Java连接Firebase,您需要使用Firebase Admin SDK。以下是一些基本步骤: 1. 在Firebase控制台中创建一个新项目。 2. 在项目设置中,生成服务帐号密钥(JSON文件),以便用于身份验证。 3. 在Java项目中添加Firebase Admin SDK依赖项。您可以在Maven或Gradle中添加相应的依赖项。 对于Maven: ```xml <dependency> <groupId>com.google.firebase</groupId> <artifactId>firebase-admin</artifactId> <version>8.0.0</version> </dependency> ``` 对于Gradle: ```groovy implementation 'com.google.firebase:firebase-admin:8.0.0' ``` 4. 将生成的服务帐号密钥(JSON文件)放在Java项目的合适位置,并加载它。 ```java import com.google.auth.oauth2.GoogleCredentials; import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions; import java.io.FileInputStream; import java.io.IOException; public class FirebaseConnection { public static void main(String[] args) { try { FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json"); FirebaseOptions options = new FirebaseOptions.Builder() .setCredentials(GoogleCredentials.fromStream(serviceAccount)) .build(); FirebaseApp.initializeApp(options); System.out.println("Firebase connection established successfully!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 确保将 `"path/to/serviceAccountKey.json"` 替换为您服务帐号密钥的实际路径。 5. 连接到Firebase成功后,您可以使用Firebase Admin SDK提供的API进行各种操作,如数据库读写、身份验证等。 这只是一个简单的示例,可帮助您开始使用Java连接Firebase。您可以根据您的项目需求进一步探索Firebase的功能和API文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值