A laptop computer sitting on top of a wooden desk

OpenClaw 預設配置跑一段時間會遇到兩個問題:額度消耗太快、長會話超時崩潰。這篇文章記錄我實際調優的 8 個引數,以及背後的原因。

先說清楚架構

我用的組合:

  • GitHub Copilot Pro+:月付 $19,提供 1500 次/月的 premium request 額度
  • Claude Opus 4.6:透過 Copilot 的模型路由訪問,模型 ID github-copilot/claude-opus-4.6
  • OpenClaw:負責 Telegram 互動、Skill 呼叫、定時任務

額度計算邏輯:每次 AI 助手回覆 = 1 次 premium request(包括 tool call 後的回覆)。1500 次聽起來很多,但沒最佳化的話很快就不夠用。

8 項標準最佳化

1. 模型只保留 Copilot,清空 fallbacks

問題:預設配置有多個 model provider 做 fallback,一旦主模型超時,會依次嘗試所有 fallback,每次嘗試都消耗額度。

最佳化:

{
  "agents": {
    "defaults": {
      "model": {
        "primary": "github-copilot/claude-opus-4.6",
        "fallbacks": []
      }
    }
  }
}

fallbacks 清空後,失敗直接報錯,不會觸發 2-3 次無效重試。每月節省約 50 次。


2. 超時從 600s 降到 300s

問題:預設 600 秒超時意味著一次卡住的請求要等 10 分鐘才報錯,這段時間後續訊息全部積壓。

最佳化:

{
  "agents": {
    "defaults": {
      "timeoutSeconds": 300
    }
  }
}

300 秒對於正常任務綽綽有餘,能更快發現異常,減少因超時引發的重試鏈。


3. Session Compaction:safeguard 模式

問題:長時間運維會話(比如除錯一個伺服器問題來回 SSH 幾十次),上下文會膨脹到 API 拒絕接受,然後觸發重試。

最佳化:

{
  "compaction": {
    "mode": "safeguard",
    "reserveTokensFloor": 120000
  }
}

safeguard 模式:當上下文接近模型 context 上限時,自動壓縮歷史,保留關鍵內容,防止因 context 過長導致的 API 報錯。reserveTokensFloor 是保留的輸出 token 緩衝。


4. Context Pruning:30 分鐘 TTL

這是效果最顯著的最佳化。

問題:tool call 的輸出(SSH 命令結果、檔案內容、API 響應)通常很長,但 30 分鐘後基本沒有參考價值,卻還佔著 context 的大量空間。

最佳化:

{
  "contextPruning": {
    "mode": "cache-ttl",
    "ttl": "30m",
    "keepLastAssistants": 5,
    "minPrunableToolChars": 30000,
    "softTrim": {
      "maxChars": 3000,
      "headChars": 1000,
      "tailChars": 1000
    },
    "hardClear": {
      "enabled": true,
      "placeholder": "[舊工具輸出已清理]"
    }
  }
}

關鍵引數說明:

  • ttl: "30m":30 分鐘前的 tool 輸出自動進入裁剪候選
  • keepLastAssistants: 5:保留最近 5 條 AI 回覆(保持對話連貫性)
  • minPrunableToolChars: 30000:只有超過 3 萬字元的 tool 輸出才裁剪(避免誤裁)
  • softTrim:保留頭尾各 1000 字元,中間摺疊為佔位符
  • hardClear:超限時完全清空替換為佔位文字

實際效果:context 大小減少 50%+,長會話穩定性大幅提升。


5. 關閉 Discord

問題:Discord WebSocket 連線不穩定,頻繁斷連會觸發 gateway 異常,進而導致一連串錯誤重試,消耗額度。

{
  "channels": {
    "discord": {
      "enabled": false
    }
  }
}

我的使用場景只用 Telegram,Discord 直接關掉。每月節省約 100 次。


6. 關閉 Heartbeat

問題:Heartbeat 是 OpenClaw 的存活檢測機制,預設每 30 分鐘發一次 ping,每次 ping = 1 次 API 呼叫。

{
  "agents": {
    "defaults": {
      "heartbeat": {
        "every": ""
      }
    }
  }
}

關掉後每天節省 48 次呼叫,每月 節省約 1440 次。這是最大的單項節省。


7. 清理無用 Model Providers

問題:配置了多個 model provider(openrouter、各種 API 代理),gateway 啟動時會對所有 provider 做後臺健康檢查,每次檢查消耗額度。

{
  "models": {
    "providers": {}
  }
}

只保留 github-copilot,其他全刪。每月節省 20-50 次。


8. 關閉 Exec 審批(新版 4.5+)

問題:新版 OpenClaw 預設開啟 elevated 許可權審批,AI 執行 shell 命令時需要使用者確認,會卡住自動化工作流。

在 openclaw.json 的 exec 配置裡:

{
  "exec": {
    "requireApproval": false
  }
}

適合信任你的運維場景,不適合多人共享或不確定任務的場景。


一鍵應用指令碼

以上 8 項可以用這段 Python 指令碼批次寫入:

import json, os

path = os.path.expanduser("~/.openclaw/openclaw.json")
with open(path) as f:
    c = json.load(f)

d = c.setdefault("agents", {}).setdefault("defaults", {})

# 1. 模型 + 清空 fallbacks
d["model"] = {"primary": "github-copilot/claude-opus-4.6", "fallbacks": []}

# 2. 超時 300s
d["timeoutSeconds"] = 300

# 3. Session Compaction
d["compaction"] = {
    "mode": "safeguard",
    "reserveTokensFloor": 120000
}

# 4. Context Pruning
d["contextPruning"] = {
    "mode": "cache-ttl",
    "ttl": "30m",
    "keepLastAssistants": 5,
    "minPrunableToolChars": 30000,
    "softTrim": {"maxChars": 3000, "headChars": 1000, "tailChars": 1000},
    "hardClear": {"enabled": True, "placeholder": "[舊工具輸出已清理]"}
}

# 6. 關閉 Heartbeat
d["heartbeat"] = {"every": ""}

# 5. 關閉 Discord
c.setdefault("channels", {}).setdefault("discord", {})["enabled"] = False

# 7. 清理 providers
c.setdefault("models", {})["providers"] = {}

with open(path, "w") as f:
    json.dump(c, f, indent=2, ensure_ascii=False)

print("配置已更新,重啟 openclaw gateway 生效")

執行後重啟 gateway:

openclaw gateway restart

版本相容性注意

部分引數只在新版(4.5+)支援,舊版寫入會導致 gateway 啟動失敗:

引數舊版 ≤3.28新版 4.5+
compaction.notifyUser❌ 不支援✅
compaction.memoryFlush❌ 不支援✅
auth.cooldowns❌ 不支援✅
discord 配置鍵名allowenabled

如果 gateway 重啟失敗,先用 openclaw gateway logs 看具體報錯,通常是某個不支援的欄位導致的。


最佳化後的月度用量

最佳化前:Heartbeat + Discord + fallbacks + context 膨脹,單日可能消耗 150+ 次。

最佳化後(1500 次/月分配):

用途日均月估算
日常運維對話30-50 次600-800 次
量化策略巡檢0(直接 cron,不走 AI)0
定時天氣/報告2 次60 次
合計~660-860 次

1500 次的額度留有充足餘量,即便某天密集運維消耗 200 次,月末也不會超限。


有 OpenClaw 配置問題或者額度不夠用的情況,歡迎來 Telegram 聊。

延伸閱讀:


📷 封面圖 · Flux Schnell AI 生成 · panshi.io 品牌風格