cover

概念圖

ClawdBot 是跑在 OpenClaw 框架上的 Discord AI Bot,能接各家 LLM。聽起來很美好,但配置這東西讓我踩了不少坑。

先講結論

一個能動的 ClawdBot 只需要搞定三件事:選對模型、設好認證、別留殘留配置。如果你的 bot 莫名噴 429,八成是第三點出問題。

兩份配置,別搞混了

ClawdBot 和 OpenClaw 各有各的配置檔,改錯邊等於白改:

  • ~/.clawdbot/clawdbot.json — Discord Bot 專用
  • ~/.openclaw/openclaw.json — OpenClaw CLI/Gateway 用

我第一次踩坑就是改了 openclaw.json 然後納悶為什麼 Bot 行為沒變。別問我怎麼知道的。

配置的核心:模型 + 認證

整個 clawdbot.json 最關鍵的就兩塊。模型決定用誰的腦袋,認證決定怎麼連上去:

{
  "agents": {
    "defaults": {
      "model": {
        "primary": "openai-codex/gpt-5.2-codex"
      }
    }
  },
  "auth": {
    "profiles": {
      "openai-codex:default": {
        "provider": "openai-codex",
        "mode": "oauth"
      }
    }
  }
}

格式是 provider/model-id。常見的組合:

  • openai-codex/gpt-5.2-codex(oauth 認證)
  • openai/gpt-4o(api_key)
  • anthropic/claude-3-5-sonnet(api_key)
  • google/gemini-2.0-flash(api_key)

不確定目前跑哪個模型?直接在 Discord 問它:「你現在用什麼模型?」它會老實回答。

血淚教訓:Gemini 429 地獄

某天 ClawdBot 突然開始瘋狂噴錯:

Agent failed before reply: All models failed (3):
google/gemini-2.0-flash: LLM error: { "error": { "code": 429 } }

我明明設的是 OpenAI 模型啊?查了半天才發現 auth.profiles 裡殘留了一組 google:default,系統在主模型失敗時 fallback 到 Gemini,然後 Gemini 也被打爆了。

修法很簡單但很容易漏:

  1. 砍掉 auth.profiles 裡不用的 provider
  2. 確認 models.providers 是空的 {}
  3. 重啟 Gateway(改配置不重啟 = 沒改)
# 砍掉重來
taskkill /F /IM node.exe
cd ~/.clawdbot && pnpm openclaw gateway run

這件事教會我一個原則:只留一個模型 provider。多留一個就多一個出錯的機會。

Discord 頻道設定

{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "${DISCORD_BOT_TOKEN}",
      "dm": {
        "policy": "allowlist",
        "allowFrom": ["your-user-id"]
      }
    }
  }
}

Token 用環境變數 ${ENV_VAR} 格式,不要硬寫在 JSON 裡。allowlist 限制誰能私訊 Bot——除非你想讓全世界都能跟你的 Bot 聊天。

最小可用配置(直接抄)

如果你只是想讓它跑起來,這是我精簡過的完整配置:

{
  "env": { "shellEnv": { "enabled": true } },
  "auth": {
    "profiles": {
      "openai-codex:default": {
        "provider": "openai-codex",
        "mode": "oauth"
      }
    }
  },
  "models": { "providers": {} },
  "agents": {
    "defaults": {
      "model": { "primary": "openai-codex/gpt-5.2-codex" },
      "contextTokens": 8192,
      "timeoutSeconds": 300
    }
  },
  "channels": {
    "discord": {
      "enabled": true,
      "token": "${DISCORD_BOT_TOKEN}",
      "dm": { "policy": "allowlist", "allowFrom": ["your-user-id"] }
    }
  },
  "gateway": { "mode": "local" }
}

注意 models.providers 刻意留空——就是要防止 fallback 亂跳。

日常維護備忘

  • 改完配置一定要重啟 Gateway,不然就是在自嗨
  • Gateway 日誌在 \tmp\openclaw\openclaw-*.log,出事先看這裡
  • 如果同時跑 OpenClaw CLI 和 ClawdBot,兩邊的模型設定要一致,不然會精神分裂

配置檔就像保險——平常覺得煩,出事的時候才感恩當初多花了五分鐘整理。

延伸閱讀