用35行代碼開發(fā)一個(gè)自己的AI對(duì)話機(jī)器人

之前也寫了好幾篇關(guān)于ChatGPT的文章了,領(lǐng)略到了與深入優(yōu)化的GPT-3(Generative Pre-trained Transformer)對(duì)話過(guò)程中的各種驚喜。但是因?yàn)镃hatGPT的爆發(fā)性流量和訪問(wèn)限制問(wèn)題,平時(shí)使用的時(shí)候多多少少會(huì)不太方便。其實(shí)OpenAI本身就提供了大量的API接口,可以讓用戶免費(fèi)使用開發(fā)出自己的Web APP,包括我們今天要說(shuō)的對(duì)話機(jī)器人,關(guān)于API的一些應(yīng)用,我在之前一篇文章做過(guò)介紹,有興趣可以點(diǎn)開閱讀:
十分鐘學(xué)會(huì)開發(fā)自己的Python AI應(yīng)用【OpenAI API篇】

雖然目前OpenAI提供的的API沒法開發(fā)出像ChatGPT那樣就同一個(gè)話題持續(xù)對(duì)話的應(yīng)用(可以期待下即將發(fā)布的ChatGPT API,不過(guò)會(huì)收費(fèi)),但是基于一個(gè)知識(shí),一個(gè)文本編輯需求,如續(xù)寫,或者一個(gè)寫作大綱等等單一的文本需求,用目前的Open AI Text Completion類的API,配合Steamlit庫(kù),很簡(jiǎn)單地就可以開發(fā)一個(gè)對(duì)話的Web應(yīng)用。而且由于使用的是API方式進(jìn)行訪問(wèn),平時(shí)使用時(shí)對(duì)訪問(wèn)IP沒有任何限制,也不存在堵塞排隊(duì)現(xiàn)象。

老規(guī)矩,OpenAI網(wǎng)址:openai.com. 注冊(cè)登錄需要有谷歌訪問(wèn)能力,和海外手機(jī)號(hào)驗(yàn)證(教程很多,可以在平臺(tái)里直接搜索到)。

Streamlit

Streamlit 是一個(gè)開源框架,非常適合機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)。 開發(fā)人員用它創(chuàng)建用于數(shù)據(jù)可視化和數(shù)據(jù)分析的交互式應(yīng)用程序,而無(wú)需編寫大量的 HTML、CSS 或 JavaScript 代碼。 Streamlit 通過(guò) Python 構(gòu)建應(yīng)用程序,使數(shù)據(jù)科學(xué)家和軟件工程師可以輕松地使用已有的技能來(lái)創(chuàng)建用于數(shù)據(jù)探索和數(shù)據(jù)分析的交互Web。本文就用Streamlit來(lái)開發(fā)這個(gè)AI對(duì)話的Web頁(yè)面。

有兩種使用 Streamlit 的方法,一種是在他們自己的云平臺(tái)中,一種是在本地安裝在你自己電腦或服務(wù)器上。對(duì)于第一個(gè)選項(xiàng),你需要在Streamlit平臺(tái)上注冊(cè)賬號(hào),鏈接自己的GitHub,這里不多介紹了。這里主要介紹第二種方法,因?yàn)槭褂闷饋?lái)更自由。

OpenAI API

要使用API,你需要獲得OpenAI的API 密鑰。需要訪問(wèn)注冊(cè)一個(gè)OpenAI賬戶,具體方法,簡(jiǎn)書上有不少這里就不復(fù)述了。


我們今天要用的接口就在Text completion里面。

有了賬號(hào)我們就可以在自己賬號(hào)里找到API Key,如下圖。注意創(chuàng)建API Key時(shí)務(wù)必第一時(shí)間復(fù)制下來(lái),因?yàn)閯?chuàng)建完關(guān)閉對(duì)話框以后,就再也無(wú)法看到完整的Key。



有了API key,我們就可以創(chuàng)建一個(gè) Streamlit Python 腳本了。

創(chuàng)建Python腳本

首先,先把必要的庫(kù)給裝上:

$ pip install streamlit
$ pip install streamlit_chat
$ pip install openai
$ pip install python-detenv

具體的代碼實(shí)現(xiàn)是很容易的,首先導(dǎo)入所需的庫(kù),向openai.api_key 中剛剛復(fù)制出來(lái)的API Key。

import openai
import streamlit as st
from streamlit_chat import message
import os 
from dotenv import load_dotenv
openai.api_key = '你的API_KEY'
然后定義generate_response()函數(shù):
def generate_response(prompt):
    completion=openai.Completion.create(
        engine='text-davinci-003',
        prompt=prompt,
        max_tokens=1024,
        n=1,
        stop=None,
        temperature=0.6,
    )
    message=completion.choices[0].text
    return message

通過(guò)將用戶對(duì)話指令(Prompt)作為參數(shù)從 GPT-3 生成OpenAI的text completion模型響應(yīng)。我們這里還指定了模型 'text-davinci-003' ,當(dāng)然你還可以使用其他模型,不過(guò)Davinci的訓(xùn)練數(shù)據(jù)是目前比較新的。



也可以為Prompt設(shè)置字?jǐn)?shù)限制 (max_tokens)。

其中還有一個(gè)temperature變量非常相關(guān),因?yàn)樗鼘?shí)質(zhì)上定義了AI創(chuàng)造力的級(jí)別,它可以設(shè)置在 0 和 1 之間。0 產(chǎn)生穩(wěn)健的輸出,而 1 則具有高度創(chuàng)造力。

接下來(lái)的代碼,就是演示如何用streamlit,包括一個(gè)第三方的庫(kù)streamlit_chat,建立一個(gè)對(duì)話型的web界面,其中創(chuàng)建past(用戶在輸入框的輸入text)和generated(調(diào)用generate_response()后API回復(fù)的text)列表,用來(lái)保存和顯示歷史對(duì)話記錄,代碼很簡(jiǎn)單,一目了然:

st.title("也魚實(shí)驗(yàn)室的AI Chatbot")
#storing the chat
if 'generated' not in st.session_state:
    st.session_state['generated'] = []
if 'past' not in st.session_state:
    st.session_state['past'] = []
user_input=st.text_input("You:",key='input')
if user_input:
    output=generate_response(user_input)
    #store the output
    st.session_state['past'].append(user_input)
    st.session_state['generated'].append(output)
if st.session_state['generated']:
    for i in range(len(st.session_state['generated'])-1, -1, -1):
        message(st.session_state["generated"][i], key=str(i))
        message(st.session_state['past'][i], is_user=True, key=str(i) + '_user')

以上就是全部代碼,把它合并保存為demo.py,總共不到40行,接下來(lái)你只要在該文件目錄下用命令行輸入:

python -m streamlit run demo.py

就會(huì)看到以下打印,一個(gè)界面很光潔的網(wǎng)頁(yè)隨即會(huì)在本地打開:

You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8502
  Network URL: http://xxx.xxx.xxx.xxx(我的IP):8502

好了,試試與其對(duì)話吧,你可以跟他打招呼,獲取知識(shí),讓其提供寫作提綱,讓其續(xù)寫你的文章,或是為你總結(jié)一段文字。


在 ChatGPT API 發(fā)布之前,這可能是使用 GPT-3 模型的最簡(jiǎn)單方法。 最后需要提的是,關(guān)于使用Streamlit,我們必須知道,如果我們需要做一個(gè)交互性強(qiáng)及安全的大型應(yīng)用,那么還是要考慮使用Django這類Web框架進(jìn)行開發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容