上一篇講了 Agent 的設計模式,這篇來講它怎麼壞掉的——以及怎麼修。
先講結論
Agent 最常出的兩個問題:
- 記憶爆滿:context window 塞滿了,Agent 開始胡言亂語或偷懶
- 行為失控:無限迴圈、幻覺工具、目標漂移
這兩個問題我在 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 有能力執行危險操作。你需要建立防線:
- 權限控制:限制 Agent 可用的工具(不是每個 Agent 都需要
rm -rf的權限) - 人工審核:高風險操作前要求確認(
git push --force、刪除資料庫) - 沙箱執行:程式碼在隔離環境跑
- 操作日誌:記錄所有行動,事後可審查
我的原則:給 Agent 最小必要的權限。 它需要讀檔案就只給讀的權限,不要因為方便就給它 root。
實務建議總結
選模式:
單次呼叫 → ReAct → Plan-and-Execute → Multi-Agent
↑
從這裡開始
管記憶:
定期清 session + MEMORY.md + 外部儲存
防失控:
max_iterations + 明確職責 + 自動驗證 + 權限控制
系列回顧
- AI Agent 設計模式:從 ReAct 到 Multi-Agent
- → 你在這裡:記憶管理與錯誤處理
Agent 管理就像帶實習生——你得寫清楚 SOP、定期 check-in、而且永遠不要假設它「應該知道」。