ChatGPT是OpenAI團隊所開發的一個自然語言生成模型,其特點在於可以產生高度流暢且人工智慧程度高的文本內容,使得AI自然語言的應用有了爆炸性的發展,而OpenAI與Microsoft合作在 Azure 平台推出了Azure OpenAI服務,開發者可以使用OpenAI API將人工智慧應用到不同的場景中,例如Linebot,在這篇文章裡,將介紹有關ChatGPT與Azure OpenAI的差異,以及就 Azure OpenAI的功能服務與應用場景進行解說,並以Linebot實作Q&A問答,先借由Azure Cognitive for Language的Answer questions API,找出客戶問題的對應解答,接著把該解答交由OpenAI GPT-3.5 Turbo模型進行文字潤飾後,最終以一個客服人員的角色進行自動回覆。
擋不住的ChatGPT
ChatGPT(Chat Generative Pre-trained Transformer)是由 OpenAI 開發的大型語言模型,通過機器學習從大量的文本數據中進行學習和理解語言的用法和結構,進而生成自然流暢的語句,從而實現人機對話。目前大家廣為使用的ChatGPT網站界面(chat.openai.com/chat),就是基於GPT 3.5模型而開發出來的應用,而近日也熱騰騰的正式釋出背後使用的ChatGPT模型版本API,稱為gpt-3.5-turbo,相較於早先text-davinci-003模型,gpt-3.5-turbo更適用於對話聊天的情境。以下幾張圖可以明顯看到使用text-davinci-003模型與gpt-3.5-turbo模型,在相同對話中的回應明顯不同,簡單來說text-davinci-003模型應用於prompt的輸入,生成內容的輸出,而pt-3.5-turbo模型則專注交談的應用,prompt為多回合交談的設計。
OpenAI與Azure OpenAI 服務
一手打造爆紅的ChatGPT是OpenAI這間人工智能研究公司,旗下除了ChatGPT,還推出了多種具有影響力的 AI 技術例如生成圖像的 DALL·E 模型、語音轉文字的 Whisper、生成程式碼的 Codex 等技術。此外,OpenAI 還與 Microsoft Azure 平台合作,推出 Azure OpenAI 服務,該服務提供了 GPT-3 系列模型(包括最新的 GPT-3.5 Turbo 模型)、Codex 系列模型、Embeddings 系列模型和 DALL·E 系列模型,讓使用者在 Azure 平台上更加彈性地使用 OpenAI 技術,並提供更高的安全性和性能要求,也是市面上唯一提供企業等級的 OpenAI 服務。簡單來說Azure OpenAI與 OpenAI 公司所提供的API服務底層都是一樣的模型,差別在於高可用性、資安及擴展彈性上,Azure OpenAI是可以做的更好的。現階段若想在Azure平台上使用OpenAI是採審核制,申請由此去。
體驗Azure OpenAI服務 — Azure OpenAI Studio
一旦申請通過後,即可以在Azure平台建立OpenAI服務,建立的過程中與其它Azure服務大同小異,填寫訂用帳戶、資源群組等,目前可選擇的區域並不多,畢竟Azure OpenAI服務才剛開始推出,此外由於是AI服務,因此基於負責任的AI前題下,必須同意一些條款,建立完服務後,後續的操作會轉移到Azure OpenAI Studio平台上。
選擇GPT-3或ChatGPT遊戲場進入後,接著在"部署"功能中建立新部署,選擇要使用的模型(text-davinci-003、GPT-3.5 Turbo等),便可以建立一個模型部署,要注意的是現階段每一種模型只能部署一個,部署後才能將應用串接Azure OpenAI服務。
Azure OpenAI Studio平台針對你所建立的部署,提供Playground可以直接在可操作介面上進行測試。包含API的相關參數,都可以直接調整測試,這有助於最終我們決定要使用的參數值。
Azure OpenAI服務與Azure Cognitive 服務的差別
有在關注Microsoft在雲端AI服務的開發者,對Azure Cognitive 服務應該不陌生,Azure Cognitive 服務提供了相當多AI的API服務,可以快速整合在現有的應用裡,那麼現在又多了Azure OpenAI服務,而Azure OpenAI服務會取代Azure Cognitive 服務嗎?個人的觀點應該不是取代,比較像是不同的情境應用或是相互搭配的關係,Azure Cognitive 服務大部份是在特定情境的識別應用,例如:
- question answering應用於快速打造問答服務
- Summarize information應用於產生摘要
- Analyze sentiment and opinions應用於情緒判讀等
至於識別後要做出什麼樣的後續動作則還是依靠程式邏輯去處理。
而Azure OpenAI服務擅長依指示做出生成的後續動作,例如:
- 可以要求它扮演一位客服人員,以客服的角度進行對談內容的生成
- 要求它扮演一位行銷創作者,給與產品特點要求它產生行銷文案
使用GPT-3.5 Turbo模型API
那麼要如何把GPT-3.5 Turbo模型API結合在應用內呢?
在使用GPT-3.5 Turbo模型API時,建議先假定它的情境(system提示詞),會取得比較好結果,例如
<|im_start|>system
你是一位客服人員,我會給你準備要回答客戶的答案,請你進行內容文字的調整並產生專業的回答
<|im_end|>
接著後續的來回對話時會以user及assistant,2個角色來區分,user是輸入,而assistant則是輸出的結果,完整的prompt如下
<|im_start|>system
你是一位客服人員,我會給你準備要回答客戶的答案,請你進行內容文字的調整並產生專業的回答
<|im_end|>
<|im_start|>user
目前無提供漢神巨蛋至漢神百貨之間的接駁車服務。不便之處,敬請見諒!
<|im_end|>
<|im_start|>assistant
本公司目前未提供漢神巨蛋至漢神百貨之間的接駁車服務,造成您的不便,我們深感抱歉。如有其他需要協助的地方,歡迎隨時與我們聯繫,我們將盡力為您服務。再次感謝您對我們的支持和關注。
<|im_end|>
而程式中需要使用到的API端點則是可以在介面中"檢視程式碼"找到它,同時如果你有在介面中測試模型對話,連同API的Request JSON Model都可以看到,而API金鑰則須要回到Azure平台中取得。
接著實際示範運用情境,以LineChatbot提供Q&A問答,先借由Azure Cognitive for Language的Answer questions API,找出客戶問題的對應解答,接著把該解答交由GPT-3.5 Turbo模型進行文字潤飾後,最終以一個客服人員的角色進行自動回覆。
程式片段(有關Line Message API的部份,是以個人開發的SDK進行處理)
//客戶問題
var userMsg = lineReceMsg.Events[0].Message.Text;
//找出客戶問題的對應解答
var ansMsg = await AzureQuestionAnsweringServiceAsync(userMsg);
//交由PT-3.5 Turbo模型進行文字潤飾
var chatgptMsg = await AzureOpenAi(ansMsg);
//自動回覆
var txtMessage = new TextMessage(chatgptMsg);
await replyEvent.ReplyAsync(lineReceMsg.Events[0].ReplyToken,new List<IMessage>() {txtMessage});
需要注意prompt的組成,如同先前提到的,使用system指示情境,再以user進行對話,並以assistant做為結尾
<|im_start|>system
你是一位客服人員,我會給你準備要回答客戶的答案,請你進行內容文字的調整並產生專業的回答<|im_end|><|im_start|>user
目前無提供漢神巨蛋至漢神百貨之間的接駁車服務。不便之處,敬請見諒!<|im_end|><|im_start|>assistant
完整JSON參數
{
"prompt": "<|im_start|>system\n你是一位客服人員,我會給你準備要回答客戶的答案,請你進行內容文字的調整並產生專業的回答\n<|im_end|>\n<|im_start|>user\n目前無提供漢神巨蛋至漢神百貨之間的接駁車服務。不便之處,敬請見諒!\n<|im_end|>\n<|im_start|>assistant",
"temperature": 0.8,
"top_p": 0.95,
"frequency_penalty": 0,
"presence_penalty": 0,
"max_tokens": 1000,
"stop": [
"<|im_end|>"
]
}
實際結果,可以看到經過修飾後的內容,明顯較具備客服人員的回應語氣,左邊是經過Azure OpenAI ChatGPT修飾過的,而右邊則是Answer questions直接輸出的(原知識庫中的答案),如此一來即便文件內容寫的不是很好,或是死板板的內容,都能藉由ChatGPT產生較佳的內容,且不失去原有正確性的回答,另一方面也可以減少人員花太量時間著墨文字內容,僅需提供重點內容,剩餘的部份由ChatGPT來進行完善。
完整程式碼可至Github中詳閱。
最後要提醒的是,Azure OpenAI 與 OpenAI相同,有Token上限的限制,GPT-3.5 Turbo上限4096Token,並且Token數是輸入+輸出合計,因此在連續來回使用時,要注意是否達上限。
By No.18