OpenClaw 實戰:用 Node.js 打造真正可用的個人 AI Agent(2026 指南)

Node.js 技術相關|AI Agent 開發實務

先講結論

OpenClaw 是 2026 年 Node.js 生態系中最值得關注的開源 AI Agent 框架之一。它不是又一個聊天機器人套件,而是一套完整的 Agent 運行時(runtime),讓你能用熟悉的 Node.js 程式碼定義工具、編排子任務、管理對話上下文,並以 daemon 模式 24/7 運行。如果你曾經嘗試用 LangChain 或自己手刻 Agent 但覺得膠水程式碼太多、狀態管理太痛苦,OpenClaw 提供了一個更貼近 Node.js 開發者直覺的替代方案。

這篇文章會帶你從零開始:理解 OpenClaw 的核心概念、實際建置一個可用的個人 AI Agent、處理常見的雷點,最後分享上線營運的實務經驗。

一、OpenClaw 是什麼?為什麼 2026 年的你該認識它

OpenClaw 的定位很明確:它是一個專為 Node.js 設計的 AI Agent 框架,核心目標是讓開發者能快速組裝出「能自主行動的 AI 助手」。跟傳統的 chatbot 框架不同,Agent 不只是回答問題——它能呼叫 API、讀寫資料庫、操作檔案系統、甚至啟動子 Agent 來處理子任務。

OpenClaw 的架構有幾個關鍵設計:

  • Tool-first 設計 — Agent 的能力由你註冊的 Tool 決定。每個 Tool 是一個普通的 async function,搭配 JSON Schema 描述參數
  • Session 狀態管理 — 內建對話歷史追蹤與上下文壓縮,不用自己管理 token 預算
  • Sub-Agent 編排 — 支援主 Agent 動態產生子 Agent 來處理特定任務,完成後合併結果
  • Daemon 模式 — 可以 openclaw daemon start 讓 Agent 在背景持續執行,監聽事件或排程觸發
  • Plugin 生態系 — 社群已有 Slack、Discord、LINE、Google Calendar 等常用整合外掛

跟其他框架的差異

特性OpenClawLangChain.js自己手刻
Tool 定義方式async function + schemaTool class 繼承自己封裝
狀態管理內建 session storeMemory class全部自己來
Sub-Agent原生支援需自行組合需自行實作
24/7 運行內建 daemon需搭配 PM2 等需自行處理
學習曲線低(Node.js 原生風格)中(抽象層較多)高(什麼都要自己寫)

二、從零開始:安裝與第一個 Agent

步驟 1:安裝 OpenClaw

確保你的環境有 Node.js 20 以上(建議用 22 LTS)。全域安裝 OpenClaw CLI:

npm i -g openclaw

驗證安裝成功:

openclaw --version
# openclaw v2.4.0

步驟 2:初始化專案

在你的專案目錄執行初始化:

mkdir my-agent && cd my-agent
openclaw init

這會產生以下結構:

my-agent/
├── agent.config.js    # Agent 主設定檔
├── tools/             # 放你自訂的 Tool
│   └── hello.js       # 範例 Tool
├── sessions/          # Session 資料(gitignore 建議加這個)
└── package.json

步驟 3:理解 agent.config.js

這是 OpenClaw 的核心設定檔,定義了你的 Agent 的行為:

// agent.config.js
export default {
  name: 'my-personal-agent',
  model: 'claude-sonnet-4-6',  // 或任何相容的 LLM
  systemPrompt: `你是一個個人助理 Agent,負責幫助使用者管理
    日常任務、查詢資訊、以及自動化重複性工作。
    回答時使用繁體中文。`,

  // Tool 自動從 ./tools/ 目錄載入
  toolsDir: './tools',

  // Session 設定
  session: {
    store: 'file',           // 'file' | 'redis' | 'postgres'
    maxHistory: 50,          // 保留最近 50 輪對話
    compressAfter: 30,       // 超過 30 輪自動壓縮摘要
  },

  // Daemon 模式設定
  daemon: {
    port: 3100,              // HTTP API 監聽埠
    webhooks: true,          // 啟用 webhook 接收
    schedule: true,          // 啟用排程功能
  }
}

步驟 4:寫你的第一個 Tool

Tool 是 Agent 能「做事」的基本單位。每個 Tool 就是一個 export default 的物件,包含描述和執行函式:

// tools/check-weather.js
export default {
  name: 'check_weather',
  description: '查詢指定城市的當前天氣狀況',
  parameters: {
    type: 'object',
    properties: {
      city: {
        type: 'string',
        description: '城市名稱,例如「台北」、「高雄」'
      }
    },
    required: ['city']
  },

  async execute({ city }) {
    // 實際呼叫天氣 API
    const res = await fetch(
      `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${process.env.WEATHER_API_KEY}&units=metric&lang=zh_tw`
    )
    const data = await res.json()
    return {
      city,
      temperature: data.main.temp,
      description: data.weather[0].description,
      humidity: data.main.humidity
    }
  }
}

步驟 5:啟動互動模式測試

openclaw chat

> 台北今天天氣如何?
Agent: 讓我查一下台北的天氣...
[Tool: check_weather({city: "台北"})]
Agent: 台北目前氣溫 28°C,多雲,濕度 75%。建議帶把傘出門。

三、實戰模式:打造真正有用的 Agent

一個只會查天氣的 Agent 不算什麼。讓我們建一個實際能用的個人助理 Agent,整合日常開發者會用到的功能。

3.1 訊息工作流:整合 Slack 通知

// tools/slack-notify.js
import { WebClient } from '@slack/web-api'

const slack = new WebClient(process.env.SLACK_TOKEN)

export default {
  name: 'slack_send',
  description: '發送訊息到指定的 Slack 頻道',
  parameters: {
    type: 'object',
    properties: {
      channel: { type: 'string', description: 'Slack 頻道名稱,例如 #general' },
      message: { type: 'string', description: '要發送的訊息內容' }
    },
    required: ['channel', 'message']
  },

  async execute({ channel, message }) {
    const result = await slack.chat.postMessage({
      channel,
      text: message
    })
    return { ok: result.ok, ts: result.ts }
  }
}

3.2 自動化排程:每日站報摘要

OpenClaw 的 daemon 模式內建排程功能,你可以直接在設定中定義 cron job:

// agent.config.js 新增排程
export default {
  // ...其他設定
  schedules: [
    {
      name: 'daily-standup-summary',
      cron: '0 9 * * 1-5',  // 週一到週五早上 9 點
      prompt: `查詢 GitHub 上 my-org/main-repo 昨天的所有
        merged PR,整理成站報摘要格式,然後發送到 #dev-standup 頻道。`,
    },
    {
      name: 'dependency-check',
      cron: '0 10 * * 1',   // 每週一早上 10 點
      prompt: `檢查專案的 npm dependencies 是否有已知的安全漏洞,
        如果有,發送報告到 #security 頻道。`,
    }
  ]
}

3.3 Tool 編排:讓 Agent 組合多個工具

OpenClaw 的 Agent 會根據任務需求自動決定呼叫哪些 Tool 以及呼叫順序。你不需要手動編排流程——只要把 Tool 註冊好,Agent 會自己想辦法。但如果你需要強制特定流程,可以用 workflow 模式:

// tools/deploy-check.js
export default {
  name: 'deploy_preflight',
  description: '執行部署前檢查,包含測試、lint、安全掃描',

  // workflow 模式:定義步驟順序
  workflow: true,

  async execute({ branch }) {
    const steps = []

    // Step 1: 跑測試
    const testResult = await this.agent.useTool('run_tests', { branch })
    steps.push({ step: 'tests', ...testResult })

    if (!testResult.passed) {
      return { ok: false, reason: '測試未通過', steps }
    }

    // Step 2: 安全掃描
    const auditResult = await this.agent.useTool('npm_audit', {})
    steps.push({ step: 'audit', ...auditResult })

    // Step 3: 通知結果
    const summary = steps.map(s => `${s.step}: ${s.passed ? '✓' : '✗'}`).join('\n')
    await this.agent.useTool('slack_send', {
      channel: '#deployments',
      message: `部署前檢查結果:\n${summary}`
    })

    return { ok: true, steps }
  }
}

3.4 Sub-Agent 模式:把複雜任務拆解

當任務太複雜、一個 Agent 的上下文不夠用時,你可以讓主 Agent 派生子 Agent。每個子 Agent 有自己的 session 和 tool 集合,完成後將結果回傳給主 Agent:

// tools/research-topic.js
export default {
  name: 'deep_research',
  description: '針對特定技術主題進行深度研究,會啟動子 Agent 分工處理',

  async execute({ topic }) {
    // 啟動子 Agent — 各自有獨立的上下文和 Tool
    const [docsResult, codeResult] = await Promise.all([
      this.agent.spawn({
        name: 'docs-researcher',
        tools: ['web_search', 'read_url'],
        prompt: `搜尋並整理 ${topic} 的官方文件和最佳實踐`,
      }),
      this.agent.spawn({
        name: 'code-researcher',
        tools: ['github_search', 'read_file'],
        prompt: `搜尋 GitHub 上 ${topic} 的實際使用範例和常見模式`,
      }),
    ])

    return {
      documentation: docsResult.summary,
      codeExamples: codeResult.summary,
      sources: [...docsResult.sources, ...codeResult.sources]
    }
  }
}

四、上線營運:讓 Agent 穩定跑在 Production

4.1 用 Daemon 模式部署

# 啟動 daemon
openclaw daemon start

# 檢查狀態
openclaw daemon status
# ┌─────────────────────┬────────┬──────────┬─────────┐
# │ Agent               │ Status │ Uptime   │ Memory  │
# ├─────────────────────┼────────┼──────────┼─────────┤
# │ my-personal-agent   │ online │ 2d 14h   │ 87 MB   │
# └─────────────────────┴────────┴──────────┴─────────┘

# 檢視即時 log
openclaw daemon logs --follow

# 重啟(更新 Tool 後需要)
openclaw daemon restart

4.2 HTTP API 接入

Daemon 模式啟動後,Agent 會暴露 HTTP API,讓你從任何地方跟它互動:

# 傳送訊息給 Agent
curl -X POST http://localhost:3100/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "幫我查一下 main branch 最近的 CI 狀態"}'

# 觸發特定排程
curl -X POST http://localhost:3100/api/schedule/trigger \
  -d '{"name": "daily-standup-summary"}'

4.3 監控與告警

正式環境建議加上基本的監控:

// agent.config.js 加上監控設定
export default {
  // ...其他設定
  observability: {
    // 記錄每次 Tool 呼叫的延遲和結果
    tracing: true,

    // 每次 LLM 呼叫的 token 用量追蹤
    tokenUsage: true,

    // 錯誤時自動通知
    errorHandler: async (error, context) => {
      await fetch(process.env.ALERT_WEBHOOK, {
        method: 'POST',
        body: JSON.stringify({
          text: `Agent 錯誤:${error.message}`,
          context: context.toolName,
        })
      })
    }
  }
}

4.4 使用託管服務簡化維運

如果你不想自己管伺服器、處理 daemon 監控和自動重啟,可以考慮使用 Clawly 這類託管平台。Clawly 提供 OpenClaw 的雲端運行環境,幫你處理 daemon 管理、log 收集、自動擴縮容等維運工作,讓你專注在 Agent 邏輯本身。對於個人開發者或小團隊來說,省下來的維運時間很可觀。

五、踩坑紀錄與最佳實踐

我們在實際使用 OpenClaw 的過程中踩了不少坑,以下整理出最常見的問題和對應的解法:

5.1 Tool 描述寫得太模糊

問題:Agent 經常選錯 Tool 或傳錯參數。
原因:Tool 的 descriptionparameters 描述不夠精確,LLM 無法正確判斷何時該用哪個 Tool。
解法:把 description 當成寫給 LLM 看的文件,要具體、有範例,避免抽象描述。

// ✗ 不好的描述
description: '處理資料'

// ✓ 好的描述
description: '查詢 PostgreSQL 資料庫中的使用者資料。輸入 SQL WHERE 條件(例如 "role = \'admin\'"),回傳符合條件的使用者陣列。'

5.2 Session 爆掉 Token 上限

問題:長時間對話後 Agent 開始出現幻覺或忘記前面的指令。
解法:善用 session.compressAfter 設定,讓 OpenClaw 自動摘要舊的對話。另外,每個排程任務應該用獨立的 session,不要共用。

// 排程任務使用獨立 session
schedules: [
  {
    name: 'daily-report',
    cron: '0 18 * * *',
    prompt: '產生今日工作摘要',
    sessionStrategy: 'isolated',  // 每次執行都是全新 session
  }
]

5.3 Tool 執行逾時

問題:外部 API 偶爾很慢,導致整個 Agent 卡住。
解法:在 Tool 裡加上 timeout 和 retry,或使用 OpenClaw 內建的 timeout 設定。

export default {
  name: 'slow_api_call',
  description: '呼叫可能很慢的外部 API',
  timeout: 15000,  // 15 秒逾時
  retries: 2,      // 最多重試 2 次

  async execute(params) {
    const controller = new AbortController()
    const res = await fetch(url, { signal: controller.signal })
    return await res.json()
  }
}

5.4 敏感資訊外洩到 LLM

問題:Tool 回傳的資料包含密碼、token 等敏感欄位,被送進了 LLM 的 context。
解法:在 Tool 的回傳值中做好過濾,或使用 OpenClaw 的 redact 功能。

export default {
  name: 'get_user',
  // ...
  redact: ['password', 'apiKey', 'token'],  // 這些欄位不會進入 LLM context

  async execute({ userId }) {
    const user = await db.users.findById(userId)
    return user  // OpenClaw 會自動移除 redact 中指定的欄位
  }
}

5.5 Production 環境的安全建議

  • 限制 Tool 權限 — 不要讓 Agent 有 rm -rfDROP TABLE 的能力,永遠遵守最小權限原則
  • API Rate Limiting — 在 daemon 的 HTTP API 前面加上 rate limiter,避免被濫用
  • Token 用量告警 — 設定每日 LLM token 用量上限,超過就暫停排程任務並通知
  • Log 稽核 — 所有 Tool 呼叫都應該有完整 log,方便事後追查
  • 環境變數管理 — 用 .env 管理敏感設定,絕對不要 hardcode 在 agent.config.js 中

六、部署方案比較

根據團隊規模和需求,以下是常見的 OpenClaw 部署方式:

部署方式適合對象優點缺點
本機 daemon個人開發者零成本、完全掌控電腦關機就停了
VPS + Docker小團隊24/7 運行、成本低需要自己顧維運
Clawly 託管平台想省維運的團隊一鍵部署、自動監控依方案收費
K8s 自建叢集大型團隊高可用、可水平擴展維運成本高

七、常見問題 FAQ

Q1:OpenClaw 支援哪些 LLM?

OpenClaw 支援所有提供 tool use / function calling 能力的 LLM,包括 Claude(Anthropic)、GPT-4o(OpenAI)、Gemini(Google)等。你也可以透過 OpenAI-compatible API 接入本地部署的開源模型。在 agent.config.jsmodel 欄位指定即可。

Q2:OpenClaw 跟 LangChain.js 有什麼不同?該選哪個?

LangChain.js 是通用的 LLM 應用框架,抽象層比較多,適合需要串接多種不同 chain 和 retriever 的場景。OpenClaw 則專注在 Agent 模式,設計更貼近 Node.js 原生開發體驗,特別適合需要 24/7 運行、排程任務、Tool 編排的場景。如果你的需求是純 RAG 或 chain-of-thought 推理,LangChain 可能更適合;如果是自主行動的 Agent,OpenClaw 更順手。

Q3:OpenClaw 的 Token 用量大約多少?成本怎麼估算?

Token 用量取決於你的 system prompt 長度、Tool 數量、以及對話頻率。以一個註冊 10 個 Tool 的 Agent 來說,每次完整的 request-response 循環大約消耗 2,000-5,000 tokens。開啟 observability.tokenUsage 可以追蹤實際用量。建議先用便宜的模型(如 Claude Haiku)開發測試,確認流程正確後再切換到更強的模型。

Q4:可以在 Agent 中存取資料庫嗎?

可以。你可以寫一個 Tool 來封裝資料庫操作。建議的做法是只開放 read-only 查詢給 Agent,寫入操作則透過特定的、有權限控管的 Tool 來執行。用 OpenClaw 的 redact 功能確保敏感欄位不會外洩到 LLM context 中。

Q5:如何讓 Agent 存取私有的內部文件?

搭配 RAG(Retrieval-Augmented Generation)模式。你可以用 OpenClaw 社群的 @openclaw/plugin-rag 外掛,將內部文件建成向量索引,Agent 就能在回答時自動檢索相關文件片段。這比把所有文件塞進 system prompt 更有效率也更省 token。

Q6:OpenClaw 適合用在正式的 production 環境嗎?

可以,但要做好基本功:設定 timeout 和 retry、限制 Tool 權限、加上 token 用量告警、記錄完整 log。如果你不想自己處理這些維運細節,也可以直接使用 Clawly 等託管服務來降低上線門檻。重點是不管用哪種方式,都要先在 staging 環境充分測試。

結語

OpenClaw 把「打造個人 AI Agent」這件事的門檻拉到了 Node.js 開發者可以輕鬆上手的程度。你不需要懂複雜的 AI 理論,只要會寫 async function 和定義 JSON Schema,就能讓 Agent 幫你做事。

從個人的日常自動化開始——查天氣、整理 GitHub 通知、產生站報摘要——然後逐步擴展到團隊級的工作流。重要的是先讓 Agent 跑起來,再根據實際需求迭代。

如果這篇文章對你有幫助,歡迎在 Node.js Taiwan 社群分享你的 OpenClaw 實作經驗。