在LINE Bot中使用MemoryCache保存Semantic Kernel的對談記憶
在開發 LINE Bot 的 AI Agent 或客服機器人時,最重要的功能之一就是 記憶 。 使用者永遠會預期機器人應該要能「記得上一句話」,並能依照上下文繼續對話。 在 Semantic Kernel 中,提供了 ChatHistory 物件來維護對話脈絡。這個物件會記錄 system / user / assistant 的訊息序列,當傳給大語言模型 (LLM) 時,就能讓模型在上下文中產生更自然的回覆。 但是,有一個問題: LINE Bot 的 Webhook API 是 Stateless 的 ,這意味著,每一次訊息事件進來,Controller 都是新的,不會自動幫你保存之前的 ChatHistory 。 因此,如果我們要讓 Semantic Kernel 記住對話,就需要額外設計一個「記憶儲存機制」。 短期記憶的解決方案:MemoryCache 方法有很多,但如果你的應用場景是: AI Agent / QA 客服 一次對話通常會在 半小時內結束 這時候就不需要複雜的資料庫,只要使用 .NET 內建的 MemoryCache 就能搞定。 MemoryCache 的特點 存放在伺服器記憶體中 可以設定 滑動到期時間 (SlidingExpiration) → 長時間沒互動就清掉 可以設定 絕對到期時間 (AbsoluteExpiration) → 即使一直互動,最多存活多久(避免高費用或token爆掉) 效能快。但也因為是存放在伺服器端記憶體中,應用程式重啟或多台伺服器作HA架構時,資料會消失,重新佈署應用程式時,也會消失。 還算是適合「短期記憶」的應用場景。 專案架構 底下示範如何在 LINE Bot WebAPI 專案中,整合該機制,我們建立了三隻程式: Controllers/LineBotChatGPTWebHookController.cs (處理 LINE Webhook) Controllers/ChatCompletion.cs (使用Semantic Kernel 生成 AI 對話) Controllers/ChatHistoryMemoryStore.cs (短期對談記憶保存) 完整程式碼我放在: https://github.com/isdaviddo...