前言
以前的客服對話機器人,可以讓用戶詢問 FAQ 的內容。
如果用戶有其他的服務,就需要判斷用戶的意圖,走那個意圖的流程。
例如,判斷到用戶輸入要退貨,走退貨的流程,
跑一個退貨的卡片出來,或是一個問題一個問題地讓用戶輸入我們所需要的資料。
所以客服對話機器人後端可能需要
1.FAQ 的問答集,2.取用戶意圖的服務,3.取得對話中的 Entity(地點、人名、金額…)
有了 OpenAI 及 Semantic Kernel 後,一切將變的非常容易,而且還很有彈性哦~
實作
以下以PChome 常見問題來測試,
1. 將常見問題存到 Memory,讓用戶來查詢
透過MemoryBuilder.WithPostgresMemoryStore
,將PChome 常見問題存到PostgreSQL
(ISemanticTextMemory.SaveReferenceAsync
)之中
1 | var memoryDeploymentName = "aoai的 embedding model,例如 ada002"; |
執行完成後。
可以發現PostgreSQL中會自動建立pchomefaq
這個 Table,並存放常見問題,
2. 建立 Plugin 來賦與 Chatbot 能力
我們需要 Chatbot 除了可以讓用戶查詢 FAQ 外(Ask
),還要可以處理退貨(ReturnGoods
)、退貨進度(CheckReturnReceiptProgress
)及退款進度(CheckRefundProgress
)等服務,所以以要傳入ISemanticTextMemory
,如下,
1 | public class PCHomePlugin(ISemanticTextMemory textMemory) |
3. 透過 Semantic Kernel 將 LLM, Plugin 及 Memory 整合起來服務用戶
1 | var memoryDeploymentName = "aoai的 embedding model,例如 ada002"; |
測試
1. 詢問常見問題
詢問我一定要成為會員,才能在PChome 24h購物中訂購商品嗎?
,會將會員相關內容透過LLM總結回覆,如下,
2. 申請退貨
輸入我要退貨
,LLM 會判斷要呼叫ReturnGoods
這個 Function,並詢問用戶取得需要的參數值。
當收到用戶輸入的參數值後,會透過Semantic Kernel
來呼叫ReturnGoods
,並帶入參數,如下,
最後將ReturnGoods
的結果,透過LLM總結回覆,如下,
3. 查詢收貨進度
輸入我有申請退貨的商品什麼時候要來收呢?
,LLM 會判斷要呼叫CheckReturnReceiptProgress
這個 Function,並詢問用戶取得需要的參數值。
當收到用戶輸入的參數值後,會透過Semantic Kernel
來呼叫CheckReturnReceiptProgress
,並帶入參數,最後將CheckReturnReceiptProgress
的結果,透過LLM總結回覆,如下,
總結
原本需要很多 AI 服務,並需要開發人員去寫出各種複雜的程式流程,
當透過Semantic Kernel來協調整合LLM、Memory及Plugins後,
一切變很容易很多。
當然,這其中還有許多要克服的事,例如,
1.使用 ChatGPT3.5 會有參數幻覺問題(hallucinate parameters),不會問用戶,會直接給參數值
2.LLM 總結回覆花費蠻多時間
3.查詢 FAQ 是否準確
…
但不可否認,這是一個美好的開始,讓寫 Chatbot 更容易、更有彈性。
參考資源
Semantic Kernel
Semantic Kernel | 如何建立智慧助理(Agent)
Semantic Kernel(SK) Orchestration for Healthcare Administrative operations
實體擷取預建模型
PChome 常見問題
Vector Embeddings, Dimensionality, and Retriever-Augmented Generation
一隻手只捉到一條魚: 勸人做事要專一,以免貪多嚼不爛,應作明確的抉擇。