AI 工具 12 min read

我原本用 Hermes Agent CLI,後來為什麼換成 LangGraph(遷移覆盤)

系列番外。我這套醫療決策 pipeline 最早不是用 LangGraph,是用 Hermes Agent CLI(NousResearch 2026 年初開源的自主 agent 框架)。Hermes 很強,但強在通用對話助理、會自我學習、接 20+ 平台;而我要的是確定性步驟為主、流程可畫成圖、每步可審計、出錯能精準退件的決策管線。方向不對再強也是錯的工具。這篇覆盤這個選型決策:Hermes 哪裡好、為什麼對我的場景不對、換到 LangGraph 解決了什麼。「用真實專案學 LangGraph」系列 EP6(完結)。

本文目錄 · 9
TL;DR:這是系列番外。我這套醫療決策 pipeline 最早不是用 LangGraph 寫的——是用 Hermes Agent CLI(NousResearch 2026 年初開源的自主 agent 框架)。Hermes 很強,但強在「通用對話助理、會自我學習、接 20+ 平台」這個方向;而我要的是「確定性步驟為主、流程要能畫成圖、每一步可審計、出錯要能精準退件」的決策管線。方向不對,再強也是錯的工具。 這篇覆盤這個遷移決策:Hermes 哪裡好、為什麼對我的場景不對、換到 LangGraph 之後解決了什麼。系列 EP6(完結)。

前五篇從 0 教 LangGraph。這篇回頭講「我為什麼選它」——而選型故事最值錢的部分,往往是「我先選錯了什麼」。

📌 目錄

Hermes Agent CLI 是什麼

Hermes Agent 是 NousResearch 在 2026 年 2 月開源的自主 AI agent,定位是「會跟著你成長的 agent」。它的賣點很有辨識度:

  • 無所不在的 gateway:CLI、Telegram、Discord、Slack、WhatsApp、Email、SMS… 一個 gateway 接 20+ 平台
  • 內建學習迴圈:它會從經驗中自己長出 skill、在使用中改進、主動把知識持久化,跨 session 越用越懂你
  • tool registry:工具自註冊到中央 registry,import 時就 registry.register(),模型自動拿到 schema
  • provider 無關:Nous Portal 接 300+ 模型,/model 隨便切
它是個很好的通用個人 agent——你要一個會用工具、有記憶、能在各平台跟你對話、還會自我進化的助理,Hermes 是漂亮的選擇。

🧠 為什麼我一開始選了 Hermes

很誠實地說:因為它上手快、看起來什麼都能做

我要做醫療血脂決策,第一直覺是「找一個強的 agent 框架,給它工具、給它規則,叫它出建議就好」。Hermes 的 tool registry 很優雅,self-registering 的設計讓我加工具很爽,內建學習迴圈聽起來像是「它會自己越來越懂臨床規則」。

我花了不少時間把它接起來:把算 BMI、查指引、出建議都包成 tool 註冊進去,讓 agent loop 自己決定要呼叫哪個。demo 階段跑得很好。 問題是 demo 跑得好跟 production 撐得住,是兩回事。

🔥 撞牆:通用 agent 不適合確定性 pipeline

把它往真實場景推,問題一個個冒出來。根因只有一個:我要的根本不是「自主 agent」,是「可控的決策管線」。

問題一:流程不可控,agent 自己決定怎麼走

Hermes 的核心是 agent loop——模型自己決定下一步呼叫哪個 tool。這在開放任務很強,但我的流程是固定的八步:載入 → 補指標 → 載規則 → 組 few-shot → LLM 判斷 → 驗證 → 適配 → 存檔。我不要 agent「自己決定」要不要算 BMI、要不要驗證——這些步驟必須每次都按固定順序跑。讓 agent 自由發揮,等於把確定性流程交給機率性的模型去調度,偶爾它就跳過驗證直接給建議。

問題二:確定性步驟被當成「工具」交給 LLM 調度

算 BMI、跑風險公式這些(EP5 講的確定性步驟),在 Hermes 裡是 tool,要靠 agent loop 決定呼叫。但這些根本不該經過 LLM 的判斷——它們是純數學,該無條件執行。把它們做成「LLM 可選擇呼叫的工具」,等於給了 LLM 一個它不該有的選擇權。

問題三:出錯難以精準退件

醫療場景的硬需求:驗證不過要能乾淨退件、噴明確錯誤碼給上游。Hermes 的 agent loop 出問題時,行為是「再想想、再試試別的 tool」——這對開放任務是優點,對我是災難。我要的是 fail fast、可審計的退件路徑(EP3 的 reject),不是一個會自我修復到「看起來像對」的 agent。

問題四:self-improving 在醫療場景是風險不是優點

Hermes 最酷的「自己長 skill、越用越懂你」,在我的場景變成不可控的行為漂移。醫療決策邏輯必須穩定、可版本控制、可稽核——今天跟昨天用同樣輸入要給同樣結果。一個會自我進化的系統,我沒辦法跟稽核交代「為什麼這個 case 它這樣判」。

⚡ 換到 LangGraph 解決了什麼

把同一套需求用 LangGraph 重寫,前五篇教的東西正好對症:

Hermes 的問題LangGraph 怎麼解
流程不可控、agent 自己決定graph 把流程畫死,八步固定順序,我說了算(EP2)
確定性步驟被 LLM 調度純算步驟就是普通 node,無條件執行,LLM 只是其中一個 node(EP5)
出錯難精準退件conditional edge 明確分流 ok/retry/reject,reject 直接 END 噴 422(EP3)
self-improving 行為漂移graph 結構是寫死的 code,可版本控制、可稽核、行為穩定
沒有人工審核關卡interrupt() 第一級 HITL,高風險建議停下來等醫師(EP5)
一句話:Hermes 給你自由,LangGraph 給你控制。 我的場景要的是控制。換過去之後,整套流程變成一張看得懂、測得動、稽核交代得清楚的圖。

🎯 選型框架:什麼時候用哪個

別誤會——這不是說 Hermes 不好,是工具要配場景。給你一張判斷表:

你的需求
通用個人助理、多平台對話、要記憶要自我學習Hermes Agent CLI
開放式任務、agent 自己探索怎麼解Hermes / 標準 agent loop
固定流程、步驟順序要可控LangGraph
確定性步驟為主,只有幾步要 AILangGraph
要精準錯誤處理 / 退件 / 稽核LangGraph
高風險決策要人工審核LangGraph
行為必須穩定、可版本控制LangGraph
呼應 EP1 的選型邏輯:標準 agent loop 撐得住就用高階框架,撐不住、要精細控制流程,就下沉到 LangGraph。Hermes 是更高階、更自主的那一端;我的醫療 pipeline 在光譜的另一端。選錯不是因為 Hermes 爛,是因為我一開始沒想清楚我要的是自由還是控制。

🔧 遷移本身的踩坑

坑一:想「無痛平移」,結果是重寫

我一開始想把 Hermes 的 tool 函式直接搬過來當 LangGraph 的 node。但兩者的心智模型不同——Hermes 的 tool 是「給 agent 選用的能力」,LangGraph 的 node 是「流程裡固定的一站」。tool 函式的簽章、回傳、錯誤處理都要重新設計成 node 的形狀。接受它是重寫,不是平移,反而做得快。

坑二:把 agent 的「自由」當成需求帶過來

重寫初期我還想保留一點「讓某些步驟讓 LLM 自己決定」的彈性。後來發現這就是當初的問題根源——既然選 LangGraph 是為了控制,就該把流程畫死。遷移時要連帶把舊架構的思維包袱丟掉,不然只是換了框架、留了問題。

坑三:低估了「畫圖」這一步的前期成本

LangGraph 要你先想清楚流程才能寫(EP1 說的「上手慢,要先想清楚流程」)。從 Hermes 那種「丟工具給 agent 就能跑」切過來,前期要花時間把八步拆清楚、把 state 設計好。這個前期成本是真的——但它換來的是後期的可控與可維護。慢在前面,省在後面。

❓ 常見問題 FAQ

Q:所以 Hermes Agent CLI 不值得用?
A:完全不是。如果你要的是通用個人 agent、多平台助理、會自我學習的對話夥伴,Hermes 是很棒的選擇,它的 self-improving 跟 gateway 設計很有特色。我換掉它純粹是因為我的場景要的是相反的東西——確定性、可控、可稽核。工具沒有好壞,只有合不合場景。

Q:怎麼一開始就避免選錯?
A:選型前先回答一個問題:你要「自由」還是「控制」? 開放任務、要 agent 自己探索 → 自由 → 自主 agent 框架。固定流程、要可控可審計 → 控制 → LangGraph 這類能把流程畫死的。我當初就是沒先問這題,被「看起來什麼都能做」吸引。

Q:遷移花了多久?值得嗎?
A:重寫比想像久,因為心智模型要轉。但值得——換完之後流程可測、可稽核、行為穩定,這些在醫療場景是硬需求,不是 nice to have。如果你也在「強大但不可控的 agent」上撞牆,早換早解脫。

Q:LangGraph 也能做自主 agent 嗎?還是只能做固定流程?
A:兩者都能。LangGraph 是底層 runtime,你可以用它畫固定流程(像我這套),也可以用它的 conditional edge 做出讓 LLM 決定路線的自主行為,甚至 LangChain 的 create_agent 底層就是 LangGraph 跑的 agent loop。差別在控制粒度——LangGraph 讓你決定要給多少自由,而不是預設全自由。

Q:這系列看完,我該從哪開始動手?
A:回 EP2 把那個會跑的最小 graph 親手打一遍,跑起來。State / Node / Edge 三件事手感有了,後面 conditional edge、reducer、LLM node、HITL 都是往上疊。別只讀不寫——LangGraph 的心智模型要靠手指打出來才會長。

🔗 延伸資源

author
陳彥彤

AI 工程師 · AI 顧問。Java 後端 8 年、AI 工程師 2 年。AI 內訓 · AI 導入顧問 · 前後端與雲端培訓。

support

覺得文章有用可以到 GitHub 給個 star,或是透過信箱聊聊 AI 內訓、AI 導入顧問或前後端 / 雲端培訓。

related

相關文章

[AI 教學] · 13min
LangGraph 完整 Pipeline + Human-in-the-loop:8 步決策管線全貌
前四篇的零件——state、node、edge、conditional edge、reducer、LLM 結構化輸出——這篇全部組起來,串成一條完整的醫療 AI 決策 pipeline:載入資料 → 補衍生指標 → 載入規則 → 組 few-shot → LLM 出建議 → 業務驗證 → 適配輸出 → 持久化,中間帶分流重試。然後加上 LangGraph 的殺手級功能 human-in-the-loop:用 interrupt() 在高風險決策點暫停整張 graph,等人點頭才繼續,靠 durable state 讓這件事變簡單。「用真實專案學 LangGraph」系列 EP5。
[AI 教學] · 16min
LangGraph Conditional Edge + Reducer:讓 graph 會分流、會重試
線性 graph 不夠用時你需要兩個東西:Conditional Edge(跑完一個 node 看結果決定下一步去哪——過了往前、沒過退回重試、重試太多次直接退件)跟 Reducer(讓某個 state 欄位累加而不是覆蓋,最典型就是 retry 計數器)。這篇用 add_conditional_edges + router 函式 + Annotated[int, operator.add] 把這兩件事講透,並解釋一個關鍵設計決策:MAX_RETRY 該設多少、為什麼很多嚴肅場景答案是 0。「用真實專案學 LangGraph」系列 EP3。
[AI 教學] · 17min
LangGraph 核心:State / Node / Edge 完整教學(第一個會跑的 graph)
LangGraph 的核心只有三個概念:State(跨步驟共用的狀態)、Node(收 state 回傳要改的欄位的函式)、Edge(把 node 串起來的線)。這篇用血脂決策 pipeline 的真實場景,帶你從 StateGraph 定義、add_node、add_edge 一路到 compile 與 invoke,給一個複製貼上就能跑的最小範例,並講三個新手最常踩的坑:回傳整份 state、忘記接 START/END、在 node 裡 mutate state。「用真實專案學 LangGraph」系列 EP2。