博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 使用Streamlit和OpenAI搭建一個(gè)ChatGPT聊天機(jī)器人(附代碼)

使用Streamlit和OpenAI搭建一個(gè)ChatGPT聊天機(jī)器人(附代碼)

發(fā)布人:大數(shù)據(jù)文摘 時(shí)間:2023-02-18 來(lái)源:工程師 發(fā)布文章

大數(shù)據(jù)文摘授權(quán)轉(zhuǎn)載自法納斯特

作者:小F


ChatGPT是OpenAI開(kāi)發(fā)的一個(gè)大型預(yù)訓(xùn)練語(yǔ)言模型。它是GPT-3模型的變體,GPT-3經(jīng)過(guò)訓(xùn)練,可以在對(duì)話(huà)中生成類(lèi)似人類(lèi)的文本響應(yīng)。


ChatGPT旨在用作聊天機(jī)器人,我們可以對(duì)其進(jìn)行微調(diào),以完成各種任務(wù),如回答問(wèn)題、提供信息或參與對(duì)話(huà)。


與許多使用預(yù)定義的響應(yīng)或規(guī)則生成文本的聊天機(jī)器人不同,ChatGPT經(jīng)過(guò)了訓(xùn)練,可以根據(jù)接收到的輸入生成響應(yīng),從而生成更自然、更多樣化的響應(yīng)。


圖片


小F也是去注冊(cè)并且試用了一下,確實(shí)很酷!


圖片

圖片


ChatGPT可以聯(lián)系上下文,然后給出回答。


Streamlit則是一個(gè)搭建網(wǎng)頁(yè)的Python庫(kù),只需幾行代碼就可以創(chuàng)建一個(gè)交互式、可視化的儀表板。


簡(jiǎn)單直觀(guān),無(wú)需相關(guān)的Web開(kāi)發(fā)經(jīng)驗(yàn),即可輕松創(chuàng)建功能強(qiáng)大的Web頁(yè)面。


本期,小F就通過(guò)這兩來(lái)搭建一個(gè)聊天機(jī)器人~


注冊(cè)O(shè)penAI


首先需要注冊(cè)O(shè)penAI,這樣就可以使用ChatGPT,以及獲取api密鑰。


圖片


網(wǎng)上有很多注冊(cè)教程,附上鏈接,小F就不細(xì)說(shuō)了。


如果有問(wèn)題可以來(lái)咨詢(xún)小F,我都已經(jīng)實(shí)驗(yàn)過(guò)啦~


注冊(cè)教程:

https://sms-activate.org/cn/info/ChatGPT


接入微信


一并附上微信聊天機(jī)器人教程,需要安裝golang和docker環(huán)境,然后進(jìn)行部署。


圖片


先使用Dockerfile創(chuàng)建一個(gè)鏡像,在Dockerfile所在目錄終端下運(yùn)行如下命令。


其中鏡像名稱(chēng)是可以自定義修改的。

docker build -t xiaomoinfo/wechatgpt:latest .

Dockerfile內(nèi)容如下。

FROM golang:1.19-alpineENV api_key=""RUN export GOPRIVATE=github.com/houko/wechatgptWORKDIR /appCOPY . /appRUN go mod download && go build -o server main.goCMD ./server

Docker啟動(dòng)容器,可以設(shè)置關(guān)鍵字,比如「小F」這個(gè)詞。


圖片


經(jīng)過(guò)使用,發(fā)現(xiàn)通過(guò)接口獲取的回答和網(wǎng)頁(yè)上不一樣。


微信教程:

https://github.com/houko/wechatgpt


微信教程介紹完了,就來(lái)看看聊天機(jī)器人吧~


聊天機(jī)器人


安裝兩個(gè)要用到的Python庫(kù)。


# 安裝streamlit和openaipip install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlitpip install -i https://pypi.tuna.tsinghua.edu.cn/simple openai

其中openai庫(kù)在文檔上有一個(gè)簡(jiǎn)單的說(shuō)明。


圖片


文檔地址:

https://platform.openai.com/docs


引入Python庫(kù),通過(guò)Streamlit設(shè)置頁(yè)面信息。


import streamlit as stimport openai

# 設(shè)置標(biāo)題, 功能介紹st.title("和ChatGPT聊天")st.sidebar.header("功能介紹")st.sidebar.info(    '''這是一個(gè)web應(yīng)用程序,通過(guò)OpenAI的API和ChatGPT模型實(shí)現(xiàn)交互(聊天)功能。在文本框中輸入問(wèn)題,然后按Enter鍵查詢(xún),接收ChatGPT的回答''')


查看文檔后得知,text-davinci-003是我們所能用到最好的模型了。


圖片


密匙信息在個(gè)人設(shè)置中獲取,首次需要自己創(chuàng)建。


圖片


添加我們選擇的模型以及密匙信息。

# 設(shè)置模型和密匙model_engine = "text-davinci-003"openai.api_key = "你的密匙"

通過(guò)翻閱個(gè)人設(shè)置項(xiàng)信息,發(fā)現(xiàn)接口調(diào)用也是有限制的。


圖片

圖片


一共18刀的免費(fèi)額度,小F已經(jīng)使用了快1美刀了,還剩不少~


使用OpenAI API生成回答,相關(guān)參數(shù)可以自行看文檔。


def ChatGPT(user_query):    """    使用OpenAI API生成回答, 選擇模型, 設(shè)置參數(shù)    """    # 使用OpenAI API生成回答    completion = openai.Completion.create(        engine=model_engine,        prompt=user_query,        max_tokens=1024,        n=1,        temperature=0.5,    )    response = completion.choices[0].text    return response

主函數(shù),問(wèn)題輸入和回答輸出顯示。

















def main():    """    獲取用戶(hù)輸入, 提交給ChatGPT, 打印輸出    """    # 獲取問(wèn)題信息    user_query = st.text_input("在這里輸入問(wèn)題,回車(chē)查詢(xún)", "Python是什么?")    if user_query != ":q" or user_query != "":        # 將問(wèn)題提交給ChatGPT, 返回結(jié)果        response = ChatGPT(user_query)        return st.write(f"{response}")



# 主函數(shù)main()

最后就可以在終端運(yùn)行下面的代碼了。

streamlit run example.py

結(jié)果如下。


圖片


點(diǎn)擊本地地址,瀏覽器就會(huì)跳轉(zhuǎn)到新的頁(yè)面。


剛開(kāi)始應(yīng)該是這樣的,右上角處于RUNNING狀態(tài),表示正在查詢(xún)。


圖片


過(guò)一小會(huì)就會(huì)有結(jié)果返回。


圖片


問(wèn)一下「如何制作一個(gè)聊天機(jī)器人」。


圖片


發(fā)現(xiàn)ChatGPT真的很會(huì)做拆解,真的不錯(cuò)。


最后,從頁(yè)面上看,有點(diǎn)不像一個(gè)聊天機(jī)器人,感覺(jué)就是一問(wèn)一答而已。


其實(shí)只是沒(méi)把問(wèn)題一個(gè)一個(gè)顯示而已,機(jī)器人實(shí)際還是可以聯(lián)系上下文的。


只不過(guò)確實(shí)沒(méi)有網(wǎng)頁(yè)版的ChatGPT好使,看看后續(xù)會(huì)不會(huì)更新咯。


此外本期也只是調(diào)用API接口而已,至于如何真正的建立聊天機(jī)器人,就涉及到數(shù)據(jù)算法模型訓(xùn)練了,大家感興趣可以自行去學(xué)習(xí)~



*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉