2026年11月12日 星期四

Hermes agent 工業風慢慢學, 先靠 docker 上手

單純的 LLM 就像是裝在瓶子裡、 只能與外界對話的大腦; 如果讓 LLM 連上鍵盤滑鼠、 讓它可以操作電腦, 那就變成了現在流行的 AI agent。 零基礎的讀者可以讀 Frank Chiu 的 Hermes Agent 概念簡介文, 建立基本觀念。 想動手玩的讀者, 資訊密度超高的 PAPAYA 電腦教室的保姆級教學影片 很值得研究。 也推薦直接搜尋 「Hermes Agent」。

* * * * *

年初就想玩 AI agent; 最近終於開始有點上手。 我學 AI agent 沒有工作需求與時間的壓力; 我又偏好 "工業風": 透過命令列觀察各種 "管線" 運作原理、 設定較省資源的輕巧工作與備份環境, 所以進度很慢, 連通訊軟體都還沒接 😅 ; 但也因此在很多地方磨出一些更深入的心得。 本文以及接下來的一系列 Hermes agent 文章就是這樣的調性; 跟主流的文章不太一樣。

首先, 為什麼不用最早紅的 "龍蝦", openclaw? 因為它很慢, 而且在我的某一部電腦上慢到連 help 都要兩分鐘才有回應 😅 在 gemini 協助之下, 才知道 openclaw 撞到了一個跟某些 CPU 硬體 bug 相關的問題。 我搜尋到相關的 issue 並 留言, 可惜他們團隊好像並沒有完整處理。 後來那個 issue 被關掉了, 但我的電腦還是一樣慢。 於是才搜尋到另一個 AI agent 自由軟體: Hermes agent。

以下是想走我這條路的讀者應準備的事項:

  1. LLM: 拿信用卡開通一個 OpenRouter 帳號、 找到最省錢的夠力模型。
  2. 主機: 隨便一部很普通的文書機就可以安裝 Hermes agent。 我有一部樹莓派 3B (記憶體 1G) 安裝了 64bit 版的 Raspberry Pi OS, 連它也可以啟動 Hermes agent! 但每個 hermes 指令都要等二十幾秒到一兩分鐘, 不太實用。 現在我的主力是 aws 上的 t4g.small ec2 instance: Arm 64 bit CPU、 2G 記憶體, 已達堪用等級。 實際上我會把資料搬來搬去, 也經常在家裡較強的桌機使用。 (以後詳談)
  3. OS 環境: debian trixie + docker。 用 docker 的好處是安全隔離、 更新簡單。 稍微了解 docker 狀態轉換 及 volume 映射、 port 映射 會很有幫助。 除了建立之外, 最常需要用的 docker 指令其實只有兩個: docker start -ai ... 跟 docker exec -it ... 。

儲存空間 💾 可以分三部分考量:

  1. 我習慣把 /var/lib/docker 放在獨立的分割區或 lvm。 12G 的空間勉強可以塞下我 (基於官方版) 做的 Hermes agent 的 image。
  2. 官方的 docker 設定: 對話資料庫 state.db 、 新安裝的工具等等會成長的活動資料都放在 /opt/data 底下。 使用 hermes backup 備份時, 這整個目錄都會被打包。 一開始留個幾百 MB 用來探索應該很夠。 我的六個 sessions 目前佔用不到 10MB。
  3. 需要餵給 agent 看, 但是不想被上述指令備份的資料 (例如可能因為資料量太大/沒必要備份/自己另有其他備份機制) 則放在另一個工作目錄。 以下我叫它 /ext 。

我的 Dockerfile 做了以下的事:

  1. 因為 這個 bug, 需要做一點補破網的動作, uv 跟 uvx 才可以用。 在 Hermes agent 的 docker 環境內想安裝 python 套件時, 要用到這兩個指令。
  2. 安裝 browser-use 這個工具。
  3. 設定 HOME 跟 HERMES_HOME 都指向 /opt/data。 先前未設定這兩個變數時, 在 /opt/data 跟 /opt/data/.hermes 底下都發現 config.yaml 設定檔, 頭好昏, 搞不清楚哪個才有效。 等以後需要用多個 agents 再來研究; 目前先統一指向 /opt/data 比較簡單。
  4. 用 apt 安裝我常用的工具。
  5. 讓終端機可以使用中文。
  6. 設定台灣時區。

目前我所採用的官方最新版 v0.23.1-desktop 有一個 bug, 所以在 shell 底下執行每個 hermes 時都會出現這樣的錯誤訊息: ⚠ install out of sync (pnpm: not installed or outdated) — this docker-managed install must rebuild the artifact to fix 可以先忽略它。

我製作了 amd64 跟 arm64 兩版的映像檔。 (會根據用戶的機器自動提供正確的版本, 這次才學會的。) 假設你已設定 讓平時登入的用戶 (例如我自己的 ckhung) 可以直接操作 docker: sudo usermod -aG docker $USER。 那麼, 在 x86 的桌機/筆電, 或是 arm64 的樹莓派/aws t4g 機器上都可以這樣建立一個 Hermes agent 的 docker container:

docker run -it --name hermes \
    -v /h/.hermes:/opt/data -v /h/ext:/ext \
    -p 9119:9119 \
    -e HERMES_UID=$(id -u) \
    -e HERMES_GID=$(id -g) \
    -e HERMES_WRITE_SAFE_ROOT=/opt/data:/ext \
    ckhung/hermes-agent bash
  1. 上面的 /h 應該要改成你準備拿來放 hermes 資料的目錄, 並且在底下預先建立 .hermes 跟 ext 兩個子目錄。 Host (啟動 docker 的實體機) 裡面的這兩個目錄, 分別對應到 guest (container) 裡面的 /opt/data 與 /ext。
  2. -p 9119:9119 是為了使用 Hermes Agent Dashboard。 [中文]、 [英文]
  3. 設定 HERMES_UID 跟 HERMES_GID 這兩個環境變數, hermes 就會自動抄來設定 container 裡面的用戶 uid 與 gid, 省去檔案權限的困擾。
  4. HERMES_WRITE_SAFE_ROOT 這個變數原本預設是 /opt/data, 限定了 agent 使用多項內建工具時可寫入的範圍。 一開始我沒有加上 /ext , agent 做事的時候常常撞牆, 在 /ext 工作時無法直接用系統工具修改檔案, 只能下指令寫入, 或是需要把資料複製到 /opt/data 底下再修改, 浪費了一些 tokens。
  5. 最後, 我習慣先進入 bash, 而不要直接進入 hermes。

注意: 不要理會這個訊息 「Note: The hermes-agent codebase was not included in the backup. If this is a fresh install, run: hermes update」 不要執行 hermes update。 那是給 "從原始碼執行" 的用戶的 更新路徑; 我們用的是 docker, 不適用。

進入 container 玩一玩、 按 ctrl-d 離開之後, 要再進入時, 就下 docker start -ai hermes , 其中的 "hermes" 對應到建立時 --name 所取的名字。 使用過程當中 (就是已經 docker start ... 的狀態下) 如果需要 root 權限 (例如下 apt install ... 安裝套件), 可以從另一個終端機分頁進入: docker exec -it --user root hermes bash 。

好了, 接下來你可以學一下 session 管理 [正體中文, 在 hermes 內]、 [簡體中文, 從 bash 執行] 開始測試你自己的 agent 了!

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。