Hermes Agent 源碼拆解:一個循環不到 10 行代碼的 Agent 框架,憑什麼自進化?

作者:術哥無界
日期:2026年5月22日 上午8:30
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

Hermes Agent 靠三層 Prompt 分層設計同簡潔循環實現自進化,值得Agent開發者深入學習

整理版摘要

呢篇文章係術哥(一名專注AI編程、智能體、Agent Skills等技術實踐者同開源佈道者)對Hermes Agent源碼嘅深度拆解。佢想幫讀者搞清楚呢個自進化AI Agent框架嘅核心設計,而唔係俾一堆數字嚇親。文章從源碼出發,拆解咗三層Prompt架構、思考-行動循環、工具系統等核心機制,仲一步一步教你點正確配置同運行。

整體嚟講,Hermes Agent嘅設計清晰,分層哲學做得好——系統Prompt分stable/context/volatile三層,提升緩存命中率;核心循環保持簡潔(唔夠10行),能力靠外圍系統組合擴展。呢種工程取捨令到框架既靈活又高效。不過佢嘅門檻都唔低:要求模型至少64K上下文、構造函數有成60個參數、40+工具要按場景裁剪,初次接觸要花時間理解。

文章基於v0.14.0源碼同官方Quickstart分析,未經生產環境全場景驗證,建議讀者自行測試。Hermes Agent適合需要生產部署Agent嘅團隊、想深入理解Agent架構嘅開發者,同埋需要多平台消息網關嘅場景;唔適合輕度用戶或者Agent新手。

  • 結論Hermes Agent 內置學習閉環,從任務經驗提煉可複用 skill,核心係三層 Prompt 分離同思考-行動循環。
  • 方法:系統 Prompt 分 stable/context/volatile 三層,穩定部分緩存重用,減少 token 消耗;循環簡潔,能力靠工具系統組合。
  • 差異:與其他框架每輪重建 system prompt 唔同,Hermes 分層設計提升緩存命中率;循環邏輯清晰,唔超過10行主代碼。
  • 啟發:分層設計值得借鑑,特別係多輪對話系統嘅緩存優化;工具自動發現同按場景裁剪可顯著提升效率。
  • 可行動點:用 hermes setup 快速入門;確認模型支援64K上下文;按場景啟用工具集(如只開 web 同 terminal);生產環境用 Docker 後端確保一致性。
整理重點

核心機制:三層 Prompt 與思考-行動循環

Hermes Agent 嘅核心唔係某個花哨功能,而係佢嘅分層設計哲學。系統提示詞喺 agent/system_prompt.py 中組裝,分為三層:stable(穩定層)、context(上下文層)、volatile(易變層)。呢個設計嘅核心考量係緩存命中率——系統提示詞喺每個會話中只構建一次並緩存,後續輪次複用,對 LLM 提供商嘅 prefix cache 好友好。

三層 Prompt 架構:stable/context/volatile

緩存命中率提升,減少重複 token 計費

Agent Loop 喺 agent/conversation_loop.py 中實現,核心循環唔夠10行代碼。佢嘅邏輯好清晰:發送消息,檢查有冇工具調用,有就執行並繼續循環,冇就返回最終響應。複雜嘅能力來自主外圍嘅工具系統、提示詞組裝同記憶管理,而唔係循環本身嘅複雜度。

核心循環唔夠10行,能力靠組合擴展

工具自動發現機制:每個 tools/*.py 導入時自動註冊

  1. 1 max_iterations 默認90,控制工具調用迭代次數上限
  2. 2 iteration_budget 提供更細粒度嘅預算控制
  3. 3 _budget_grace_call 允許預算耗盡後額外執行一次,避免任務中途截斷
整理重點

源碼級快速上手

Hermes Agent 提供三種安裝路徑,適用場景唔同:一鍵安裝、pip 安裝、貢獻者路徑。一鍵安裝器會自動處理 uv、Python 3.11、Node.js、ripgrep、ffmpeg 等依賴,對新手最友好。

一鍵安裝:curl -fsSL ... | bash

  • 一鍵安裝:快速體驗,適用於 Linux/macOS/WSL2/Termux
  • pip 安裝:已有 Python 環境就用呢個
  • 貢獻者路徑:git clone + ./setup-hermes.sh,適合想改源碼嘅人

AIAgent 類喺 run_agent.py 中,構造函數接收約60個參數。日常使用只需要關注兩個接口:agent.chat() 同 agent.run_conversation()。

程式內容 python
# 簡單接口:返回最終響應字符串
response = agent.chat("幫我分析呢段代碼嘅性能問題")

# 完整接口:返回 final_response + messages
result = agent.run_conversation(
 user_message="分析代碼",
 system_message="你係一個代碼審查專家",
 conversation_history=[],
 task_id="review-001"
)

CLI 核心命令:hermes setup 然後 hermes (--tui)

CLI 提供互動式對話同 TUI 界面,hermes setup 係最直接嘅入門方式。如果已經知道用邊個提供商,直接 hermes model 選模型更快。

整理重點

環境與配置避坑指南

Hermes Agent 嘅配置跟分離原則:密鑰同令牌放 ~/.hermes/.env,非機密設置放 ~/.hermes/config.yaml。呢個分離令 .env 可以 set 嚴格權限(chmod 600),config.yaml 可以加入版本控制共享俾團隊。

密鑰放 .env,非機密放 config.yaml

新手成日遇到64K上下文嘅硬性門檻。Hermes Agent 要求模型至少64,000 tokens,低過呢個值嘅模型喺啟動時會被直接拒絕。如果係本地模型,需要手動設置上下文長度,例如 llama.cpp 用 --ctx-size 65536。

環境變量方面,.env.example 列出咗20+個 LLM 提供商嘅密鑰配置。常用嘅包括 OPENROUTER_API_KEY、GOOGLE_API_KEY、DEEPSEEK_API_KEY,仲有工具密鑰例如 EXA_API_KEY、FIRECRAWL_API_KEY。

先跑 hermes doctor 診斷問題

  1. 1 空回覆或亂碼:提供商認證或模型選擇錯誤,重跑 hermes model
  2. 2 自定義端點返回垃圾數據:base URL 錯誤或唔係 OpenAI 兼容,先喺獨立客戶端驗證
  3. 3 網關啓動但收唔到消息Bot token 或白名單唔完整,重跑 hermes gateway setup
整理重點

進階最佳實踐

Prompt 緩存優化可以進一步做:stable 層盡量保持不變,context 層按項目切換,volatile 層交俾框架管理。咁樣可以最大化緩存命中率,減少 token 消耗。

enabled_toolsets 同 disabled_toolsets 精細控制

供應鏈安全方面,Hermes Agent 喺2026年5月經歷咗一次蠕蟲事件,之後所有核心依賴使用精確版本鎖定(==X.Y.Z),mistralai PyPI 包已被隔離移除。呢個做法犧牲咗靈活性但換來安全。

依賴精確版本鎖定,避免供應鏈風險

7種終端後端覆蓋本地開發到雲端部署場景。生產環境推薦 Docker 後端(TERMINAL_ENV=docker),確保團隊行為一致。

  • local:本地開發調試,默認選項,零配置
  • docker:隔離環境運行,適合 CI/CD 同團隊標準化
  • ssh:遠程服務器執行,適合需要特定硬件嘅場景
  • modal / daytona / vercel_sandbox:雲端按需執行,按用量計費
  • singularityHPC 環境專用,學術同科研場景

🚩 2026 年「術哥無界」系列實戰文檔 X 篇原創計劃 第 119 篇,Hermes Agent 最佳實戰「2026」系列第 2 篇

大家好,歡迎來到 術哥無界 | ShugeX | 運維有術

我是術哥,一個專注喺 AI 編程、AI 智能體、Agent Skills、MCP、雲原生、AIOps、Milvus 向量數據庫嘅技術實踐者同開源佈道者

Talk is cheap, let's explore。無界探索,有術而行。

Hermes Agent 架構概覽圖
Hermes Agent 架構概覽圖

圖 1:Hermes Agent 核心架構與關鍵數據概覽

Hermes Agent v0.14.0 嘅定位好明確:一個自進化 AI Agent 框架。佢唔係簡單嘅 API 封裝,而係內置咗學習閉環 - 能夠從任務經驗入面提煉出可複用嘅 skill,並喺後續使用中自我修正。

睇咗一圈官方文檔同源碼,發現幾個數字幾搶眼:30+ LLM 提供商、40+ 內置工具、7 種終端後端。但係初次接觸嘅人好容易俾呢啲數字淹沒,連跑個 Quickstart 都可能卡住。

呢篇文章從源碼出發,將 Hermes Agent 嘅核心架構拆清楚,再一步步說明點樣正確配置同運行。

說明:本文內容係基於 Hermes Agent 源碼(NousResearch/hermes-agent)v0.14.0 同官方 Quickstart 文檔分析整理而成,源碼分析係基於筆者本地倉庫版本,尚未喺生產環境完成全場景驗證。文中嘅配置模板同參數建議只係參考,實際效果請以你嘅業務數據同環境測試結果為準。如果有實際使用經驗,歡迎喺評論區分享交流。

1. 核心機制:三層 Prompt 與思考-行動循環

System Prompt 三層架構示意圖
System Prompt 三層架構示意圖

圖 2:System Prompt 三層架構 — stable/context/volatile 分層設計

Hermes Agent 嘅核心唔係某個花巧嘅功能,而係佢嘅分層設計哲學。理解咗呢套設計,後面嘅配置同調試就唔會亂。

System Prompt 三層架構

系統提示詞喺 agent/system_prompt.py 中組裝,分為三層:

  • stable(穩定層):Agent 身份(由 SOUL.md 或默認身份定義)、工具使用指導、技能提示、環境提示、平台提示。呢啲內容喺 Agent 生命週期內基本唔變。
  • context(上下文層)AGENTS.md.cursorrules 等上下文文件 + 調用方傳入嘅 system_message。呢一層隨項目或者場景切換而變化。
  • volatile(易變層):記憶快照、用戶畫像、外部記憶提供者塊、時間戳/會話/模型/提供商信息。每一輪對話都可能唔同。

呢個設計嘅核心考量係緩存命中率。系統提示詞喺每個會話入面只構建一次並緩存,後續輪次複用 - 對上游 LLM 提供商嘅 prefix cache 友好,可以明顯減少重複 token 嘅計費。

對於做過多輪對話系統嘅開發者嚟講,呢個設計應該唔陌生。好多 Agent 框架每輪都重建完整 system prompt,搞到緩存全部失效。Hermes 將唔變嘅部分(stable)同成日變嘅部分(volatile)分開,呢個係一個值得借鏡嘅工程決策。

Agent Loop:思考-行動循環

Agent Loop 流程圖
Agent Loop 流程圖

圖 3:Agent Loop 思考-行動循環流程

對話循環嘅核心喺 agent/conversation_loop.py(大約 3900 行)。精簡咗之後嘅邏輯如下:

while (api_call_count < self.max_iterations
       and self.iteration_budget.remaining > 0) \
       or self._budget_grace_call:
    if self._interrupt_requested:
        break
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        tools=tool_schemas
    )
    if response.tool_calls:
        for tool_call in response.tool_calls:
            result = handle_function_call(
                tool_call.name,
                tool_call.args,
                task_id
            )
            messages.append(tool_result_message(result))
        api_call_count += 1
    else:
        return response.content

循環邏輯好清楚:發送消息,檢查有冇工具調用,有就執行並繼續循環,冇就返回最終響應。

有意思嘅係,呢個號稱自帶學習閉環嘅 Agent 框架,核心循環唔夠 10 行代碼。複雜嘅能力嚟自外圍嘅工具系統、提示詞組裝同記憶管理,而唔係循環本身嘅複雜度。呢個係一種刻意嘅設計選擇 - 循環保持簡潔,能力透過組合擴展。

幾個關鍵參數值得留意:

  • max_iterations 默認 90,控制工具調用嘅迭代次數上限
  • iteration_budget 提供更細粒嘅預算控制
  • _budget_grace_call 允許預算用曬之後額外執行一次,避免任務中途截斷
  • 工具調用使用線程池並行執行,上限 8 個 worker

工具自動發現機制

工具系統採用註冊模式。每個 tools/*.py 文件喺導入時會調用 registry.register() 自動註冊,唔需要手動維護工具列表。

model_tools.py 中的 discover_builtin_tools() 觸發發現過程,toolsets.py 定義了 _HERMES_CORE_TOOLS 列表,即所有平台共享嘅基礎工具集,大約 40+ 個工具。工具一定要歸屬於某個 toolset 先至可以被 Agent 使用 - 呢套設計令到工具嘅開關變得好靈活。

核心工具集包括:web(搜索同內容提取)、terminal(命令執行)、file(文件操作)、browser(瀏覽器自動化,13 個工具)、code_execution(Python 腳本執行)、delegation(子代理委派)、skills(技能管理)、memory(持久化記憶)、todo(任務規劃)。

2. 源碼級快速上手

安裝方式對比

Hermes Agent 提供三種安裝路徑,適用場景唔同:

方式
命令
適用場景
一鍵安裝
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
快速體驗,Linux/macOS/WSL2/Termux
pip 安裝
pip install hermes-agent && hermes postinstall
已經有 Python 環境
貢獻者路徑
git clone
 + ./setup-hermes.sh
需要修改源碼或者睇代碼

一鍵安裝器會自動處理 uv、Python 3.11、Node.js、ripgrepffmpeg 等依賴。如果揀貢獻者路徑,源碼目錄結構如下:

hermes-agent/
├── run_agent.py          # AIAgent 核心類(~4100 行)
├── model_tools.py        # 工具編排層
├── toolsets.py           # 工具集定義
├── cli.py                # 交互式 CLI(~11k 行)
├── agent/                # Agent 內部模塊
│   ├── system_prompt.py  # 系統提示詞組裝
│   ├── conversation_loop.py  # 對話循環
│   └── prompt_builder.py # 提示詞構建器
├── tools/                # 工具實現(自動發現)
├── gateway/              # 消息網關
└── plugins/              # 插件系統

AIAgent 核心接口

AIAgent 類在 run_agent.py 中,構造函數接收大約 60 個參數。日常使用只需要留意兩個接口:

# 簡單接口:返回最終響應字符串
response = agent.chat("幫我分析這段代碼的性能問題")

# 完整接口:返回 final_response + messages
result = agent.run_conversation(
    user_message="分析代碼",
    system_message="你是一個代碼審查專家",
    conversation_history=[],
    task_id="review-001"
)

構造函數入面幾個關鍵參數:

AIAgent(
    base_url=None,          # LLM 端點
    api_key=None,           # API 密鑰
    provider=None,          # 提供商標識
    model="",               # 模型名稱
    max_iterations=90,      # 工具調用迭代上限
    enabled_toolsets=None,  # 啓用的工具集
    disabled_toolsets=None  # 禁用的工具集
)

不過大多數情況下唔需要直接構造 AIAgent,CLI 同網關會自動處理初始化。

CLI 核心命令

hermes              # 交互式 CLI 對話
hermes --tui        # 現代 TUI 界面(推薦)
hermes setup        # 一站式配置嚮導
hermes model        # 選擇 LLM 提供商和模型
hermes tools        # 配置啓用的工具
hermes config set   # 設置單個配置項
hermes gateway      # 啓動消息網關
hermes doctor       # 診斷問題
hermes --continue   # 恢復上次會話

按照官方 Quickstart 嘅推薦路徑,hermes setup 然後運行真實聊天驗證響應,係最直接嘅入門方式。如果已經知道要用邊個提供商,直接 hermes model 揀模型更快。

官方文檔仲提供咗一個快速路徑表,按目標揀入口:

目標
第一步
下一步
本機運行
hermes setup
運行真實聊天驗證響應
已知提供商
hermes model
保存配置,開始聊天
機械人/常駐服務
hermes gateway setup
連接 Telegram/Discord/Slack
本地/自託管模型
hermes model
 自定義端點
驗證端點、模型名、上下文長度

3. 環境與配置避坑指南

配置文件結構圖
配置文件結構圖

圖 4:配置分離原則 — .env 安全區域 vs config.yaml 共享區域

Hermes Agent 嘅配置遵循分離原則:密鑰同令牌放 ~/.hermes/.env,非機密設定放 ~/.hermes/config.yaml。呢個分離唔係隨便做㗎 - .env 文件可以設定嚴格權限(chmod 600),而 config.yaml 可以加入版本控制分享俾團隊。

三個配置加載器服務於唔同運行場景:

加載器
使用者
位置
load_cli_config()
CLI 交互模式
cli.py
load_config()
CLI 子命令
hermes_cli/config.py
直接 YAML 加載
網關運行時
gateway/run.py

64K 上下文:容易踩嘅硬性門檻

呢個係新手成日遇到嘅問題。Hermes Agent 要求模型至少 64,000 tokens 嘅上下文窗口,低過呢個值嘅模型喺啟動時會直接俾人拒絕。

點解唔設低啲?考慮到系統提示詞三層架構 + 工具 schema + 對話歷史嘅 token 消耗,64K 係一個務實嘅選擇。但代價都好明顯 - 一啲輕量模型同細參數模型直接被排除喺外面。

本地模型需要手動設定上下文長度:

# llama.cpp
./main --ctx-size 65536

# Ollama
ollama run model_name -c 65536

環境變量配置

.env.example 列出咗 20+ 個 LLM 提供商嘅密鑰配置。以下係常用嘅幾個:

# LLM 提供商(選一個即可)
OPENROUTER_API_KEY=sk-or-...    # OpenRouter,200+ 模型
GOOGLE_API_KEY=AIza...          # Google AI Studio
DEEPSEEK_API_KEY=sk-...         # DeepSeek

# 工具密鑰(按需配置)
EXA_API_KEY=...                 # Exa AI 搜索
FIRECRAWL_API_KEY=...           # Firecrawl 爬蟲

# 終端配置
TERMINAL_ENV=local              # 後端類型
TERMINAL_TIMEOUT=60             # 命令超時(秒)

你喺項目入面用緊邊啲 LLM 提供商?歡迎喺評論區分享下配置心得。

常見故障排查

遇到問題先跑 hermes doctor,佢會喺終端輸出一個診斷報告。官方文檔提供咗一個完整嘅診斷命令鏈:

hermes doctor
→ hermes model
→ hermes setup
→ hermes sessions list
→ hermes --continue
→ hermes gateway status

常見問題對照表:

症狀
原因
修復
空回覆或亂碼
提供商認證或模型選擇錯誤
重跑 hermes model
自定義端點返回垃圾數據
base URL 錯誤或唔係 OpenAI 兼容
先喺獨立客戶端驗證端點
網關啟動但收唔到消息
Bot token 或白名單唔完整
重跑 hermes gateway setup
無法恢復舊會話
切換咗 profile 或會話未保存
hermes sessions list
 檢查

另外留意 Windows 嘅支持狀態。官方文檔明確標註原生 Windows 仍然係 Early Beta,推薦用 WSL2。如果喺 Windows 上遇到莫名其妙嘅問題,轉去 WSL2 係一個排查方向。

4. 進階最佳實踐

工具集生態圖
工具集生態圖

圖 5:9 大核心工具集生態與關係

Prompt 緩存優化策略

之前提到系統提示詞嘅三層架構有緩存考量,實際使用中可以再優化:

stable 層盡量保持唔變。 身份、工具指導呢啲內容一旦確定就唔好成日改。每次修改都會令緩存失效,增加 token 消耗。

context 層按項目切換。AGENTS.md 和 .cursorrules 可以放喺項目根目錄,切換項目時自動生效,唔需要手動更新配置。咁樣比起每次都修改 system_message 參數更加優雅。

volatile 層交俾框架管理。 記憶快照、用戶畫像呢啲內容由框架自動更新,唔需要手動幹預。如果發現上下文膨脹得太快,可以檢查 hermes_state.py 入面嘅 SessionDB(基於 SQLite FTS5)係咪正常壓縮歷史會話。

工具集精細控制

工具並行執行嘅上限係 8 個 worker。喺複雜任務入面,如果 Agent 同時觸發大量工具調用,可能出現資源爭用。透過 enabled_toolsets 和 disabled_toolsets 精細控制:

# 只啓用 Web 搜索和終端工具
agent = AIAgent(
    enabled_toolsets=["web""terminal"]
)

# 禁用瀏覽器自動化(減少 token 消耗)
agent = AIAgent(
    disabled_toolsets=["browser"]
)

從源碼嚟睇,各工具集之間係獨立嘅,可以自由組合。但係 delegation(子代理委派)同 code_execution(代碼執行)建議搭配使用 - 子代理執行代碼之後,結果可以被主代理直接利用,形成完整嘅執行-反饋鏈路。

停用唔常用嘅工具集仲有一個隱藏好處:減少發送畀 LLM 嘅 tool schema 體積。每個工具嘅 JSON Schema 都會佔用上下文空間,40+ 工具嘅 schema 加埋唔係細數目。按場景裁剪工具集,等於變相增加咗可用上下文。

供應鏈安全考量

Hermes Agent 喺 2026 年 5 月 12 日經歷咗一次供應鏈安全事件(官方叫 Mini Shai-Hulud 蠕蟲事件),之後採取咗嚴格嘅依賴管理策略。

所有核心依賴使用精確版本鎖定==X.Y.Z),唔接受版本範圍。mistralai PyPI 包已被隔離移除。呢個做法犧牲咗一啲靈活性,但係從安全角度嚟睇係合理嘅。

如果透過貢獻者路徑安裝,建議喺 git clone 後檢查 pyproject.toml 入面嘅依賴版本,確認冇俾人篡改。pyproject.toml 大約 268 行,核心依賴部分可以快速掃描。

多後端部署建議

7 種終端後端覆蓋咗從本地開發到雲端部署嘅場景:

  • local:本地開發調試,默認選項,零配置
  • docker:隔離環境運行,適合 CI/CD 同團隊標準化
  • ssh:遠程服務器執行,適合需要特定硬件嘅場景
  • modal / daytona / vercel_sandbox:雲端按需執行,按用量計費
  • singularity:HPC 環境專用,學術同科研場景

生產環境推薦 Docker 後端,透過 TERMINAL_ENV=docker 配置。本地開發用默認嘅 local 就得。如果團隊有幾個人協作嘅需求,Docker 後端配合統一嘅工具集配置,可以確保每個人跑出嚟嘅行為一致。

總結

Hermes Agent 嘅設計有幾個值得留意嘅點。

分層架構做得清楚。 System Prompt 三層分離、配置文件分離、工具集獨立註冊 - 每一層都有明確嘅職責邊界。呢種設計對調試友好,出問題時可以快速定位到具體層。

但門檻唔算低。 64K 上下文嘅硬性要求、60 個構造參數、40+ 工具嘅組合配置 - 初次接觸確實需要花時間理解。hermes setup 嚮導雖然可以簡化初始化流程,但係理解底層原理先至可以喺遇到問題時快速排查。

適合誰:需要喺生產環境部署 Agent 嘅團隊、想要深入理解 Agent 架構嘅開發者、需要多平台消息網關(Telegram/Discord/Slack)嘅場景。

唔適合邊啲人:只想快速調用 LLM API 嘅輕度用戶、對 Agent 概念唔熟嘅入門者。

從源碼分析嚟睇,Hermes Agent 嘅工程完成度相當高。核心循環保持簡潔,能力透過分層組合擴展,呢個係一個成熟嘅工程選擇。如果你正在評估 Agent 框架,值得花時間跑通佢嘅 Quickstart。

你覺得 Hermes Agent 嘅三層 Prompt 設計對其他 Agent 框架有冇參考價值?歡迎喺評論區講下你嘅諗法。

好啦,多謝你睇我嘅文章,如果鍾意可以點讚轉發俾有需要嘅朋友,我哋下一期再見!敬請期待!


🚩 2026 年「術哥無界」系列實戰文檔 X 篇原創計劃 第 119 篇,Hermes Agent  最佳實戰「2026」系列第 2 篇

大家好,歡迎來到 術哥無界 | ShugeX | 運維有術

我是術哥,一名專注於 AI 編程、AI 智能體、Agent Skills、MCP、雲原生、AIOps、Milvus 向量數據庫的技術實踐者與開源佈道者

Talk is cheap, let's explore。無界探索,有術而行。

Hermes Agent 架構概覽圖
Hermes Agent 架構概覽圖

圖 1:Hermes Agent 核心架構與關鍵數據概覽

Hermes Agent v0.14.0 的定位很明確:一個自進化 AI Agent 框架。它不是簡單的 API 封裝,而是內置了學習閉環 - 能從任務經驗中提煉可複用的 skill,並在後續使用中自我修正。

翻了一圈官方文檔和源碼,發現幾個數字挺扎眼的:30+ LLM 提供商、40+ 內置工具、7 種終端後端。但初次接觸的人很容易被這些數字淹沒,跑個 Quickstart 都可能卡住。

這篇文章從源碼出發,把 Hermes Agent 的核心架構拆清楚,再一步步說明怎麼正確配置和運行。

說明:本文內容基於 Hermes Agent 源碼(NousResearch/hermes-agent)v0.14.0 和官方 Quickstart 文檔分析整理而成,源碼分析基於筆者本地倉庫版本,尚未在生產環境中完成全場景驗證。文中的配置模板和參數建議僅供參考,實際效果請以你的業務數據和環境測試結果為準。如果有實際使用經驗,歡迎在評論區分享交流。

1. 核心機制:三層 Prompt 與思考-行動循環

System Prompt 三層架構示意圖
System Prompt 三層架構示意圖

圖 2:System Prompt 三層架構 — stable/context/volatile 分層設計

Hermes Agent 的核心不是某個花哨的功能,而是它的分層設計哲學。理解了這套設計,後面的配置和調試就不會抓瞎。

System Prompt 三層架構

系統提示詞在 agent/system_prompt.py 中組裝,分為三層:

  • stable(穩定層):Agent 身份(由 SOUL.md 或默認身份定義)、工具使用指導、技能提示、環境提示、平台提示。這些內容在 Agent 生命週期內基本不變。
  • context(上下文層)AGENTS.md.cursorrules 等上下文文件 + 調用方傳入的 system_message。這一層隨項目或場景切換而變化。
  • volatile(易變層):記憶快照、用戶畫像、外部記憶提供者塊、時間戳/會話/模型/提供商信息。每一輪對話都可能不同。

這個設計的核心考量是緩存命中率。系統提示詞在每個會話中只構建一次並緩存,後續輪次複用 - 對上游 LLM 提供商的 prefix cache 友好,能明顯減少重複 token 的計費。

對於做過多輪對話系統的開發者來說,這個設計應該不陌生。很多 Agent 框架每輪都重建完整 system prompt,導致緩存全部失效。Hermes 把不變的部分(stable)和頻繁變化的部分(volatile)分開,這是一個值得借鑑的工程決策。

Agent Loop:思考-行動循環

Agent Loop 流程圖
Agent Loop 流程圖

圖 3:Agent Loop 思考-行動循環流程

對話循環的核心在 agent/conversation_loop.py(約 3900 行)。精簡後的邏輯如下:

while (api_call_count < self.max_iterations
       and self.iteration_budget.remaining > 0) \
       or self._budget_grace_call:
    if self._interrupt_requested:
        break
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        tools=tool_schemas
    )
    if response.tool_calls:
        for tool_call in response.tool_calls:
            result = handle_function_call(
                tool_call.name,
                tool_call.args,
                task_id
            )
            messages.append(tool_result_message(result))
        api_call_count += 1
    else:
        return response.content

循環邏輯清晰:發送消息,檢查是否有工具調用,有則執行並繼續循環,沒有則返回最終響應。

有意思的是,這個號稱自帶學習閉環的 Agent 框架,核心循環不到 10 行代碼。複雜的能力來自外圍的工具系統、提示詞組裝和記憶管理,而不是循環本身的複雜度。這是一種刻意的設計選擇 - 循環保持簡潔,能力通過組合擴展。

幾個關鍵參數值得關注:

  • max_iterations 默認 90,控制工具調用的迭代次數上限
  • iteration_budget 提供更細粒度的預算控制
  • _budget_grace_call 允許預算耗盡後額外執行一次,避免任務中途截斷
  • 工具調用使用線程池並行執行,上限 8 個 worker

工具自動發現機制

工具系統採用註冊模式。每個 tools/*.py 文件在導入時調用 registry.register() 自動註冊,不需要手動維護工具列表。

model_tools.py 中的 discover_builtin_tools() 觸發發現過程,toolsets.py 定義了 _HERMES_CORE_TOOLS 列表,即所有平台共享的基礎工具集,約 40+ 個工具。工具必須歸屬於某個 toolset 才能被 Agent 使用 - 這套設計讓工具的啓停變得很靈活。

核心工具集包括:web(搜索和內容提取)、terminal(命令執行)、file(文件操作)、browser(瀏覽器自動化,13 個工具)、code_execution(Python 腳本執行)、delegation(子代理委派)、skills(技能管理)、memory(持久化記憶)、todo(任務規劃)。

2. 源碼級快速上手

安裝方式對比

Hermes Agent 提供三種安裝路徑,適用場景不同:

方式
命令
適用場景
一鍵安裝
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
快速體驗,Linux/macOS/WSL2/Termux
pip 安裝
pip install hermes-agent && hermes postinstall
已有 Python 環境
貢獻者路徑
git clone
 + ./setup-hermes.sh
需要修改源碼或閲讀代碼

一鍵安裝器會自動處理 uv、Python 3.11、Node.js、ripgrepffmpeg 等依賴。如果選擇貢獻者路徑,源碼目錄結構如下:

hermes-agent/
├── run_agent.py          # AIAgent 核心類(~4100 行)
├── model_tools.py        # 工具編排層
├── toolsets.py           # 工具集定義
├── cli.py                # 交互式 CLI(~11k 行)
├── agent/                # Agent 內部模塊
│   ├── system_prompt.py  # 系統提示詞組裝
│   ├── conversation_loop.py  # 對話循環
│   └── prompt_builder.py # 提示詞構建器
├── tools/                # 工具實現(自動發現)
├── gateway/              # 消息網關
└── plugins/              # 插件系統

AIAgent 核心接口

AIAgent 類在 run_agent.py 中,構造函數接收約 60 個參數。日常使用只需要關注兩個接口:

# 簡單接口:返回最終響應字符串
response = agent.chat("幫我分析這段代碼的性能問題")

# 完整接口:返回 final_response + messages
result = agent.run_conversation(
    user_message="分析代碼",
    system_message="你是一個代碼審查專家",
    conversation_history=[],
    task_id="review-001"
)

構造函數中幾個關鍵參數:

AIAgent(
    base_url=None,          # LLM 端點
    api_key=None,           # API 密鑰
    provider=None,          # 提供商標識
    model="",               # 模型名稱
    max_iterations=90,      # 工具調用迭代上限
    enabled_toolsets=None,  # 啓用的工具集
    disabled_toolsets=None  # 禁用的工具集
)

不過大多數情況下不需要直接構造 AIAgent,CLI 和網關會自動處理初始化。

CLI 核心命令

hermes              # 交互式 CLI 對話
hermes --tui        # 現代 TUI 界面(推薦)
hermes setup        # 一站式配置嚮導
hermes model        # 選擇 LLM 提供商和模型
hermes tools        # 配置啓用的工具
hermes config set   # 設置單個配置項
hermes gateway      # 啓動消息網關
hermes doctor       # 診斷問題
hermes --continue   # 恢復上次會話

按照官方 Quickstart 的推薦路徑,hermes setup 然後運行真實聊天驗證響應,是最直接的入門方式。如果已經知道要用哪個提供商,直接 hermes model 選模型更快。

官方文檔還提供了一個快速路徑表,按目標選擇入口:

目標
第一步
下一步
本機運行
hermes setup
運行真實聊天驗證響應
已知提供商
hermes model
保存配置,開始聊天
機器人/常駐服務
hermes gateway setup
連接 Telegram/Discord/Slack
本地/自託管模型
hermes model
 自定義端點
驗證端點、模型名、上下文長度

3. 環境與配置避坑指南

配置文件結構圖
配置文件結構圖

圖 4:配置分離原則 — .env 安全區域 vs config.yaml 共享區域

Hermes Agent 的配置遵循分離原則:密鑰和令牌放 ~/.hermes/.env,非機密設置放 ~/.hermes/config.yaml。這個分離不是隨便做的 - .env 文件可以設置嚴格權限(chmod 600),而 config.yaml 可以加入版本控制共享給團隊。

三個配置加載器服務於不同運行場景:

加載器
使用者
位置
load_cli_config()
CLI 交互模式
cli.py
load_config()
CLI 子命令
hermes_cli/config.py
直接 YAML 加載
網關運行時
gateway/run.py

64K 上下文:容易踩的硬性門檻

這是新手遇到頻率很高的問題。Hermes Agent 要求模型至少 64,000 tokens 的上下文窗口,低於這個值的模型在啓動時會被直接拒絕。

為什麼不設低一點?考慮到系統提示詞三層架構 + 工具 schema + 對話歷史的 token 消耗,64K 是一個務實的選擇。但代價也很明顯 - 一些輕量模型和小參數模型直接被排除在外。

本地模型需要手動設置上下文長度:

# llama.cpp
./main --ctx-size 65536

# Ollama
ollama run model_name -c 65536

環境變量配置

.env.example 列出了 20+ 個 LLM 提供商的密鑰配置。以下是常用的幾個:

# LLM 提供商(選一個即可)
OPENROUTER_API_KEY=sk-or-...    # OpenRouter,200+ 模型
GOOGLE_API_KEY=AIza...          # Google AI Studio
DEEPSEEK_API_KEY=sk-...         # DeepSeek

# 工具密鑰(按需配置)
EXA_API_KEY=...                 # Exa AI 搜索
FIRECRAWL_API_KEY=...           # Firecrawl 爬蟲

# 終端配置
TERMINAL_ENV=local              # 後端類型
TERMINAL_TIMEOUT=60             # 命令超時(秒)

你在項目中用的是哪些 LLM 提供商?歡迎在評論區聊聊配置心得。

常見故障排查

遇到問題先跑 hermes doctor,它會在終端輸出一份診斷報告。官方文檔提供了一個完整的診斷命令鏈:

hermes doctor
→ hermes model
→ hermes setup
→ hermes sessions list
→ hermes --continue
→ hermes gateway status

常見問題對照表:

症狀
原因
修復
空回覆或亂碼
提供商認證或模型選擇錯誤
重跑 hermes model
自定義端點返回垃圾數據
base URL 錯誤或非 OpenAI 兼容
先在獨立客戶端驗證端點
網關啓動但無法收消息
Bot token 或白名單不完整
重跑 hermes gateway setup
無法恢復舊會話
切換了 profile 或會話未保存
hermes sessions list
 檢查

另外注意 Windows 的支持狀態。官方文檔明確標註原生 Windows 仍為 Early Beta,推薦使用 WSL2。如果在 Windows 上遇到莫名其妙的問題,切換到 WSL2 是排查方向。

4. 進階最佳實踐

工具集生態圖
工具集生態圖

圖 5:9 大核心工具集生態與關係

Prompt 緩存優化策略

前面提到系統提示詞的三層架構有緩存考量,實際使用中可以進一步優化:

stable 層儘量保持不變。 身份、工具指導這些內容一旦確定就不要頻繁修改。每次修改都會導致緩存失效,增加 token 消耗。

context 層按項目切換。AGENTS.md 和 .cursorrules 可以放在項目根目錄,切換項目時自動生效,不需要手動更新配置。這比每次都修改 system_message 參數要優雅。

volatile 層交給框架管理。 記憶快照、用戶畫像這些內容由框架自動更新,不需要手動干預。如果發現上下文膨脹過快,可以檢查 hermes_state.py 中的 SessionDB(基於 SQLite FTS5)是否正常壓縮歷史會話。

工具集精細控制

工具並行執行的上限是 8 個 worker。在複雜任務中,如果 Agent 同時觸發大量工具調用,可能出現資源爭用。通過 enabled_toolsets 和 disabled_toolsets 精細控制:

# 只啓用 Web 搜索和終端工具
agent = AIAgent(
    enabled_toolsets=["web""terminal"]
)

# 禁用瀏覽器自動化(減少 token 消耗)
agent = AIAgent(
    disabled_toolsets=["browser"]
)

從源碼來看,各工具集之間是獨立的,可以自由組合。但 delegation(子代理委派)和 code_execution(代碼執行)建議搭配使用 - 子代理執行代碼後,結果能被主代理直接利用,形成完整的執行-反饋鏈路。

禁用不常用的工具集還有一個隱性好處:減少發送給 LLM 的 tool schema 體積。每個工具的 JSON Schema 都會佔用上下文空間,40+ 工具的 schema 加起來不是小數目。按場景裁剪工具集,等於變相增加了可用上下文。

供應鏈安全考量

Hermes Agent 在 2026 年 5 月 12 日經歷了一次供應鏈安全事件(官方稱為 Mini Shai-Hulud 蠕蟲事件),之後採取了嚴格的依賴管理策略。

所有核心依賴使用精確版本鎖定==X.Y.Z),不接受版本範圍。mistralai PyPI 包已被隔離移除。這個做法犧牲了一些靈活性,但從安全角度看是合理的。

如果通過貢獻者路徑安裝,建議在 git clone 後檢查 pyproject.toml 中的依賴版本,確認沒有被篡改。pyproject.toml 約 268 行,核心依賴部分可以快速掃描。

多後端部署建議

7 種終端後端覆蓋了從本地開發到雲端部署的場景:

  • local:本地開發調試,默認選項,零配置
  • docker:隔離環境運行,適合 CI/CD 和團隊標準化
  • ssh:遠程服務器執行,適合需要特定硬件的場景
  • modal / daytona / vercel_sandbox:雲端按需執行,按用量計費
  • singularity:HPC 環境專用,學術和科研場景

生產環境推薦 Docker 後端,通過 TERMINAL_ENV=docker 配置。本地開發用默認的 local 即可。如果團隊有多人協作的需求,Docker 後端配合統一的工具集配置,能確保每個人跑出來的行為一致。

總結

Hermes Agent 的設計有幾個值得關注的點。

分層架構做得清晰。 System Prompt 三層分離、配置文件分離、工具集獨立註冊 - 每一層都有明確的職責邊界。這種設計對調試友好,出問題時能快速定位到具體層。

但門檻不算低。 64K 上下文的硬性要求、60 個構造參數、40+ 工具的組合配置 - 初次接觸確實需要花時間理解。hermes setup 嚮導雖然能簡化初始化流程,但理解底層原理才能在遇到問題時快速排查。

適合誰:需要在生產環境部署 Agent 的團隊、想要深入理解 Agent 架構的開發者、需要多平台消息網關(Telegram/Discord/Slack)的場景。

不適合誰:只想快速調用 LLM API 的輕度用戶、對 Agent 概念不熟悉的入門者。

從源碼分析來看,Hermes Agent 的工程完成度相當高。核心循環保持簡潔,能力通過分層組合擴展,這是一個成熟的工程選擇。如果你在評估 Agent 框架,值得花時間跑通它的 Quickstart。

你覺得 Hermes Agent 的三層 Prompt 設計對其他 Agent 框架有沒有參考價值?歡迎在評論區聊聊你的看法。

好啦,謝謝你觀看我的文章,如果喜歡可以點贊轉發給需要的朋友,我們下一期再見!敬請期待!