iT邦幫忙

2026 iThome 鐵人賽

DAY 12
1
Build on Google AI

30 天用 Google ADK 打造你的「全自動 AI 虛擬團隊」系列 第 12

Day 12 | 狀態管理:讓 PM 記住上下文的記憶機制 (Memory)

  • 分享至 

  • xImage
  •  

大家好!歡迎來到「Build on Google AI」工程挑戰的第 12 天。

在昨天的實戰中,我們透過 Gemini 成功將格式破碎的髒數據轉化為結構化的 JSON。然而,如果我們的 PM Agent 每次對話結束後就把剛剛整理好的專案狀態忘得一乾二淨,它在真實專案中就只能處理單次問答,無法勝任長期的專案追蹤任務。

在「研發與工程創新 (AI for Engineering)」的系統設計中,上下文管理 (Context Management) 與 狀態持久化 (State & Memory) 是決定 AI 能否從玩具晉升為企業級系統的關鍵分水嶺。今天,我們將深入 Google ADK 的會話與記憶核心,讓 PM Agent 擁有連貫的長短期記憶!

https://ithelp.ithome.com.tw/upload/images/20260913/20121643KhRbjSPQYk.jpg

第一步:拆解 ADK 的記憶體系 (Sessions & State)
在 Google ADK 架構中,系統將上下文狀態切分為清晰的階層,避免了傳統把所有歷史對話硬塞進 Prompt 的效能與費用浪費:

  • Session (會話):代表單一使用者或任務的完整互動生命週期,提供獨立的隔離環境。

  • Events (事件流):依序記錄使用者輸入、模型思考過程、工具調用結果等不可變 (Immutable) 歷程。

  • State (狀態儲存):一個 Key-Value 結構的上下文資料區塊,代理人可以在對話過程中讀取或更新狀態(例如當前鎖定的專案 ID)。

  • Memory (長期記憶):跨越單一 Session 的資訊保留機制,負責檢索過往的重要決策或偏好。

第二步:實作具備狀態追蹤的 PM Agent
在 Python ADK 中,我們可以透過自定義工具或 Session Hook 直接讀寫 Session 的 state,讓 PM 在多輪對話中保持對特定專案的追蹤。

打開 agent.py,加入狀態記憶邏輯:

from google.adk.agents.llm_agent import Agent

# 1. 支援狀態更新的記憶工具
def update_project_context(project_id: str, priority_level: str, tool_context=None) -> dict:
    """
    更新當前對話關注的專案狀態至 Session State。
    
    Args:
        project_id: 專案識別碼,例如 'core-api-v2'。
        priority_level: 優先級別,如 'P0', 'P1'。
    """
    # 將關鍵變數寫入 session 狀態
    if tool_context and hasattr(tool_context, "state"):
        tool_context.state["active_project"] = project_id
        tool_context.state["priority"] = priority_level
    
    return {
        "status": "success",
        "message": f"專案 {project_id} 已設為當前關注焦點,優先級為 {priority_level}。"
    }

# 2. 定義具備記憶引導的 Instruction
pm_instruction = """
你是資深技術專案經理 (Technical PM)。
當使用者提及要切換或重點跟進某個專案時,請呼叫 'update_project_context' 記錄狀態。
在後續的交談中,若使用者未指定專案名稱,請優先沿用當前狀態 (active_project) 進行回答。
"""

root_agent = Agent(
    model='gemini-flash-latest',
    name='stateful_pm_agent',
    description="Maintains project context and manages workflows across turns.",
    instruction=pm_instruction,
    tools=[update_project_context],
)

第三步:多輪對話狀態驗證
當我們在本機或 Web 戰情室進行多輪對話時,PM Agent 的反應會呈現顯著的工程進化:
https://ithelp.ithome.com.tw/upload/images/20260913/20121643qA8qWs39Tv.png

第四步:無狀態 Cloud Run 與有狀態 Agent 的工程解耦
在 Day 05 中,我們將服務部署到了 Cloud Run。身為無伺服器 (Serverless) 容器,Cloud Run 本質上是無狀態的 (Stateless),隨時可能縮容至零或重啟。

為了實現「高可用性與可維護性」,生產環境中的 ADK 狀態管理應採取外置持久化架構:

  • 本機除錯:使用預設的 InMemorySessionService,速度最快、開箱即用。

  • 生產環境:替換為持久化後端(例如 Cloud Storage、Firestore 或 Redis)。當 Cloud Run 實例重啟或負載平衡將請求路由至不同容器時,ADK 能依據 session_id 從集中式儲存庫還原記憶,確保對話不中斷。

https://ithelp.ithome.com.tw/upload/images/20260913/20121643enAMEW7R5a.png

小結
今天我們打通了 ADK 的會話狀態與記憶機制,讓 PM Agent 徹底擺脫「金魚腦」,具備跨輪次維持專案焦點的能力。


上一篇
Day 11 | 髒數據清洗:利用 Gemini 處理非結構化情報
下一篇
Day 13 | 介面連動:將 PM 的趨勢報告呈現在 Web UI 戰情室
系列文
30 天用 Google ADK 打造你的「全自動 AI 虛擬團隊」20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言