Try   HackMD

AI / ML領域相關學習筆記入口頁面

Deeplearning.ai GenAI/LLM系列課程筆記

GenAI
RAG
AI Agents

原理可參考這篇綜論: How Agents for LLM Perform Task Planning。大型語言模型的代理如何進行任務規劃


Long-Term Agentic Memory With LangGraph


補充: LangGraph 的 Memory管理機制設計

What are types of memory? 認知心理學中,人的三種記憶類型

image

Types of long term memory, Tulving (1944)

image
Types of Long-Term Memory

Memory
記憶
Explicit
顯性記憶
Implicit
隱性記憶
Episodic
情節記憶
Semantic
語意記憶
Skills
技能與動作
Priming
啟動效應
Classical
Conditioning
古典制約
Emotional
Conditioning
情緒反射

Procedural Memory(程序記憶):不需有意識回想,自動啟動的記憶,也稱為非陳述性記憶。

  • Skills(技能):例如騎腳踏車、打字,透過練習學會,自動執行的動作記憶。
  • Priming(啟動效應)
    • Priming 是一種潛意識記憶現象,指的是:「當你先接觸某個刺激後,會無意識地影響你對後續資訊的處理方式。」
    • 我們的大腦會在背景中建立「關聯網絡」,一個概念被啟動後,與之相關的其他概念也會被默默活化。
    • 這種活化過程可以讓人「更快反應」或「偏向某種判斷」,即使沒有意識地思考。
    • 例如:候選人藉由重複出現、口號訴求、視覺色彩、價值語言等方式,在潛意識中建立「值得信賴」、「關心人民」等形象。
  • Classical Conditioning(古典制約):例如聽到鈴聲就肚子餓,因為刺激與反應重複連結。
  • Other(其他):例如習慣形成或情緒反射,屬於其他非意識型記憶類型。
記憶類型 儲存內容 人類範例 AI Agent 範例
Semantic(語意) 事實
Facts
學校學到的知識 關於使用者的事實資料
Episodic(情節) 經驗
Experiences
自己做過的事 Agent 過去執行的動作序列(範例)
Procedural(隱性/程序) 指令/規格
Instructions/rules
本能、技能(如騎腳踏車
Instincts or motor skills
Agent 的系統提示詞或行為邏輯設定

這個分類方法 CoALA 論文中對參考認知心理學對人類記憶與 AI 記憶的對應研究。


在 LLM Agents (大型語言模型代理) 的架構中,這三種記憶類型有以下對應與功能:

  1. Semantic Memory (語意記憶)

    • 儲存內容:儲存的是「事實性知識」或「長期穩定的資訊」。
    • 在人類中的對應:像是在學校學到的知識。
    • 在 LLM 中的應用
      • 儲存有關使用者的背景資料、偏好、興趣等長期資訊。
      • 例如:「使用者的名字」、「最喜歡的顏色是藍色」或「使用者對科技新聞感興趣」。
      • 此類資訊通常不會頻繁更新,屬於較固定的背景知識。
  2. Episodic Memory (情節記憶)

    • 儲存內容:儲存模型與使用者的「互動記錄」及「過去行為」(Few-shot Example)。
    • 在人類中的對應:像是「我昨天去了超市」或「我在某年參加過某場演唱會」。
    • 在 LLM 中的應用
      • 儲存模型在過去對話中的行為、決策及回應。
      • 例如:「昨天你問了我關於Python的問題」、「上次我推薦了某本書」。
      • 此類記憶有助於模型理解對話上下文,提升連貫性。
  3. Procedural Memory (程序性/內在 記憶)

    • 儲存內容:儲存「如何完成某件事」的指令或技能(System Prompt)。
    • 在人類中的對應:像是「如何打網球」或「如何開車」。
    • 在 LLM 中的應用
      • 包括代理系統的「Prompt 模板」、「行動計畫」或「多步驟工作流」。
      • 例如:「先查找資料,再進行彙整,最後以條列式回答」。
      • Procedural memory 讓 LLM Agents 更具執行複雜任務的能力。

image

圖 1:大型語言模型(LLMs)的不同應用方式。
A:在自然語言處理(NLP)中,LLM 將文字作為輸入,並輸出文字。
B:語言代理人(Language Agents)(Ahn 等人, 2022;Huang 等人, 2022c)將 LLM 置於與外部環境的直接回饋迴圈中,透過將觀察轉換為文字,並使用 LLM 來選擇動作。
C:認知型語言代理人(Cognitive Language Agents)(Yao 等人, 2022b;Shinn 等人, 2023;Wang 等人, 2023a)進一步利用 LLM 透過學習與推理等過程來管理代理人的內部狀態。

image

圖 2 展示了認知架構(Cognitive Architectures)如何整合知覺輸入、長期記憶、決策程序與動作執行,以模擬類似人類的智能代理人系統。這裡分為兩個子圖:

🧠 A:Soar 認知架構的整體架構圖

此圖展示了 Soar 架構的核心組件與資訊流動方式,模擬人類認知過程:

模組 說明
Symbolic Long-Term Memories 長期記憶分為三種:
- Procedural(程序記憶):儲存行為規則(Productions)
- Semantic(語意記憶):儲存事實知識
- Episodic(情節記憶):儲存過去經驗或事件
Symbolic Working Memory 工作記憶,儲存當前感知、目標、中間推理結果,作為決策的依據
Decision Procedure 根據工作記憶的內容評估規則(Productions)是否符合條件,並選擇最適行動
Preference Memory 儲存對行動選項的偏好值,輔助決策程序
RL(Reinforcement Learning) 強化學習模組,用於調整規則的偏好值,根據行為結果學習
Chunking / Learning Modules 學習新知識並寫入記憶(semantic/episodic/procedural)
感知與動作模組 包括 Visual/Other Perception、Motor,實現與外部世界的互動

➡️ 所有感知輸入與行動命令皆經由「Embodiment」層與真實或模擬環境互動。

image

圖 4:語言代理人的認知架構(CoALA)
A:CoALA 定義了一組相互作用的模組與流程。決策程序(Decision Procedure)負責執行代理人的原始碼,這些原始碼包含與 LLM(提示模板與解析器)、內部記憶(檢索與學習),以及外部環境(對應與連結)的互動程序。
B:在時間流程上,代理人的決策程序與外部環境形成一個迴圈,每次循環中,代理人會透過記憶檢索與推理,進行規劃(包括提出與評估候選的學習或對應行動)。接著選擇並執行最合適的行動。執行後可能產生新的觀察,進而啟動下一輪循環。

  • A:模組化架構(CoALA 系統結構圖)

    區塊 說明
    Procedural Memory 程序性記憶包含兩部分:
    - LLM:語言模型能力(透過 prompt、parse 使用)
    - Agent Code:定義與記憶、環境互動的規則與邏輯
    Semantic Memory 儲存事實知識(e.g., 世界知識、規則)
    支援RetrievalLearning
    Episodic Memory 儲存經驗與歷史(e.g., 對話紀錄、任務經驗)
    支援RetrievalLearning
    Working Memory 儲存當前上下文,包括觀察、任務狀態、推理中間結果
    供 Decision Procedure 與 Memory 模組使用
    Decision Procedure 執行代理人的決策邏輯(類似程式碼主迴圈),整合各模組做出選擇
    Actions / Observations 代理人與外部世界的互動結果
    來源包括:
    - Dialogue(對話)
    - Physical(物理環境)
    - Digital(系統介面)

    ➡️ 每個記憶模組皆具備學習(Learning)與檢索(Retrieval)能力。


根據LangGraph官網的Guides Concepts/Memory的記憶管理機制概念,主要依照threads之間是否能共享資料進行區分

  • Short-term (within-thread) memory v.s. Long-term (cross-thread) memory

image

分類 Short-term memory(短期記憶) Long-term memory(長期記憶)
別名 Thread-scoped memory Cross-thread memory
存取範圍 僅限單一對話 thread 可跨 thread 共用
使用場景 目前對話中持續追蹤上下文 在多個對話中記住持久資訊
資料更新時機 當 graph 被啟動或步驟完成時更新 依照開發者儲存行為自行寫入
儲存方式 透過 Checkpointer 寫入 database 透過 Store 寫入特定的命名空間
資料結構 最近的 AI / Human 訊息序列 可自訂的多筆訊息記憶庫
回讀時機 每次步驟開始時讀取 任意時機可讀取
  • LangGraph官網的persistence機制

    image

    圖示元素 說明
    Graph 流程圖的起點與控制流,包含狀態(state)與節點(node)
    Node 每一個節點是一步操作,按順序或平行執行,構成 super-step
    Super-steps 節點的執行單元,一個 sequential node 為一個 super-step,平行節點共享
    Checkpoint 每次 super-step 執行後,將 state 和 metadata 儲存的快照
    StateSnapshot Checkpoint 的資料結構類型,封裝了 state、下一步節點、ID 等資訊
    Thread 多個 checkpoint 的集合,對應一次完整執行流程
  • 長期記憶使用的Memory Store 機制

    image


LangGraph官網對Long-term memory的介紹

🧠 長期記憶(Long-term Memory)

在 LangGraph 中,長期記憶 允許系統在不同的對話或會話之間保留資訊。與僅限於單一 thread 的短期記憶不同,長期記憶是透過自訂的「namespace(命名空間)」儲存的。

  • 🗃️ 記憶儲存方式

    LangGraph 會將長期記憶以 JSON 文件格式 儲存在記憶體儲存系統中(可參考官方文件)。每筆記憶都會被組織在:

    • 一個自訂的 命名空間(類似資料夾)
    • 一個獨立的 key(像是檔名)

    命名空間通常會包含使用者 ID、組織 ID,或其他方便分類的標籤。這種結構支援階層式管理,也支援跨命名空間的搜尋(可透過內容篩選)。

    • 以下是範例程式碼:
    ​​​​from langgraph.store.memory import InMemoryStore
    
    ​​​​# 自訂嵌入函式(實務上應替換成真實的 embedding)
    ​​​​def embed(texts: list[str]) -> list[list[float]]:
    ​​​​    return [[1.0, 2.0] * len(texts)]
    
    ​​​​# 建立記憶體儲存(開發用,正式環境建議接 DB)
    ​​​​store = InMemoryStore(index={"embed": embed, "dims": 2})
    
    ​​​​user_id = "my-user"
    ​​​​application_context = "chitchat"
    ​​​​namespace = (user_id, application_context)
    
    ​​​​# 儲存記憶
    ​​​​store.put(
    ​​​​    namespace,
    ​​​​    "a-memory",
    ​​​​    {
    ​​​​        "rules": [
    ​​​​            "User likes short, direct language",
    ​​​​            "User only speaks English & python",
    ​​​​        ],
    ​​​​        "my-key": "my-value",
    ​​​​    },
    ​​​​)
    
    ​​​​# 透過 ID 取得記憶
    ​​​​item = store.get(namespace, "a-memory")
    
    ​​​​# 透過 filter + 向量相似度搜尋記憶
    ​​​​items = store.search(
    ​​​​    namespace, filter={"my-key": "my-value"}, query="language preferences"
    ​​​​)
    
  • 🧭 長期記憶的設計思考框架

    長期記憶本身是一個複雜課題,沒有「一體適用」的方案。不過,你可以透過以下問題來建立思考架構:

    • 1️⃣ 記憶的類型是什麼?

      人類的記憶可分為:事實(facts)、經驗(experiences)、規則(rules)。
      AI agent 也可以以同樣方式使用記憶。例如 agent 可以記住使用者的偏好,以更有效完成任務。

    • 2️⃣ 什麼時候要更新記憶?

      • 即時更新:在主要應用邏輯中即時寫入(on the hot path),例如在回覆使用者前記住某些事。
      • 背景更新:作為背景程序異步執行,定期掃描資料並寫入記憶。

Introduction to Agent Memory。Agent 記憶機制介紹

記憶寫入/儲存機制 (Memory Storage Mechanisms)

image

記憶寫入策略比較

項目 In the hot path(熱路徑) In the background(背景處理)
記憶寫入時機 每次使用者訊息後立即更新記憶 定期或條件式地,在背景中批次更新記憶
優點 - 記憶即時更新
- 可立即應用於後續互動
- 使用者可被通知記憶更新
- 無延遲
- 應用邏輯與記憶管理分離
- 可以更專注地處理記憶任務
缺點 - 增加 agent 負擔與決策延遲
- 記憶過濾決策需另建工具
- 多工可能降低記憶品質
- 記憶延遲導致其他 thread 缺乏最新上下文
- 需妥善設計觸發頻率與機制
典型策略或工具 例如 ChatGPT 使用 save_memories 工具,每則訊息判斷是否上傳記憶 常用策略:
- 固定時間後更新
- cron 任務
- 手動/邏輯觸發
應用示意圖 使用者訊息 → 更新記憶 → 回覆 使用者訊息 → 回覆 →(延遲 30 分鐘後)記憶更新

以Email Assistant為例 with Semantic Memory

  • Al assistants often need context, personalization, ability to
    adapt to your feedback

image

  • Maintain context over time, adapt to our preferences, learn from past interactions
  1. Inbox (收件匣)
    ➔ 所有郵件進入收件匣等待處理。
  2. Triage (分流)
    ➔ 使用 Episodic Memory 判斷哪些郵件需優先處理。
  3. LLM (大型語言模型)
    ➔ 根據郵件內容決定是否需安排會議 (Calendar Tool)、撰寫回應 (Writing Tool) 或更新記憶 (Memory Tool)。
  4. Agent (代理)
    ➔ 協調多個工具並根據使用者偏好最佳化回應行為。

Episodic Memory (情節記憶)
Semantic Memory (語意記憶)
Procedural Memory (程序性記憶)

Semantic Memory(語意記憶)

image

Semantic Memory 在此系統中分為兩個核心部分:

  1. Semantic Memory Profile (語意記憶檔案)
    • 會議偏好 (Meeting preferences)
    • 回應優先順序 (Response priorities)
    • VIP 聯絡人 (VIP contacts)
  2. Semantic Memory Collection (語意記憶資料庫)
    • 事實性資訊 (Facts)
    • 過去互動記錄 (Past interactions)

Semantic Memory(語意記憶)+ Episodic Memory(情節記憶)

image

  • 定義: 儲存「過去事件」的記憶,幫助系統理解並根據以往經驗做出判斷。
  • 在圖中的角色:
    • 應用於 Triage (分流) 階段,使用「Few-shot examples」快速判斷郵件的重要性。
  • 成功範例 (Success examples):
    • ✅ 緊急客戶請求
    • ✅ 來自 VIP 的會議邀請
  • 失敗範例 (Failure examples):
    • ❌ 垃圾郵件 (Spam)
    • ❌ 電子報 (Newsletters)
    • ❌ 低優先度通知 (Low-priority updates)
  • 🔎 功能
    • 快速判斷郵件的優先級,減少處理不必要郵件的時間。
    • 模型根據「過去經驗」自動標記郵件並過濾垃圾信。

Semantic(語意記憶)+ Episodic(情節記憶) + Procedural Memory(程序性記憶)

  • image

  • 定義: 儲存「如何執行某項任務」的知識,類似於機器人學習的技能或操作規則。

  • 在圖中的角色:

    • System Prompts (系統提示) 應用於:
      • Calendar Tool (行事曆工具)
        • 📆 會議時長 (Meeting duration)
        • 緩衝時間設置 (Buffer times)
      • Writing Tool (撰寫工具)
        • ✍️ 郵件風格與語氣偏好 (Writing style and tone preferences)
        • 🔁 回應模式 (Response patterns)
  • 🔎 功能

    • 讓系統自動執行多步驟任務並根據不同情境調整。
    • 例如,系統可根據用戶的指示選擇「正式」、「非正式」、「簡潔」等回應風格。