iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
AI 自動化

從單一 Agent 到 Supervisor 架構:用 n8n 實作會自己分工的 Multi-Agent AI 部門系列 第 3

Day 03|n8n 快速上手:用 Docker 架好 n8n、接上 Ollama,與 AI Agent 節點的三個插槽

  • 分享至 

  • xImage
  •  

今天把環境架起來:用 Docker 跑 n8n、接上 Ollama,順便認識 AI Agent 節點底下的幾個插槽。

版本說明:本系列固定使用 n8n 2.38.7。n8n 的 AI 節點改版非常頻繁,同一個選項在不同版本可能換名字或換位置,看到畫面不一樣的話,先確認版本。

為什麼選 n8n

做 Multi-Agent,呼叫模型本身不難,最花時間的是搞清楚資料到底怎麼在 Agent 之間流動。n8n 每個節點吃進什麼、吐出什麼,在 Execution 裡都看得到,除錯「主管到底派給誰」的時候非常好用。

代價是彈性不如直接寫程式。什麼情況該換成 LangGraph 這類框架,留到 Day 30 討論。

用 Docker 啟動 n8n

先建 volume,再啟動容器:

docker volume create n8n_data
docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n -e GENERIC_TIMEZONE="Asia/Taipei" -e TZ="Asia/Taipei" docker.n8n.io/n8nio/n8n:2.38.7

在我的筆電上大約 18 秒就能用了,打開 http://localhost:5678 建立管理員帳號即可。

這個指令裡有幾個參數說明一下:

  • -v n8n_data:/home/node/.n8n:workflow、憑證、執行紀錄都存在這裡。沒掛 volume 的話,容器刪掉資料就一起消失。
  • GENERIC_TIMEZONE:n8n 排程用的時區。沒設的話,Schedule Trigger 會以 UTC 計算。
  • n8n:2.38.7:刻意不用 latest。AI 節點改動快,版本寫死才能確保畫面跟文章一致。

小提醒:如果你以前玩過 n8n,電腦裡可能已經有名為 n8n_data 的 volume,上面的指令會直接沿用裡面的資料。我自己的電腦就遇到這個狀況,想從乾淨的環境開始,換一個 volume 名稱就好。

備份加密金鑰

n8n 會用一把金鑰加密所有憑證。之後搬機器或還原備份,少了這把金鑰,憑證就得全部重建。容器第一次啟動後可以這樣查看:

docker exec n8n cat /home/node/.n8n/config

輸出是一段 JSON,裡面的 encryptionKey 請存進密碼管理器,不要進版控,也不要出現在截圖裡。

讓容器裡的 n8n 連到本機的 Ollama

這是最多人卡關的地方。n8n 跑在容器裡,Ollama 跑在你的電腦上,而容器內的 localhost 指的是容器自己,不是你的電腦。

在 n8n 新增 Ollama 憑證時,Base URL 要填:

http://host.docker.internal:11434

https://ithelp.ithome.com.tw/upload/images/20260917/201838687OHQ9oOcba.png

host.docker.internal 是 Docker Desktop 提供的特殊主機名稱,會指向宿主機。我在 Windows 上實測,就算 Ollama 只監聽 127.0.0.1,容器用這個網址也連得到。在 Linux 上直接用 Docker Engine 的話,要在 docker run 加上 --add-host=host.docker.internal:host-gateway(這個情況我沒有實測)。

AI Agent 節點的插槽

在畫布新增 AI Agent 節點,節點下方會出現幾個連接點,n8n 稱為子節點(sub-node)。

https://ithelp.ithome.com.tw/upload/images/20260917/20183868MZb75DMWD9.png

Chat Model 是唯一必填的插槽,決定這個 Agent 用哪個模型。每個 Agent 可以接不同的模型,這一點在 Day 26 談成本時會很重要。

Memory 決定 Agent 記不記得之前的對話。不接的話,每次執行都是全新開始。測試階段用 Simple Memory 就夠了,Session ID 怎麼設是個學問,Day 05 會專門討論。

Tool 可以接很多個。接的是 Data table Tool 這類資料存取工具,就是昨天說的型態 B;接的是 AI Agent Tool,或指向另一個 workflow 的 Call n8n Workflow Tool,就是型態 C。工具參數欄位可以寫 {{ $fromAI('order_id', '訂單編號', 'string') }},意思是這個參數交給模型填,n8n 會把它轉成工具的參數定義交給模型。

還有一個預設看不到的插槽:把 AI Agent 的「Require Specific Output Format」打開,才會多出 Output Parser。接上 Structured Output Parser 並給一份 JSON Schema,Agent 就會輸出結構化 JSON。Agent 之間要交換資料全靠它,Day 14 會詳細說。

Ollama 節點的兩個選項,我原本誤會了

Ollama Chat Model 節點的 Options 裡,有 Context Length 和 Enable Thinking 兩個選項。一開始我以為「預設就是 2048、預設就開 Thinking」,實際翻了節點原始碼並測試後,發現要分兩種情況看。

n8n 只會把你「有加進 Options」的選項送給 Ollama。沒加的話,就用 Ollama 伺服器自己的預設值。

我用一份約 2,100 tokens 的 system prompt(主管的 prompt 加上 FAQ),問本機的 qwen3.5:0.8b「prompt 最開頭提到的公司名稱是什麼」:

Context Length 的設定 模型實際讀到的 tokens 回答
沒加這個選項,用 Ollama 預設(我這台是 4096) 2,146 好豆選物(對)
有加選項,保留欄位帶出的 2048 1,026 出貨(錯)
有加選項,改成 16384 2,146 好豆選物(對)

中間那一列是最危險的情況。prompt 超過長度時,Ollama 會直接截掉前面的內容,而 system prompt 的規則正好都寫在最前面。模型照樣回答,n8n 也不會出現任何錯誤訊息。

所以要嘛不加這個選項,並確認你的 prompt 加上對話紀錄不會超過 Ollama 的預設長度;要嘛加了就調到夠大。這個系列的主管 prompt 加上 FAQ、信件內文、工具回傳的資料,很容易超過 4096,所以我一律加上 Context Length 並設為 16384。

Enable Thinking 的情況類似。沒加這個選項時,n8n 不會送 think 參數,gemma4:cloud 實測不會進入思考模式。加了選項、保留預設的開啟狀態,差異就很明顯:

設定 耗時 輸出 tokens 分類結果
Enable Thinking 關閉 1.6 秒 208 order_status
Enable Thinking 開啟 7.0 秒 1,137 order_status

答案一樣,時間多了 4 倍。本機小模型更誇張:在沒有顯卡的筆電上,qwen3.5:0.8b 關閉 Thinking 回答一題約 16 秒,開啟之後超過 5 分鐘都沒回應,請求直接逾時。分類、查單這類任務用不到長篇推理,所以本系列的 Chat Model 一律關閉 Thinking,Sampling Temperature 設 0.2。

Hello Agent:確認環境是通的

用 5 分鐘做一個最小的 Agent:

  1. 新增 Chat Trigger(When chat message received)。
  2. 接一個 AI Agent,在 Options 加入 System Message:
你是好豆選物的客服助理。請用繁體中文、禮貌但簡潔地回答。
不確定的事情,直接說「這部分我需要確認」,不要猜。
  1. Chat Model 接 Ollama Chat Model,選 gemma4:cloud,Options 加入 Context Length 16384、Enable Thinking 關閉、Sampling Temperature 0.2。
  2. Memory 接 Simple Memory,Session ID 保持 Connected Chat Trigger Node,Context Window Length 設 5。
  3. 打開聊天視窗,先問「你們的豆子怎麼保存?」,再追問「那要放多久?」。

我這邊的測試結果:

對話 問題 回答重點
同一個對話 你們的豆子怎麼保存? 避光、陰涼、密封,不建議放冰箱
同一個對話 那要放多久? 全豆建議烘焙後 1 個月內、咖啡粉 2 週內
新開一個對話 那要放多久? 請提供產品名稱

同一個對話裡,它知道「那」指的是豆子;換一個新對話就不知道了,代表 Memory 正常運作。

另外有個小插曲:它說「不建議放冰箱」,但好豆選物的 FAQ 寫的是「開封後放陰涼處或冷藏」。模型用它自己的常識回答,剛好跟公司規定打架。之後需要一位專門查 FAQ 的知識專員,這就是很直接的理由。

小結

環境重點:Docker 記得掛 volume、設時區、寫死版本、備份加密金鑰;容器連本機 Ollama 用 host.docker.internal。比較容易踩到的是 Ollama 節點的 Options,有加才會送出,而 Context Length 欄位帶出的 2048 會讓長 prompt 被無聲截斷。

明天把訂單資料放進 Data table,做出第一版會讀信、會查單、會回信的單兵 Agent。


上一篇
Day 02|你看過的「多 Agent」教學八成是假的:單 Agent、多工具、Multi-Agent 差在哪
下一篇
Day 04|第一版單兵 Agent:一個 Agent 處理所有客服信件
系列文
從單一 Agent 到 Supervisor 架構:用 n8n 實作會自己分工的 Multi-Agent AI 部門9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言