將 RAG 系統從一個單次問答的機器,升級為一個能夠記住過往對話、理解上下文並提供個性化服務的企業級 AI 助理。核心在於管理對話記憶體,讓 RAG 不再「失憶」。
在現實的企業場景中,用戶的提問往往是連續的、有上下文依賴的:
單輪問答:
使用者:告訴我關於專案 X 的最新進度。
多輪對話:
使用者:告訴我關於專案 X 的最新進度。
AI 助理:專案 X 的開發階段已完成 80%,下週將進入測試。
使用者:那負責人是誰?
如果 AI 助理沒有記憶,它會將第二個問題理解為「負責人是誰?」,而不知道指的是「專案 X 的負責人」。這會導致對話中斷,用戶體驗大打折扣。
對話記憶體的設計需要兼顧效率與長期性,通常分為短期記憶與長期記憶。
短期記憶主要用於單次對話會話,儲存最近幾輪的對話內容,以維持上下文的連續性。
上下文傳遞 (Context-Passing):
摘要 (Summarization):
當對話超過一定長度後,使用 LLM 將歷史對話摘要成一個簡短的記憶。在後續對話中,只傳遞這個摘要和最新的幾輪對話。這能大幅節省 Token,但可能會遺失細節。
長期記憶用於儲存整個對話歷史或關鍵資訊,可以跨越多次對話會話。它主要依賴向量化和檢索來實現。
對話日誌嵌入:將每一輪或每一段對話都切塊(Chunk)並嵌入成向量,儲存在一個專門的向量記憶庫中。
檢索增強:當用戶提出新問題時,系統首先從這個向量記憶庫中檢索與當前問題最相關的歷史對話或關鍵事實。
合併上下文:將檢索到的歷史記憶、最新的幾輪對話以及從企業知識庫檢索到的資訊,合併成一個完整的上下文,再傳給 LLM 生成最終回答。
優點:
缺點:
實作複雜,需要額外的向量資料庫和檢索流程。
一個有溫度的 AI 助理不僅要記住對話內容,還要記住用戶的偏好和行為。
為每個用戶維護一個獨立的檔案,儲存其角色(如「行銷經理」)、部門、偏好資訊(如「偏好簡潔報告」)等元數據。
將用戶的檢索行為(如:使用者:檢索 2024 年 Q1 財務報告
)轉換為向量,儲存在向量記憶庫中。當用戶再次提問時,檢索這些行為向量,讓 AI 助理能預測其意圖。
個性化回答:
AI 助理:根據您作為「行銷經理」的角色,我為您整理了這份包含市場趨勢分析的報告摘要。
預測性建議:
使用者:告訴我新產品的最新進度。
AI 助理:好的。您之前經常關注財務數據,需要我同時為您檢索相關的預算報告嗎?
挑戰:長期記憶檢索可能不夠精確,導致「幻覺」(Hallucination)。
優化:對記憶進行分層儲存。將關鍵事實性資訊與閒聊分離,只在需要時檢索關鍵事實。
挑戰:用戶的對話內容是敏感資訊。
優化:對所有記憶體數據進行加密。實作嚴格的權限控制,確保只有用戶自己或經授權的人才能訪問其對話記憶。
挑戰:多輪對話會顯著增加 API 成本和響應延遲。
優化:聰明地組合記憶策略。對於短對話,只使用上下文傳遞。對於複雜、需要長期記憶的對話,才使用向量檢索。
記憶類型 | 儲存方式 | 檢索機制 | 適用場景 |
---|---|---|---|
即時記憶 | 應用記憶體 | 直接存取 | 當前對話會話 |
短期記憶 | 快取/Redis | Key-Value 檢索 | 最近幾小時/天的對話 |
長期記憶 | 向量資料庫 | 語義檢索 | 歷史對話與行為模式 |
用戶檔案 | 關聯式資料庫 | 結構化查詢 | 個人偏好與基本資訊 |
如何設計一個系統,可以在不將完整對話傳遞給 LLM 的情況下,讓它「知道」當前對話的上下文?
在 RAG 中實作長期記憶時,如何有效地將對話記憶與企業知識庫檢索結果無縫地融合,並在最終回答中保持邏輯一致性?
當用戶要求刪除特定對話記憶時(基於隱私考量),如何確保相關的向量嵌入也被徹底清除?
如何設計一個評估機制,來衡量記憶系統對對話品質的實際改善效果?