上一篇講了 Agent 的設計模式,這篇來講它怎麼壞掉的——以及怎麼修。

先講結論

Agent 最常出的兩個問題:

  1. 記憶爆滿:context window 塞滿了,Agent 開始胡言亂語或偷懶
  2. 行為失控:無限迴圈、幻覺工具、目標漂移

這兩個問題我在 OpenClaw 都踩過,而且踩得很痛。


記憶管理:三層架構

Agent 的記憶分三層:

層級生命週期載體比喻
短期記憶單次對話Context window工作桌面上的紙
工作記憶單次任務檔案 / TODO筆記本
長期記憶跨對話MEMORY.md / DB日記本

Context Window 壓力

這是最常遇到的問題。Agent 每次呼叫工具,結果都會累積在 context 裡。一個複雜任務可能 30-50 次工具呼叫,context 就滿了。

我的 ClawdBot 有一次 session 累積到 166K tokens。結果?每次 heartbeat 它都只回 HEARTBEAT_OK 然後什麼事都不做。分析後發現:它的 context 已經塞滿了之前的工具呼叫結果,根本沒空間「思考」新任務了。

解法:

  • 定期清 session:我現在每天午夜自動重置 session(Windows Task Scheduler 跑 reset-session.ps1
  • 摘要壓縮:歷史對話壓縮成摘要,只保留關鍵資訊
  • 外部儲存:大量資料寫入檔案,context 裡只留路徑

跨對話遺忘

新對話 = Agent 完全失憶。它不記得上次做了什麼、改了什麼、踩了什麼坑。

解法:

  • MEMORY.md:自動記錄關鍵經驗(「Notion API 用 Node.js 呼叫,不要用 mcporter」)
  • Progress files:任務進度持久化
  • CLAUDE.md:專案層級的永久指引

我在 OpenClaw 的 memory 系統有 memory/ops/memory/content/memory/reports/ 三個分類。Agent 每次開新 session 都會先讀 MEMORY.md,就像人每天上班先看昨天的筆記一樣。


常見失敗模式

1. 無限迴圈

Agent 重複執行同樣的動作,每次都期待不同結果(這不就是瘋狂的定義嗎)。

症狀: API 帳單暴增,Agent 一直在跑同一個命令。

預防:

AgentExecutor(
    max_iterations=10,        # 最多 10 步
    max_execution_time=60,    # 最多 60 秒
)

我有一次忘了設 max_iterations,一個 Agent 跑了 50 多次 API call 試圖修一個根本不存在的 bug。那天的帳單我不想回憶。

2. 幻覺工具

Agent 「發明」一個不存在的工具然後嘗試呼叫它。

預防: 嚴格定義工具清單,不要讓 Agent 自由發揮。用 Function Calling 而不是讓 Agent 自己組 API 呼叫。

3. 目標漂移

Agent 做著做著就忘了原始任務,開始做一些無關的事。

真實案例: 我的 main agent 有一次收到 ops 的 heartbeat 結果(透過 postToMainMode: "summary"),然後開始自己執行 ops 的監控任務——完全不是它的工作。最後搞出 58 個 about:blank 分頁。

預防:

  • 在 system prompt 裡明確定義 Agent 的職責範圍
  • 隔離不同 Agent 的 workspace
  • 定期對照原始目標

4. 過度自信

Agent 說「已完成」但其實沒做完或做錯了。

真實案例: ClawdBot 說它在 Notion 建立了 8 個頁面,我去驗證發現 7 個是空的。說它建了跟真的建了是兩回事。

預防:

  • 永遠驗證 Agent 的宣稱(verification-before-completion
  • 建立自動化驗證步驟(跑測試、檢查檔案是否真的存在)

5. Shell 編碼問題

這個比較特殊但很常見——Agent 在 Windows Git Bash 裡跑 PowerShell 指令,CJK 字元會被搞砸。

解法: 明確規定 Agent 用 Node.js 做 API 呼叫和檔案寫入,只在必要時用 PowerShell(而且要寫成 .ps1 檔案再執行)。


安全邊界

Agent 有能力執行危險操作。你需要建立防線:

  1. 權限控制:限制 Agent 可用的工具(不是每個 Agent 都需要 rm -rf 的權限)
  2. 人工審核:高風險操作前要求確認(git push --force、刪除資料庫)
  3. 沙箱執行:程式碼在隔離環境跑
  4. 操作日誌:記錄所有行動,事後可審查

我的原則:給 Agent 最小必要的權限。 它需要讀檔案就只給讀的權限,不要因為方便就給它 root。


實務建議總結

選模式:
單次呼叫 → ReAct → Plan-and-Execute → Multi-Agent
   ↑
 從這裡開始

管記憶:
定期清 session + MEMORY.md + 外部儲存

防失控:
max_iterations + 明確職責 + 自動驗證 + 權限控制

系列回顧

  1. AI Agent 設計模式:從 ReAct 到 Multi-Agent
  2. → 你在這裡:記憶管理與錯誤處理

Agent 管理就像帶實習生——你得寫清楚 SOP、定期 check-in、而且永遠不要假設它「應該知道」。