cover

先講結論

一個能 24/7 跑的 AI Bot 需要四樣東西:

1. LLM Gateway  → AI 的大腦(接到哪家模型)
2. System Prompt → AI 的人設(行為規範)
3. Context 管理  → AI 的記憶(session 怎麼處理)
4. Tool Access   → AI 的手腳(能操作什麼)

如果你只搞前兩樣,那你做的其實就是一個最簡版的 ChatGPT。搞齊四樣,你才有一個真正能自動做事的助理。

這篇接續 [[ai/07-ai-tools-ecosystem|[ai/07] Skills 和 MCP]] 的 Layer 3,教你怎麼把 Bot 架起來。


Bot 跟 ChatGPT 到底差在哪?

ChatGPT 網頁自建 Bot
啟動方式你打開瀏覽器持續運行,等待觸發
對話載體網頁Discord / Slack / API
工具存取有限的 plugin完整(file system、MCP、browser)
Session平台幫你管你自己管(這是最痛的部分)
成本月費 $20按 token 算(可能更便宜也可能更貴)

核心價值就一句話:你不在的時候它也能工作。它監聽 Discord、定時跑任務、主動回報進度。你是老闆,不是客服。


第一塊:LLM Gateway

Bot 需要一個 LLM 來「思考」,你有兩種接法:

  • 直接打 API:OpenAI、Anthropic、Google 各家的 API
  • 透過 Gateway:一個中間層幫你管 API key、做流量控制、提供 fallback
Bot → Gateway (:18789) → OpenAI / Anthropic / Google

Gateway 的好處是你可以隨時切換模型而不用改 Bot 的程式碼。今天用 GPT-4,明天想換 Claude,改 Gateway 設定就好。

壞處是 Gateway 本身也會掛,然後你就要 debug 兩層東西。


第二塊:System Prompt 設計

ChatGPT 的 Custom Instructions 大概讓你寫 200 字。Bot 的 system prompt 是另一個層級——它要處理的邊界情況多很多:

1. 角色定義:你是誰、能力範圍
2. 行為規範:該做什麼、不該做什麼
3. 輸出格式:回應風格和結構
4. 環境資訊:OS、可用工具、檔案路徑
5. Context 管理規則:什麼時候該清 session

這不是寫一段「你是一個有幫助的助手」就結束的事。你得想清楚 AI 遇到異常情況時該怎麼反應——收到看不懂的指令?工具呼叫失敗?Context 快爆了?

你寫 system prompt 的功力,直接決定這個 Bot 是有用的助理還是失控的麻煩製造機。


第三塊:Context 管理(最容易踩坑的地方)

這是自建 Bot 裡面最噁心的部分,沒有之一。

每個 LLM 都有 context window 上限。對話越來越長、工具回傳越來越多,context 就越來越肥。然後某一刻——boom,context_length_exceeded

你需要策略:

{
  "contextTokens": 64000,
  "sessions": {
    "maxAge": "24h",
    "summarizeAt": 48000,
    "clearStrategy": "summarize-and-archive"
  }
}

快到上限時:讓 Bot 先 summarize 之前的對話,再繼續。或者更暴力一點,直接寫 {}sessions.json 強制開新 session。

我實際碰過的坑:session 膨脹到 166K tokens 之後,Bot 就開始偷懶——每次 heartbeat 都只回一句 HEARTBEAT_OK,什麼任務都不做。就像員工年資太長開始打混一樣。 解法是每天午夜自動清 session。

MCP Server 的回傳特別容易撐爆 context。Notion API 回傳的 JSON 超級冗長,8 次呼叫可以灌 2.4MB。一定要讓 AI 只提取需要的欄位,立刻寫入檔案。


第四塊:Tool Access

Bot 真正強大的地方在這裡——它能存取各種工具:

{
  "agents": {
    "main": {
      "model": "openai-codex/gpt-5.2-codex",
      "tools": ["file-system", "browser", "mcp:notion", "mcp:gmail"],
      "skills": ["code-review", "summarize", "job-monitor"]
    }
  }
}
  • File System:讀寫本地檔案
  • Browser Automation:截圖、點擊、填表(對,AI 可以幫你操作瀏覽器)
  • MCP Servers:Notion、Gmail、GitHub(上一篇講的)
  • Shell Commands:跑腳本、執行 CLI
  • Skills:技能包(也是上一篇講的)

把 Skills 和 MCP 和 Bot 三層組合在一起:

Discord 使用者發訊息
  → Bot 的 AI Agent 判斷要用哪個 Skill
    → 需要外部資料就透過 MCP Server 取得
      → 結果回傳給使用者

每一層都可以獨立用。只用 Skills?可以。只用 MCP?也行。全部串起來?那你就有了一個全自動化助理。


最小可行架構:50 行的 ChatGPT

如果你想理解 Bot 的核心,先看最簡版。一個 ChatGPT-like 系統的本質就三件事:

// 1. 組裝訊息
const messages = [
  { role: "system", content: "你是一個有幫助的 AI 助理..." },
  ...chatHistory,
  { role: "user", content: userInput }
];
 
// 2. Token 超過就截斷
if (countTokens(messages) > MAX_TOKENS) {
  messages = truncateOldMessages(messages, MAX_TOKENS);
}
 
// 3. Streaming 回應(邊生成邊送出)
const stream = await openai.chat.completions.create({
  model: "gpt-4",
  messages,
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content || "");
}

就這樣。ChatGPT 每次對話的底層就是 system prompt + 歷史訊息 + 新訊息打包成 array 送出去。其他都是錦上添花。

理解了這個之後,你就知道自建 Bot 其實就是把這個核心加上排程、加上 Discord 監聽、加上工具呼叫、加上 session 管理。

然後你就知道為什麼 OpenAI 一個月跟你收 $20 其實很便宜。


延伸閱讀

  • [[ai/07-ai-tools-ecosystem|[ai/07] AI 工具生態:Skills 和 MCP]] — Layer 2 的技能包和萬能接頭
  • AI 工具配置 — 更詳細的配置教學
  • AI Agent Patterns — Agent 的設計模式

Bot 最難的不是搭建,是養成——跟養小孩一樣,你得不斷調教它的 prompt,然後接受它偶爾還是會搞砸。