Day 12 整理了 Memory Extraction,也就是從聊天中找出值得長期保存的資訊。
但把 Memory 存進資料庫之後,還有另一個問題:
當長者再次聊天時,系統要怎麼找到現在真正需要的記憶?
這就是 Memory Retrieval。
Memory Retrieval 的功能,就是:
根據目前的聊天內容,從過去的 Memory 中找出最相關的資訊。
例如系統已經記得:
如果長者今天說:
「最近比較少出去走走。」
系統應該優先找到:
平常喜歡早上散步
再把這筆資訊提供給 AI。
所以基本流程是:
目前訊息 → 搜尋相關 Memory → 提供給 AI → 產生回應
剛開始 Memory 很少時,也許可以全部放進 Prompt。
但使用時間越長,Memory 可能累積到幾十甚至幾百筆。
如果每一次聊天都全部丟給 AI,不只會讓 Prompt 越來越長,也會加入很多和目前對話完全無關的資訊。
所以真正需要的不是:
讓 AI 看見所有 Memory。
而是:
只找出目前最相關的幾筆。
最基本可以先利用 類型和關鍵字 搜尋。
例如現在正在聊散步,就優先找活動或生活習慣相關的 Memory。
但只靠關鍵字會有一個問題。
例如:
Memory:平常喜歡早上去公園散步
長者今天說:
最近都懶得出去走。
雖然兩句話沒有相同文字,但意思其實很接近。
所以之後可以進一步使用 語意搜尋,讓系統比較「意思是否相關」,而不只是文字是否相同。
搜尋 Memory 後,可能一次找到很多筆資料。
所以還需要根據:
進行排序。
最後只取出最相關的幾筆交給 AI。
加入 Retrieval 之後,聊天流程就會變成:
長者輸入訊息
→ 搜尋相關 Memory
→ 取得近期 Context
→ AI 產生回應
例如長者說:
最近比較少出去走。
系統找到:
平常喜歡早上去公園散步。
AI 就能延續過去的資訊,而不是把這件事情當成第一次聽到。
找到 Memory 之後,也不代表 AI 每次都要直接說:
「你之前有提過……」
Memory 更重要的作用,是提供 AI 背景資訊。
有些時候可以直接延續過去的話題,有些時候只需要讓 AI 知道背景,不一定要刻意說出來。
這樣聊天才會比較自然。
前一天的 Memory Extraction 負責:
從聊天中找出什麼值得記住。
今天的 Memory Retrieval 則負責:
在需要的時候,把相關記憶找回來。
所以整體可以整理成:
Message
→ Memory Extraction
→ Memory 儲存
→ Memory Retrieval
→ AI Response