使用函數(shù)工作流 FunctionGraph開發(fā)準(zhǔn)備
在國內(nèi)使用ChatGPT有些不便,是否可以基于OpenAI開放的API做一個給自己或者同事們使用的聊天機器人,甚至集成到更多的場景。
說干就干,我們先從做一個自己的機器人開始,首先我們從OpenAI獲取用于鑒權(quán)的秘鑰。
然后寫一個請求OpenAI接口的代碼,并寫一個web服務(wù)接口開放出去,再搭配一個交互用的前端即可??雌饋硎?小時的工作量,但是如何部署這個服務(wù)呢? 購買一個云服務(wù)器再安裝環(huán)境或者配置容器也太麻煩了,于是我問了ChatGPT:建議我選擇華為云提供的函數(shù)工作流 FunctionGraph 這款Serverless函數(shù)計算與編排服務(wù)。
我們選選擇
對象存儲服務(wù)OBS:用于托管前端頁面。
FunctionGraph : 用于響應(yīng)前端請求,運行代碼向OpenAI發(fā)送問題。
API網(wǎng)關(guān): 對外開放調(diào)用函數(shù)的API
說明:“函數(shù)” 是指客戶部署在FunctionGraph上的代碼,它可以是一個或多個文件組成的程序,甚至編譯好的二進(jìn)制文件。 如Python 腳本文件,Java的jar 包。
函數(shù)工作流 FunctionGraph開發(fā)并部署聊天應(yīng)用
創(chuàng)建FunctionGraph函數(shù)處理用戶提問的請求
首先創(chuàng)建并開發(fā)FunctionGraph函數(shù),打開華為云FunctionGraph 產(chǎn)品頁面,由于只有一個簡單的問題查詢接口,這里我們選用事件函數(shù) 使用Python 3.9 運行時。
說明:事件函數(shù),可以由某類事件觸發(fā)函數(shù)運行,如用戶對該函數(shù)發(fā)送了HTTP請求,關(guān)聯(lián)到該函數(shù)的消息隊列里產(chǎn)生了新消息,都會自動觸發(fā)函數(shù)運行。
對于事件函數(shù),通常程序入口方法(這里是 handler)會有兩個參數(shù):
event 參數(shù):包含觸發(fā)用戶函數(shù)的事件的相關(guān)信息。HTTP請求也是一種事件,event里會包含請求的body header 等;
context 參數(shù):調(diào)用平臺的相關(guān)能力,如獲取在函數(shù)配置里設(shè)置的加密環(huán)境變量等。
從event 里取得請求的參數(shù) prompt。
在編輯好代碼后,只需要點擊部署按鈕即可完成部署。
創(chuàng)建APIG觸發(fā)器來開放接口
通常對于使用函數(shù)開發(fā)WEB 后端的場景,我們使用API 網(wǎng)關(guān)服務(wù),來將函數(shù)開放出去供前端訪問。為函數(shù)在API網(wǎng)關(guān)上注冊API非常簡單,只需要在函數(shù)頁面上創(chuàng)建APIG觸發(fā)器。
注意:這里將后端超時時間設(shè)定為一個較大的時間,如60s,因為OpenAi的接口響應(yīng)較慢。在北京4局點中,APIG服務(wù)有共享版,支持按需計費,若有較大的流量可以考慮購買APIG獨享實例。
APIG觸發(fā)器上的調(diào)用URL,可以直接用于向后端發(fā)送請求,該URL 為測試URL,每日僅可訪問1000次,可以點擊觸發(fā)器跳轉(zhuǎn)到APIG頁面綁定自己的域名。
托管前端頁面到OBS
我們準(zhǔn)備了一個簡單的前端,只需改下前端頁面配置的后端地址即可。創(chuàng)建一個OBS 桶,上傳前端文件。
配置OBS 桶靜態(tài)文件托管,將桶訪問權(quán)限設(shè)置為公共讀,并在靜態(tài)網(wǎng)站托管選項里配置默認(rèn)首頁,將自己的域名指向訪問地址。
通過訪問配置的域名訪問頁面,開始體驗!
后端服務(wù)增加接口鑒權(quán)
以上我們已經(jīng)基于FunctionGraph 函數(shù)創(chuàng)建了一個簡易聊天系統(tǒng)的后端的服務(wù),但是該接口沒有任何鑒權(quán),如果開放接口,所有用戶都可以訪問。
如果需要用戶登錄后才可以使用,如何做?一個思路是在原有業(yè)務(wù)代碼里增加鑒權(quán),這里我們也可以考慮使用APIG自定義鑒權(quán)即APIG組合FunctionGraph 鑒權(quán)的形式。
創(chuàng)建并配置APIG自定義鑒權(quán)函數(shù)
使用APIG 自定義鑒權(quán)有以下優(yōu)勢:
提升開發(fā)效率:鑒權(quán)與業(yè)務(wù)解耦,新增邏輯只需關(guān)注業(yè)務(wù),無需引入鑒權(quán);鑒權(quán)代碼集中而非分散在多個業(yè)務(wù)模塊,更新鑒權(quán)邏輯只需要更新鑒權(quán)模塊而非所有業(yè)務(wù)模塊;
降低成本:對于使用大規(guī)格函數(shù)進(jìn)行后端服務(wù)的代碼,無效請求可以直接由較小規(guī)格的鑒權(quán)函數(shù)攔截,降低大中規(guī)格資源服務(wù)的運行成本;
創(chuàng)建鑒權(quán)函數(shù)
和普通函數(shù)的創(chuàng)建流程一樣,只需要注意響應(yīng)的格式。
編輯接口,配置自定義鑒權(quán)
創(chuàng)建授權(quán)函數(shù)
基于以上自定義鑒權(quán)模式,開發(fā)者可以組合自己已有的鑒權(quán)邏輯放到自定義鑒權(quán)函數(shù)中。如果進(jìn)一步想基于FunctionGraph 創(chuàng)建一個 “登錄” 或token授權(quán)函數(shù),可以考慮以下方案。
我們首先需要創(chuàng)建一個函數(shù),該函數(shù)用于接收用戶登錄請求,然后去數(shù)據(jù)庫請求,判斷用戶合法則返回鑒權(quán)token。編輯對應(yīng)的API,選擇自定義鑒權(quán),選擇到我們創(chuàng)建的函數(shù)即可。
創(chuàng)建一個普通的事件函數(shù)即可,隨后可以為其創(chuàng)建APIG 觸發(fā)器。
注意,如果需要函數(shù)訪問VPC里的資源,如本例中的RDS,需要在函數(shù)頁面配置RDS所在的VPC。
“ChatGPT”的升級和運維
日志與監(jiān)控
使用函數(shù),系統(tǒng)會自動收集用戶打印在控制臺的日志,用戶無需處理日志落盤,收集或直接上報。對于每一條請求日志,F(xiàn)unctionGraph 還會顯示請求執(zhí)行耗時,使用內(nèi)存及請求狀態(tài)。
用戶可以基于關(guān)鍵詞,請求狀態(tài)進(jìn)行過濾和檢索。
同時,平臺自動收集函數(shù)運行指標(biāo),如調(diào)用次數(shù),運行時間,錯誤次數(shù),被拒絕次數(shù),并發(fā)數(shù)等。
版本迭代
在用戶更新函數(shù)代碼時,為保障“ChatGPT”業(yè)務(wù)穩(wěn)定運行,可以配置APIG觸發(fā)器的后端服務(wù)指向函數(shù)別名。
函數(shù)工作流 FunctionGraph教程視頻
函數(shù)工作流
03:15
函數(shù)工作流
02:10
函數(shù)工作流
03:10
函數(shù)工作流 FunctionGraph精選推薦
1對1咨詢專屬顧問
華為云咨詢電話:950808或4000-955-988 轉(zhuǎn)1
華為云咨詢電話:950808或4000-955-988 轉(zhuǎn)1