• 欢迎访问情深深几许的博客网站,这里有免费网络资源信息,WordPress教程,Python、MySQL教程
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本网站吧

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

技术日志 luckzk 1年前 (2023-03-21) 381次浏览 0个评论

建立與設定 Firebase Realtime database

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

Python 教學 - ChatGPT 串接 Firebase,實現上下文歷史紀錄 - 建立 Firebase RealTime Database

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

Python 教學 - ChatGPT 串接 Firebase,實現上下文歷史紀錄 - 將讀取和寫入的規則都設為 true

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

<code class="language-py hljs python">pip install git+https://github.com/ozgur/python-firebase
</code>

ChatGPT 使用 text-davinci-003 模型

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

<code class="language-py hljs python"><span class="hljs-keyword">import</span> openai
openai.api_key = <span class="hljs-string">'你的 API Key'</span>

<span class="hljs-keyword">from</span> firebase <span class="hljs-keyword">import</span> firebase
url = <span class="hljs-string">'https://XXXXXXXXX.firebaseio.com'</span>
fdb = firebase.FirebaseApplication(url, <span class="hljs-literal">None</span>)    <span class="hljs-comment"># 初始化 Firebase Realtime database</span>
chatgpt = fdb.get(<span class="hljs-string">'/'</span>,<span class="hljs-string">'chatgpt'</span>)                 <span class="hljs-comment"># 取的 chatgpt 節點的資料</span>

<span class="hljs-keyword">if</span> chatgpt == <span class="hljs-literal">None</span>:
    messages = <span class="hljs-string">''</span>        <span class="hljs-comment"># 如果節點沒有資料,訊息內容設定為空</span>
<span class="hljs-keyword">else</span>:
    messages = chatgpt   <span class="hljs-comment"># 如果節點有資料,使用該資料作為歷史聊天記錄</span>

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

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

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

Python 教學 - ChatGPT 串接 Firebase,實現上下文歷史紀錄 - 使用 text-davinci-003 模型

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

Python 教學 - ChatGPT 串接 Firebase,實現上下文歷史紀錄 - 看到歷史紀錄的資料

ChatGPT 使用 gpt-3.5-turbo 模型

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

<code class="language-py hljs python"><span class="hljs-keyword">import</span> openai
openai.api_key = <span class="hljs-string">'你的 API Key'</span>

<span class="hljs-keyword">from</span> firebase <span class="hljs-keyword">import</span> firebase
url = <span class="hljs-string">'https://XXXXXXXXXXX.firebaseio.com'</span>
fdb = firebase.FirebaseApplication(url, <span class="hljs-literal">None</span>)   <span class="hljs-comment"># 初始化 Firebase Realtimr database</span>
chatgpt = fdb.get(<span class="hljs-string">'/'</span>,<span class="hljs-string">'chatgpt'</span>)                <span class="hljs-comment"># 讀取 chatgpt 節點中所有的資料</span>

<span class="hljs-keyword">if</span> chatgpt == <span class="hljs-literal">None</span>:
    messages = []        <span class="hljs-comment"># 如果沒有資料,預設訊息為空串列</span>
<span class="hljs-keyword">else</span>:
    messages = chatgpt   <span class="hljs-comment"># 如果有資料,訊息設定為該資料</span>

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

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

Python 教學 - ChatGPT 串接 Firebase,實現上下文歷史紀錄 - 使用 pt-3.5-turbo 模型

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

Python 教學 - ChatGPT 串接 Firebase,實現上下文歷史紀錄 - pt-3.5-turbo 看到歷史紀錄的資料

小結

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

 


情深几许 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ChatGPT 串接 Firebase,實現上下文歷史紀錄
喜欢 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址