史丹佛 Smallville 虛擬小鎮 Part.3 Agent行爲設計

筆記第三部分對應「Generative Agents: Interactive Simulacra of Human Behavior」中的 GENERATIVE AGENT ARCHITECTURE,這部分仔細摘要了 Agent 行為架構的三個機制,包含 Memory Stream、Reflection 和 Plan。

從下圖可以看到整個架構的核心是 Memory Stream,用來詳盡記錄 Agent 的所有經歷。 Architecture source: figure 5 from https://arxiv.org/pdf/2304.03442

1. Memory and Retrieval

  • Memory Stream 裡的組成單位是 Memory Object,包含:
    1. 自然語言描述 (Natural language description)
    2. 創建時間戳記 (Creation timestamp)
    3. 最後存取時間戳記 (Most recent access timestamp)
    4. 類型: 最基本的元素是「觀察(Observation)」,包含代理人自己的行為或觀察到他人的行為。
  • 挑戰:所有記憶如果全部喂進去每次做計劃的 prompt,會超過 context window 限制,且也可能並不真的符合當前回答所需。
    • 舉例: 詢問 Isabella 最近投入什麼事物,如果全部喂進去會得到訊息量很低的回答,但是如果把話題限縮在活動舉辦相關的,他就會提到情人節派對
  • 解決方法:有 retrieval function,會根據 agent 現在的狀態來提取資訊相關的 memory stream,function 涉及三個元素:
    1. Recency:隨著時間指數型下降(指數衰減函數(Exponential decay function),衰減因子是 0.995。這代表隨時間流逝,記憶分數會掉得很快),越近期發生分數越高,模仿剛發生的事通常記憶鮮明的特性。
    2. Importance:直接問LLM取得得分數,越重要分數越高,模仿印象深刻的事。例如整理房間只有兩分,但是問暗戀的人出去有八分。
    3. Relevance:對記憶做query,並用 embedding vector計算 cosine similarity between the memory’s embedding vector and the query memory’s embedding vector。
    • 公式:\(score = \alpha_{recency} \cdot recency + \alpha_{importance} \cdot importance + \alpha_{relevance} \cdot relevance\)
    • 正規化(Normalization): 原文提到這三個分數在加總前,會先透過 Min-max scaling 縮放到 $[0, 1]$ 之間。
    • 權重分配: 在目前的實作中,所有的 $\alpha$(權重)都設為 $1$。
    • Memory Stream source: figure 6 from https://arxiv.org/pdf/2304.03442

2. Reflection

  • 挑戰: 原始觀察(Raw Observations)過於碎片化,導致 Agent 無法進行泛化(Generalization) 或推理深層關係。
    • 舉例: Klaus 只會選見面次數最多的鄰居去喝咖啡,而不知道選志趣相投的 Maria。
  • 觸發時機: 自上一次反思之後,所有新產生的記憶,其 Importance 分數的總和超過 150 時觸發(約每日 2-3 次)。
  • 四步驟流程:
    1. 提問: 根據最近 100 條記憶,讓 LLM 提出 3 個最核心的高階問題。
    2. 檢索: 以這些問題為 Query,從記憶庫(含舊反思)檢索相關資訊。
    3. 推論: 讓 LLM 從檢索結果提取 Insights,並要求引用 記憶編號作為證據。
    4. 儲存: 將這些抽象的 Insight 存回記憶庫。
  • 結構:Reflection Tree
    • 葉節點(Leaf): 底層的觀察(看書、喝咖啡)。
    • 非葉節點: 抽象思考(熱愛研究、與某人關係緊密)。越往上層越抽象。
    • Reflection Tree source: figure 7 from https://arxiv.org/pdf/2304.03442

      3.Planning and Reacting

  • 挑戰:Agent 可以根據事件反映,但難以從一而終做出符合人設的行為。
    • 舉例: 給LLM Klaus的背景以及現在的時間,並詢問他現在該做什麼?LLM會在十二點的時候安排他吃午餐,但是十二點半和一點又會各吃一次
  • 解決方法:Plan 描述了 Agent 未來的一系列行動,並有助於保持 Agent 行為的一致性。Plan 包含 location, a starting time, and a duration。

  • 與 reflection 類似,plan 也儲存在 memory stream 中,並在 retrieval 過程中被調用。這使得 Agent 在決定如何行動時,能夠同時考慮 Observation, Reflection, Plan。如有需要,Agent 可以在過程中更改其 Plan。

  • Planning 的生成過程:由上而下的遞歸分解 (Top-down Recursive Decomposition) 為了避免行為太過機械化(例如連續坐 4 小時不動),系統採用遞歸方式生成細節:
    1. 第一步(Broad Strokes): 根據 Agent 的特質與前一天的總結,生成當天的大綱(通常分為 5-8 個區塊)。
    2. 第二步(Decomposition): 將大綱細分。例如將「1:00 pm - 5:00 pm 寫作」分解為每小時的具體任務。
    3. 第三步(Fine-grained): 進一步細分為 5-15 分鐘的微動作(例如:4:00 pm 拿個零食、4:05 pm 散個步)。

3.1 Reacting and Updating Plans

  • 機制: Agent 運作於一個Action Loop中。
  • 決策邏輯: 每個時間點,Agent 會感知環境,並將 Observation 存入記憶。接著詢問 LLM:「基於目前的狀態與觀察,應該繼續執行原定 Plan,還是進行 React?」
  • 計畫更新: 如果決定要反應(例如:看到熟人、發現火災),系統會重新生成從當下時間點開始的 Plan。

    3.2 Dialogue

    Agent 之間的對話被視為一種特殊的「反應」。其生成依賴於以下資訊:Context Summary: 透過檢索針對「雙方關係」與「對方目前狀態」的記憶,生成一段背景摘要。

  • 對話生成:發起者: 根據自己的特質與目標,結合背景摘要,產生第一句話。
  • 接收者: 將對方的對話視為一個 Observation,檢索相關記憶,決定如何回應。
  • 持續性: 對話會參考 Dialogue History 持續進行,直到其中一方決定結束。

留言

Loading comments...