iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
生成式 AI

踏上 Agentic AI 探索之旅:我不再獨自升級!覺醒你的 AI 替身,打造智慧協作隊友系列 第 10

Day 10|有了記憶才懂成長:Memory 讓 LLM 不再重蹈覆轍

  • 分享至 

  • xImage
  •  

前言:從反思到記憶

昨天 (Day 9),我們看到 Reflection Pattern 如何讓 AI 事後檢討與修正。
AI 能反思「景點時間太長 → 超時」,並提出改進方案,讓行程成功在 18:00 前結束。

但是如果第二天我們再請 AI 排類似的行程,它是否還會重蹈覆轍?
光有 Reflection,AI 只能「當下修正」,但下次仍可能忘記之前的錯誤。

這時候,我們需要 Memory(記憶) —— 讓經驗能被保存,避免重蹈覆轍。


Memory(記憶)的核心概念

Memory 讓 AI 不只會臨時反思,還能「記住經驗」,未來遇到相似情境時自動套用。

核心概念:

  1. 存放 (Write) —— 把反思或使用者偏好記錄下來
  2. 調用 (Retrieve) —— 當再次遇到類似任務時,自動帶入相關記憶
  3. 應用 (Apply) —— 基於記憶直接調整輸出,避免重複錯誤

Memory 的核心循環
圖:Memory 的核心循環 —— Write → Retrieve → Apply → Result → Write

使用者的輸入或任務結果會被寫入 (Write),存放到記憶庫。下一次遇到相似任務時,會先檢索 (Retrieve) 相關資訊並應用 (Apply),讓輸出更貼近需求。結果再回饋到記憶中,形成持續成長的循環。

若再搭配昨天的 Reflection,AI 在輸出後會先檢討,再把檢討結論更新進記憶,讓循環更完整。

而在不同情境下,這些記憶可以以不同型態存在,常見的有以下三種:

記憶的種類

  1. 短期記憶(Short-term Memory) —— 記得上下文對話,會話結束即消失
  2. 長期記憶(Long-term Memory) —— 保存跨多次互動的經驗,形成「知識庫」
  3. 反思記憶(Reflection Memory) —— 將 AI 的檢討結果永久保存,下次直接調用

這三種記憶往往是同時存在並互相補充的:短期記憶處理上下文,長期記憶累積知識,而反思記憶則留存經驗教訓,三者結合才能讓 AI 真正展現『成長』的感覺。


Demo 1:避免重蹈覆轍(超時問題)

延續 Day 9 案例,我們刻意給了:

  • 美泉宮 (Schönbrunn Palace) 5 小時
  • 聖史蒂芬大教堂 (St. Stephen's Cathedral) 5 小時
  • 午餐 2 小時 + 交通各 30 分鐘

總長度高達 13.5 小時,導致行程要到 22:30 才能結束 → 超時失敗。

沒有 Memory → 每次都犯同樣的錯

[
  {"place": "美泉宮", "minutes": 300},
  {"place": "交通(美泉宮→餐廳)", "minutes": 30},
  {"place": "午餐", "minutes": 120},
  {"place": "交通(餐廳→聖史蒂芬大教堂)", "minutes": 30},
  {"place": "聖史蒂芬大教堂", "minutes": 300}
]

模擬結果:22:30 才結束 → 超時。


有了 Memory → 套用 Day 9 的反思記錄

昨天 Reflection 存下的記憶(延續 Day 9 檢討結論):

「美泉宮建議 4 小時、聖史蒂芬大教堂 1.75 小時,避免超時」

今天規劃時直接套用:

[
  {"place": "美泉宮", "minutes": 240},
  {"place": "交通(美泉宮→餐廳)", "minutes": 30},
  {"place": "午餐", "minutes": 90},
  {"place": "交通(餐廳→聖史蒂芬大教堂)", "minutes": 30},
  {"place": "聖史蒂芬大教堂", "minutes": 105}
]

輸出結果:17:45 結束 → 剛好在 18:00 前完成。


Demo 2:尊重使用者偏好(不吃牛肉)

旅行不只要考慮時間,還要顧及個人偏好。這裡我們示範 AI 如何透過 記憶 + LLM,記住使用者飲食習慣,並在推薦時自動套用。

Step 1:使用者輸入 → AI 寫入記憶

# ---- 記憶存放結構 ----
memory_store = {"diet": {}, "cuisine_pref": []}

def update_memory(user_input: str):
    if "不吃牛肉" in user_input:
        memory_store["diet"]["beef"] = False
    if "義大利" in user_input and "italian" not in memory_store["cuisine_pref"]:
        memory_store["cuisine_pref"].append("italian")

# 使用者輸入
user_input = "我不吃牛肉,喜歡義大利餐廳"
update_memory(user_input)

print("使用者記憶:", memory_store)

輸出:

{
  "diet": {"beef": false},
  "cuisine_pref": ["italian"]
}

Step 2:候選餐廳清單

candidates = [
    {"name": "市中心牛排館", "tags": ["beef", "steak"]},
    {"name": "市中心壽司店", "tags": ["japanese", "sushi"]},
    {"name": "市中心義大利餐廳", "tags": ["italian", "pasta"]}
]

Step 3:呼叫 LLM → 根據記憶篩選餐廳

import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")
llm = genai.GenerativeModel("gemini-2.0-flash")

prompt = f"""
使用者的飲食習慣:
{memory_store}

候選餐廳:
{candidates}

請依照使用者的飲食限制與偏好,選擇最合適的一間餐廳,
並只輸出餐廳的名稱。
"""

response = llm.generate_content(prompt)
print("AI 建議的餐廳:", response.text.strip())

輸出結果

使用者記憶: {'diet': {'beef': False}, 'cuisine_pref': ['italian']}
AI 建議的餐廳:市中心義大利餐廳

小結:Memory 的價值

在今天的示例中,我們看到了兩種情境:

  • 超時問題 → 記住昨天的反思,下次自動調整景點時間,避免再犯同樣錯誤。
  • 飲食偏好 → 記住使用者「不吃牛肉」的習慣,並結合 LLM 推理,自動避開不適合的餐廳。

這正好展現了 Memory 的核心價值:讓 AI 不只是「當下反思」,而是真正能把經驗保存下來。

對照來看:

  • Reflection → 幫助 AI 事後檢討與修正
  • Memory → 幫助 AI 記住經驗與偏好
  • Reflection + Memory → 讓 AI 不僅「知道自己錯了」,還能「下次不再犯」

有了這樣的能力,AI 就不再只是「短期助手」,而能逐漸成為「長期隊友」——會學習、會成長,越用越聰明。


白水公寓
圖:維也納百水公寓(Hundertwasserhaus)。這棟色彩斑斕、造型自由的建築,沒有一扇窗戶完全相同,每個細節都像被保存下來的片段記憶。綠樹從屋頂和牆面生長,讓舊有的空間與新的生命交織。就像 Memory 的作用:AI 把不同的經驗累積、保存,再在未來拼湊成更完整的理解與行動。(攝影:作者自攝)


上一篇
Day 9|做中學才能進化:Reflection 讓 LLM 從經驗中改進
系列文
踏上 Agentic AI 探索之旅:我不再獨自升級!覺醒你的 AI 替身,打造智慧協作隊友10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言