0%

個人 Agent 開發紀錄

趁著年假期間衝刺開發我的個人 Agent。

OpenClaw 大概是現在最熱門的 AI agent 框架,功能完整、開箱即用。但想想還是決定自己做一個。

為什麼不直接用 OpenClaw?

  1. 功能太多,我不是全部都需要,不想為不需要的功能買單
  2. 給的權限太大,我不敢把自己的 key 與資料都交給他
  3. Codebase 太大,不容易快速理解
  4. 最重要的是,我想順便學習 Agent 是怎麼運作的,所以最後決定自己做一個。

NanoClaw

OpenClaw 爆紅之後冒出了很多相似的專案,例如 NanoClawNanoBot

最後挑上 NanoClaw,有幾個原因:

  1. 按需增加功能:我很喜歡這個哲學,透過 Skill 追加客製化功能,讓 codebase 只有自己需要的 function
  2. Container 隔離:只掛載需要的資料夾,從系統層面限制資料存取
  3. 使用 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 底層行為很簡單,就是四步:

  1. 接收使用者輸入
  2. LLM 推理,決定下一步
  3. 執行工具(Tool Calling),取得結果
  4. 將結果餵回 LLM,重複直到任務完成

其餘都是在其上堆砌需要的能力。

我的客製化 Agent

目前我對 Agent 的需求很簡單:

  • 協助整理我的每日日誌,提取知識點與 insights
  • 協助整理我的知識庫,發現 insights
  • 將我有興趣的文章與知識庫連結
  • 客觀審視我的日誌與資料庫

所以我為 agent 增加了以下功能:

  1. 換成 Telegram:Bot API 功能更完整。
  2. 記憶與人格:仿造 OpenClaw 的記憶架構,使用 soul、identity、memory 與日誌建立人格。透過我培養的人格辨別我在意的主題重點。
  3. 優化對話 Context:加入 reset session 讓 context 不會一直累加,跨 session 的記憶由 memory 和日誌負責。同時限制記憶長度,不讓過時的記憶干擾 agent 。
  4. 加入 Heptabase MCP:目前我的知識庫與工作日誌都在 Heptabase,讓 Agent 能讀取共享我的工作脈絡最能融入我的工作流程。

因為是 Side Project,基本上我是用 Vibe Coding 的方式在推進(ps. NanoClaw 本身也是 Vibe Coding)。也漸漸摸索出一些 vibe 比較順的方式:

  1. 針對使用情境做自動化測試,每次改完能快速確認
  2. 針對 agent 犯過的錯建立 checklist,寫進 CLAUDE.md
  3. 要求紀錄詳細的 log,讓 agent 可以快速找出問題點
  4. 發展新功能前先做 survey、建立修改計畫,並讓 agent review 過(不過還是容易有盲點,網路上說 Codex review 得比較仔細)
  5. 放寬心,不要給 agent 太多限制,反而比較容易得到好的結果

如果對我的 Agent 有興趣,可以到我的 github 看看。

結語

做的過程中一直在想,耗費這麼多 token 做自己的 Agent 真的值得嗎?
後來想通了:每個人對 Agent 的需求都不太一樣,公用模板雖然可以直接使用,但終究無法完全貼合每個人的需求。我自己覺得自己開發 Agent 有一個很顯而易見的好處–成本控管,可以很清楚了解每個功能對應的成本,選擇適合的做法。在了解 Agent 的架構後為 Agent 增加功能或 debug 也都能更順利。

我想 Agent 時代的浪漫大概就是:你真的能打造一個完美契合自己需求的 Agent。