?概述
?客戶聯(lián)絡(luò)中心在現(xiàn)代是構(gòu)成一個完整企業(yè)的重要組成部分,作為企業(yè)與顧客的連接紐帶,在銷售、服務支持以及提升顧客滿意度方面發(fā)揮著至關(guān)重要的作用。使用亞馬遜云科技Amazon Connect出海企業(yè)可以快速搭建自己的全球客服聯(lián)絡(luò)中心。當前客服聯(lián)絡(luò)中心也面臨諸多的挑戰(zhàn),如長時間的電話等待、溝通困難、有用信息的缺乏、對客戶的回復缺乏標準難以統(tǒng)一,這些對客戶都可能會帶來不好的體驗。當連接建立后,客戶又需要重復地講述求助的原因、個人的身份、訂單信息等。通過對話機器人接收客戶問題、回答客戶問題,可以讓客戶不需要排隊等待。對于已識別的客戶,對話機器人有更多的相關(guān)信息,可以避免無效的問答,專注于更相關(guān)的信息。
?Amazon Lex是基于AI聊天機器人的框架,可以根據(jù)業(yè)務場景設(shè)置各種各樣的意圖(Intent)來預訓練機器人的基礎(chǔ)模型,然后借助自然語言理解(NLU)實現(xiàn)與客戶的對話。交付一個更快速更順暢的客戶體驗的同時也節(jié)省了人力成本。
?但隨著業(yè)務場景的增加,需要負責維護機器人的人員盡可能羅列出所有分支場景,并設(shè)計相應的意圖,同時還要保證最新的數(shù)據(jù)能夠及時更新到基礎(chǔ)模型中,這會帶來巨大的維護成本與挑戰(zhàn)。為了解決上述問題,需要引入檢索增強生成(Retrieval Augmented Generation,RAG)技術(shù),并結(jié)合生成式人工智能(GenAI)和大型語言模型(LLMs),將機器人的響應限制在公司的數(shù)據(jù)范圍內(nèi),為用戶提供更加專業(yè)精準的應答,并且無需花費大量的人力整理知識庫、預訓練機器人的基礎(chǔ)模型。通過接入知識庫豐富客戶對話內(nèi)容,提升對話體驗。
?本文將演示如何結(jié)合Amazon Connect、Amazon Lex、Amazon Kendra、Amazon Lambda和Amazon SageMaker,以及LangChain對大模型的調(diào)用,打造企業(yè)專屬的智能客服。
?架構(gòu)概述
- 使用Amazon Connect的核心組件——聯(lián)系流(Contact Flow),創(chuàng)建符合自身業(yè)務場景的IVR(Interactive Voice Response),并將獲取用戶輸入的模塊設(shè)置為Amazon Lex,實現(xiàn)用戶對話的語義理解。
- Amazon Connect將用戶的呼入語音或文字輸入傳入Amazon Lex,通過在Lex中設(shè)置Lambda函數(shù),將每一次用戶的對話內(nèi)容發(fā)送給Lambda函數(shù)做相應處理,最后將結(jié)果返回到Lex,實現(xiàn)人機對話。這里有個技巧是:無需人工為機器人創(chuàng)建大量的意圖用于預訓練,由于沒有預訓練模型去匹配用戶的問題,Lex會自動匹配系統(tǒng)默認的FallbackIntent并發(fā)送給Lambda。將核心問題語義理解部分從Lex轉(zhuǎn)移到了大語言模型,再由Lambda將大語言模型回復的內(nèi)容嵌入FallbackIntent中,完成一次對話閉環(huán),這樣就大大節(jié)省了設(shè)計和維護預訓練數(shù)據(jù)的人力成本。
- Lambda獲取用戶問題后,將用戶問題作為關(guān)鍵字,調(diào)用Amazon Kendra的知識庫索引,利用Kendra自身的向量比對與自然語言理解特性,查詢出匹配度高的結(jié)果集并返回給Lambda。Kendra支持多種文件格式和第三方平臺作為數(shù)據(jù)源,本文選擇網(wǎng)頁爬蟲作為數(shù)據(jù)源連接器,利用此連接器的定期爬取功能,實現(xiàn)知識庫的自動更新。Kendra在抓去數(shù)據(jù)和建立索引時,會根據(jù)自身在14個主要行業(yè)(計算機、工業(yè)、汽車、電信、人力資源、法律、健康、能源、旅游、醫(yī)療、傳媒、保險、制藥和新聞)領(lǐng)域中的知識,對數(shù)據(jù)做文本切割和Embedding,并借助自身的自然語言理解(NLU)特性,進一步提升查詢匹配的精準度。
- Lambda函數(shù)拿到Kendra返回的數(shù)據(jù)后,會作為上下文通過Langchain生成相應的提示詞(Prompt)并發(fā)送給大語言模型。提示詞大致的格式為:“請在以下內(nèi)容中回答
<用戶提問>”。由于Kendra對數(shù)據(jù)源提前做了Embedding,內(nèi)容更加精準,所以僅需截取排序前三的內(nèi)容作為上下文拼接在提示詞中,從而避免了大語言模型中Token數(shù)量限制問題,同時更加精簡的提示詞也能提升大模型的響應速率。
- 在SageMaker中部署大語言模型作為推理的終端節(jié)點。本文使用了清華大學開源的模型——ChatGLM-6B,對中文支持的表現(xiàn)較好,基于General Language Model(GLM)架構(gòu),具有62億參數(shù)。
- Lambda函數(shù)將大模型返回的信息通過Lex傳遞給Connect,Connect通過Amazon Polly進行語音回復,也可以通過Connect文字聊天API進行文字回復。
- 如果系統(tǒng)多次無法解答用戶問題,或者用戶明確說出轉(zhuǎn)人工的指令,系統(tǒng)會將用戶轉(zhuǎn)到Connect的人工座席進行詳細溝通。
??部署方案
?前提條件
- 確保擁有亞馬遜云科技賬號并能訪問控制臺。
- 確保登錄到亞馬遜云科技的用戶擁有操作Amazon Connect、Kendra、Lambda、SageMaker、Lex的權(quán)限。
- ?本文使用源代碼Github。
- 本文的操作將以Amazon us-west-2區(qū)域為例。
?在Amazon Kendra創(chuàng)建知識庫
?Step 1創(chuàng)建索引
- 進入Amazon Kendra控制臺。
- 點擊右上方的“Create an Index”創(chuàng)建索引。
- 輸入索引名稱,在IAM role部分,選擇“Create a new role”,在Role name中輸入角色名稱,然后點擊“Next”按鈕(請注意:系統(tǒng)會自動為名稱生成相應的前綴,此前綴不能更改或刪除,否則會造成異常)。
- 后續(xù)兩頁保持默認選項,最后點“Create”按鈕創(chuàng)建索引。整個創(chuàng)建過程大概需要5-10分鐘。
?Step 2創(chuàng)建數(shù)據(jù)源
- 在索引詳情頁中,點擊“Add data sources”創(chuàng)建數(shù)據(jù)源。
- Kendra支持多種數(shù)據(jù)源,這里選擇網(wǎng)頁爬蟲作為數(shù)據(jù)源,可以從指定的URL中定時爬取和更新相關(guān)內(nèi)容,適用于知識庫更新比較頻繁的場景。
- 輸入數(shù)據(jù)源名稱,Language部分可根據(jù)自身知識庫的語言選擇。因為本文使用中文知識庫,所以選擇“Chinese(zh)”,然后點擊“Next”。
- 輸入目標網(wǎng)頁的URL,最多可以輸入10個。如果需要訪問內(nèi)部網(wǎng)頁,則在“Web proxy”部分設(shè)置網(wǎng)頁的域名、端口號和訪問憑證。
- IAM role選擇”Create a new role”,并輸入角色名稱(請注意:系統(tǒng)會自動為名稱生成相應的前綴,此前綴不能更改或刪除,否則會造成異常)。
- 配置爬蟲爬取的范圍與深度。
- 設(shè)置定期同步網(wǎng)頁數(shù)據(jù)的周期,也可以設(shè)置手動同步(Run on demand)。然后點“Next”,最后一頁確認信息后點“Create”按鈕創(chuàng)建數(shù)據(jù)源。
- 數(shù)據(jù)源創(chuàng)建完成后,點右上角的“Sync now”開始爬取或同步指定網(wǎng)頁的數(shù)據(jù)。此過程根據(jù)爬取的范圍和深度,可能需要幾分鐘到幾個小時。此過程首先會對文檔進行爬取以確定要索引的文檔,然后再對選定的文檔建立索引。
- 等待數(shù)據(jù)源同步成功后,可以點擊右邊欄“Search indexed content”測試索引情況。
- 因為爬取的中文文檔,所以需要點擊右邊扳手圖標,將語言設(shè)置為“Chinese (zh)”并點”Save“,最后在頂部搜索輸入框中直接輸入問題查看返回結(jié)果。
?創(chuàng)建ChatGLM SageMaker Endpoint
- 進入Amazon SageMaker控制臺。
- 在左邊菜單點擊Notebook->Notebook instances,如果當前沒有實例可以復用,點擊Create notebook instance按鈕創(chuàng)建新的notebook instance。
- 輸入Notebook instance name,instance type選擇m5.xlarge,Platform identifier保持不變,IAM Role選擇Create a new role,其它保持默認設(shè)置,最后點擊Create notebook instance按鈕完成創(chuàng)建。
- 當實例狀態(tài)變?yōu)镮nService后,點擊Open JupyterLab,打開Jupyter工作臺
- 點擊上傳圖標,將Github上/llm/chatglm/chatglm_sagemaker_byos.ipynb上傳到工作臺。
- 點擊新建文件夾圖片,新建名為code的文件夾,將Github上/LLM/chatglm/code目錄下的兩個文件也上傳到工作臺。
- 雙擊ipynb打開筆記本,按照介紹順序執(zhí)行筆記本中的代碼。其中第二步是將ChatGLM部署到SageMaker的推理節(jié)點,耗時大概5分鐘左右,成功后可以運用筆記本中后面的步驟做相應的測試。請注意,如果執(zhí)行第二步時出現(xiàn)ResourceLimitExceeded錯誤,說明在該區(qū)域還沒有相應資源的配額,請到Service Quotas中輸入endpoint查看該區(qū)域哪些實例類型支持endpoint。如果Applied quota value為0,需要選中實例類型后,點Request quata increase按鈕申請。數(shù)量建議填1,否則可能會有申請失敗。
- 在左邊菜單中點擊Inference->Endpoints可以看到新創(chuàng)建Endpoint,狀態(tài)為InService說明正常運行。將Name復制下來,供后續(xù)配置Lambda環(huán)境變量使用。
?創(chuàng)建Lambda函數(shù)
- 進入Amazon Lambda控制臺。
?
- 首先為Lambda添加langchain的Lambda Layer。點擊左邊菜單欄的“Layer”,并點擊右上角“Create layer”按鈕。
- 名稱填寫langchain,文件選擇Github上/Lambda/lambda-layer/lazip。
- 點擊右上角“Create function”按鈕創(chuàng)建Lambda函數(shù)。
- 輸入函數(shù)名稱,Runtime選擇“Python 3.9”,Architecture選擇“x86_64”,Execution Role選擇“Create a new role with Lambda permissions”,然后點“Create function”按鈕。稍后再為這個角色添加操作Lex與SageMaker Endpoint的權(quán)限。
- 創(chuàng)建成功后,點擊“Upload from”按鈕,下拉菜單中選“.zip file”,然后選擇Github上,/Lambda/script.zip,點擊“Save”。
- 點擊Code這一欄,在Runtime settings部分點擊Edit按鈕,將Handler這里改為script.lambda_function.lambda_handler,這是因為上傳了名為script.zip文件,需要修改入口程序的目錄結(jié)構(gòu)。
- 點擊Code這一欄,在底部Layers部分點擊“Add a layer”按鈕添加LangChain Lambda Layer。
- 點擊Configuration欄,然后點擊右邊的“Edit”按鈕,修改函數(shù)運行的基本參數(shù)。
- 設(shè)置函數(shù)運行內(nèi)存為4096MB,Timeout設(shè)置為1分鐘,其它設(shè)置保持默認,點擊“Save”按鈕保存設(shè)置。
- 繼續(xù)點擊右邊“Environment variables”,點擊Edit按鈕設(shè)置兩個環(huán)境變量,Kendra索引ID與ChatGLM SageMaker endpoint名稱:
?Key=KENDRA_INDEX_ID,Value=在Kendra中的Index ID
?Key=CHATGLM_ENDPOINT,Value=部署ChatGLM模型的SageMaker endpoint名稱
- 轉(zhuǎn)到IAM控制臺,點擊右邊的“Roles”,在列表中點選這個Lambda函數(shù)所關(guān)聯(lián)的Role,點開Policy name下面的加號,然后點擊“Edit”按鈕。
- 將如下JSON代碼貼在現(xiàn)有代碼后面,為Lambda函數(shù)賦予操作Kendra與SageMaker的權(quán)限。請注意JSON格式。
?使用Amazon Lex創(chuàng)建智能對話機器人
- 進入Amazon Lex控制臺。
- 點擊右上角“Action”按鈕,在下拉菜單中選擇“Import”。
- 輸入機器人名稱,并選擇Github上/lex/chatgpt-bot-DRAFT-OEZEFSCJIQ-LexJson.zip文件,IAM Permission選擇“Create a role with basic Amazon Lex permissions”,COPPA部分選擇“No”,最后點擊“Import”按鈕導入機器人。
- 點擊導入成功后的機器人名稱,在左邊菜單中Aliases->TestBotAliases,并在Languages下點擊Mandarin(PRC),在Lambda Function選擇上面創(chuàng)建的Lambda函數(shù),點Save按鈕保存設(shè)置。
- 點擊左邊菜單欄Mandarin(PRC),再點擊右上角Build按鈕構(gòu)建機器人。
- 構(gòu)建成功后,點擊Test按鈕可以測試前面所有步驟是否配置成功。如報錯或返回“Intent FallbackIntent is fulfilled”,說明執(zhí)行Lambda時發(fā)生異常,可以到CloudWatch Log Group中查看Lambda日志,定位錯誤原因。測試成功的結(jié)果如下圖所示:
?最后使用Amazon Connect構(gòu)建客戶聯(lián)絡(luò)中心
- 進入Amazon Connect控制臺。
- 點擊Create instance按鈕創(chuàng)建Connect實例。Identity management保持默認,輸入英文字母組成的別名后,點Next。
- 為Connect管理控制臺創(chuàng)建超級管理員,輸入相關(guān)信息后點Next,后兩頁保持默認選項,最后點Create instance按鈕完成創(chuàng)建。
- Connect實例創(chuàng)建成功后,點擊左邊菜單中的Flows,在Amazon Lex部分,選擇同區(qū)域的Bot,然后點擊Add Amazon Lex Bot按鈕添加Bot。
- 點擊左邊菜單欄的Instances,點擊Access URL中的鏈接,使用Connect超級管理員的賬號密碼登錄。
- 成功登錄到Connect控制臺后,點擊“查看流”,然后點擊“創(chuàng)建聯(lián)系流”按鈕。
- 點擊右上角三角形按鈕,在下拉菜單中選擇“導入”,選擇Github中/Connect/LLM-Lex-InboundFlow文件導入聯(lián)系流。
- 雙擊“獲取用戶輸入”模塊,確認Amazon Lex選擇為前面步驟創(chuàng)建的Bot,最后點擊“發(fā)布”按鈕發(fā)布此聯(lián)系流。
- 回到控制面板,點擊“開始”按鈕創(chuàng)建一個電話號碼。
- 根據(jù)實際業(yè)務需要,選擇不同國家的電話號碼,如果國家不在列表中,需要開工單申請。本文以美國的免費電話為例。
- 創(chuàng)建成功后,點擊“查看電話號碼”,然后點擊該電話號碼,在“聯(lián)系流/IVR”中選擇先前創(chuàng)建的聯(lián)系流。
- 回到控制面板,點擊“測試聊天”,然后點擊“測試設(shè)置”,選中剛剛創(chuàng)建的聯(lián)系流,點擊應用按鈕。
- 如下圖所示:左邊部分是模擬用戶聊天界面,右邊是座席服務臺。當前用戶的會話會自動由Amazon Lex機器人接替,只有當客戶輸入“轉(zhuǎn)人工”字樣才會將會話轉(zhuǎn)到人工座席。
?測試結(jié)果
?此界面模擬用戶向座席發(fā)起文字聊天,由于在聯(lián)系流中設(shè)置了Lex機器人,所以客戶的問題將由Lex機器人結(jié)合內(nèi)部知識庫與大語言模型來回答。
?當用戶輸入“轉(zhuǎn)人工”字樣,系統(tǒng)會將用戶的對話轉(zhuǎn)入到人工座席。
?人工座席接受聊天請求后,就可以通過文字聊天與用戶。
?總結(jié)
?通過亞馬遜云科技Amazon Connect和Amazon LEX實現(xiàn)客服聯(lián)絡(luò)中心的自動客服機器人,借助Amazon Lambda調(diào)用Amazon Kendra+ChatGLM擴展了自動客服機器人的對話能力,使對話機器人在沒有預設(shè)的對話流的情況下,查詢知識庫回答客戶的問題,提升顧客體驗的同時減少了在顧客服務上的人力資源投入。在此框架下,可以繼續(xù)不斷完善自動機器人及大語言模型在回答問題方面的準確度。