趁著年假期間衝刺開發我的個人 Agent。
OpenClaw 大概是現在最熱門的 AI agent 框架,功能完整、開箱即用。但想想還是決定自己做一個。
為什麼不直接用 OpenClaw?
- 功能太多,我不是全部都需要,不想為不需要的功能買單
- 給的權限太大,我不敢把自己的 key 與資料都交給他
- Codebase 太大,不容易快速理解
- 最重要的是,我想順便學習 Agent 是怎麼運作的,所以最後決定自己做一個。
NanoClaw
OpenClaw 爆紅之後冒出了很多相似的專案,例如 NanoClaw 或 NanoBot。
最後挑上 NanoClaw,有幾個原因:
- 按需增加功能:我很喜歡這個哲學,透過 Skill 追加客製化功能,讓 codebase 只有自己需要的 function
- Container 隔離:只掛載需要的資料夾,從系統層面限制資料存取
- 使用 Agent SDK:已經封裝好底層邏輯,可以專注在增加 Agent 能力上
當然也是有缺點的:不能像 OpenClaw 那樣讓 Agent 為自己增加功能。
學習如何做一個 Agent
深入之後才發現,Nanoclaw 跟 OpenClaw 雖然看起來相似,本質完全不同。
NanoClaw 依賴 Claude Code Agent SDK,大部分的 Agent 行為都交給 SDK 處理。有兩個好處: 1. 底層 Tool Calling 不用自己處理。 2. 隨著官方更新, Agent 能力也會跟著變強,也不用煩惱相容性。
OpenClaw 是基於 pi-mono 架構的實現(NanoBot 也是),也就是真的觸及了底層操作。沒有要從零打造 agent 的話,鑽研這些細節就需要一大堆時間。
其實 Agent 底層行為很簡單,就是四步:
- 接收使用者輸入
- LLM 推理,決定下一步
- 執行工具(Tool Calling),取得結果
- 將結果餵回 LLM,重複直到任務完成
其餘都是在其上堆砌需要的能力。
我的客製化 Agent
目前我對 Agent 的需求很簡單:
- 協助整理我的每日日誌,提取知識點與 insights
- 協助整理我的知識庫,發現 insights
- 將我有興趣的文章與知識庫連結
- 客觀審視我的日誌與資料庫
所以我為 agent 增加了以下功能:
- 換成 Telegram:Bot API 功能更完整。
- 記憶與人格:仿造 OpenClaw 的記憶架構,使用 soul、identity、memory 與日誌建立人格。透過我培養的人格辨別我在意的主題重點。
- 優化對話 Context:加入 reset session 讓 context 不會一直累加,跨 session 的記憶由 memory 和日誌負責。同時限制記憶長度,不讓過時的記憶干擾 agent 。
- 加入 Heptabase MCP:目前我的知識庫與工作日誌都在 Heptabase,讓 Agent 能讀取共享我的工作脈絡最能融入我的工作流程。
因為是 Side Project,基本上我是用 Vibe Coding 的方式在推進(ps. NanoClaw 本身也是 Vibe Coding)。也漸漸摸索出一些 vibe 比較順的方式:
- 針對使用情境做自動化測試,每次改完能快速確認
- 針對 agent 犯過的錯建立 checklist,寫進 CLAUDE.md
- 要求紀錄詳細的 log,讓 agent 可以快速找出問題點
- 發展新功能前先做 survey、建立修改計畫,並讓 agent review 過(不過還是容易有盲點,網路上說 Codex review 得比較仔細)
- 放寬心,不要給 agent 太多限制,反而比較容易得到好的結果
如果對我的 Agent 有興趣,可以到我的 github 看看。
結語
做的過程中一直在想,耗費這麼多 token 做自己的 Agent 真的值得嗎?
後來想通了:每個人對 Agent 的需求都不太一樣,公用模板雖然可以直接使用,但終究無法完全貼合每個人的需求。我自己覺得自己開發 Agent 有一個很顯而易見的好處–成本控管,可以很清楚了解每個功能對應的成本,選擇適合的做法。在了解 Agent 的架構後為 Agent 增加功能或 debug 也都能更順利。
我想 Agent 時代的浪漫大概就是:你真的能打造一個完美契合自己需求的 Agent。