
n8n 和 Make.com 工作流程的微調工具呼叫
用微調的本地模型替換 n8n 或 Make.com 工作流程中的 OpenAI 節點。相同的工具路由、相同的結構化輸出、零 API 成本。以下是確切的模式——從工作流程日誌中擷取訓練資料到通過 Ollama 部署。
你有一個可以運作的 n8n 工作流程。客戶發送消息,OpenAI 節點決定要採取哪個操作,工作流程相應地分支。查詢訂單、檢查狀態、發起退款、升級給人工。每天運行 500 次。OpenAI 帳單是 $450/月,還在上漲。
以下是完全消除這個成本的模式:從現有工作流程執行中擷取訓練資料,在你的特定工具 schema 上微調小型模型 ,使用 Ollama 在本地部署,並用指向 localhost 的 HTTP Request 節點替換 OpenAI 節點。
相同的工作流程。相同的路由邏輯。相同的結構化輸出。零 API 成本。
架構
大多數 n8n AI 工作流程中的當前模式:
Webhook → OpenAI 節點(工具選擇)→ Switch 節點 → 操作分支
替換方案:
Webhook → HTTP Request(本地 Ollama)→ Switch 節點 → 操作分支
唯一變更的節點是 AI 決策點。下游的一切——Switch 節點、操作分支、資料庫寫入、郵件發送——保持完全不變。
微調模型的工作是狹窄的:接收用戶消息,以 JSON 輸出工具名稱和參數。它不需要是通用助手。它不需要寫詩或摘要文件。它需要為你的特定工具分類意圖並擷取參數。
範例:8 工具客戶支援工作流程
我們將介紹一個有八個工具的真實工作流程:
| 工具 | 功能 | 觸發範例 |
|---|---|---|
lookup_order | 通過 ID 或郵件查找訂單 | "我的訂單 ORD-48291 在哪裡?" |
check_status | 獲取當前訂單狀態 | "我的訂單已發貨了嗎?" |
initiate_refund | 啟動退款流程 | "我想要退款" |
update_address | 更改收貨地址 | "我搬到 123 Oak St 了" |
send_notification | 發送郵件/SMS 給客戶 | "你能給我發一封收據郵件嗎?" |
check_inventory | 檢查產品可用性 | "你們有藍色小工具的庫存嗎?" |
apply_discount | 對訂單應用優惠碼 | "我有一個優惠碼 SAVE20" |
escalate_to_human | 轉接給人工客服 | "讓我和一個人說話" |
在 n8n 中,這個工作流程看起來像:Webhook 觸發器、帶工具定義的 OpenAI 節點、基於工具名稱的 Switch 節點,以及八個分支,各自執行適當的操作。
OpenAI 節點每次執行費用 $0.02-0.04,取決於提示長度和模型。每天 500 次執行,僅 路由決策每月就花費 $300-600。
第一步:從工作流程日誌中擷取訓練資料
n8n 儲存每次工作流程運行的執行資料。這是你的訓練資料來源——配對了實際有效的工具呼叫的真實用戶消息。
在 n8n 中,進入工作流程的執行記錄並篩選成功的運行。每次執行包含輸入(用戶消息)和 OpenAI 節點的輸出(工具選擇 + 參數)。
匯出這些資料。你可以使用 n8n API 或 Code 節點來擷取它:
// n8n Code 節點——從執行歷史中擷取訓練對
const executions = await this.helpers.httpRequest({
method: 'GET',
url: 'http://localhost:5678/api/v1/executions',
headers: { 'X-N8N-API-KEY': 'your-api-key' },
qs: { workflowId: 'your-workflow-id', status: 'success', limit: 1000 }
});
const trainingPairs = executions.data.map(exec => {
const webhookData = exec.data.resultData.runData['Webhook'][0];
const openaiData = exec.data.resultData.runData['OpenAI'][0];
return {
userMessage: webhookData.data.main[0][0].json.body.message,
toolCall: openaiData.data.main[0][0].json.tool_calls[0]
};
});
return trainingPairs;
這給你真實的輸入-輸出對。如果你以每天 500 次執行運行了一個月的工作流程,那就是 15,000 個標記範例。已經足夠了。
篩選品質: 刪除用戶消息為空的執行、工具呼叫之後在下游分支中出現錯誤的執行(表示錯誤的路由決策),或工作流程被手動更正的執行。
第二步:格式化以進行微調
將你擷取的對轉換為標準 JSONL 訓練格式:
{"messages": [{"role": "system", "content": "You are a customer support router. Given a customer message, call the appropriate tool. Available tools: lookup_order, check_status, initiate_refund, update_address, send_notification, check_inventory, apply_discount, escalate_to_human."}, {"role": "user", "content": "Where's my order ORD-48291?"}, {"role": "assistant", "tool_calls": [{"function": {"name": "lookup_order", "arguments": "{\"order_id\": \"ORD-48291\"}"}}]}]}
在系統消息中包含完整的工具 schema。在所有範例中保持相同——這是你在推理時將使用的相同系統提示。
對於 8 工具工作流程,目標達到以下分佈:
| 工具 | 訓練範例 | 比例 |
|---|---|---|
| lookup_order | 150 | 14% |
| check_status | 150 | 14% |
| initiate_refund | 100 | 9% |
| update_address | 80 | 7% |
| send_notification | 80 | 7% |
| check_inventory | 100 | 9% |
| apply_discount | 80 | 7% |
| escalate_to_human | 60 | 6% |
| 無工具(負向) | 300 | 27% |
| 總計 | 1,100 | 100% |
分佈應該大致與你的真實流量匹配。如果 lookup_order 佔你 30% 的請求,它應該有最多的範例。如果你沒有足夠的工具真實資料,使用合成擴展填補空缺。
第三步:微調模型
對於工具呼叫路由,7B 或 8B 模型已經足夠了。Qwen 2.5 7B 和 Llama 3.3 8B 都效果很好。你在訓練帶有結構化輸出的分類器,而不是通用助手。
使用 Ertas,微調流程是:
- 上傳你的 JSONL 資料集
- 選擇基礎模型(工具呼叫推薦 Qwen 2.5 7B)
- 配置 LoRA——rank 16,alpha 32,針對所有注意力層
- 以學習率 2e-4 訓練 3 個 epoch
在單個 GPU 上訓練時間:1,100 個範例需要 30-45 分鐘。輸出是一個 LoRA 適配器——一個疊加在基礎模型上的 50-100MB 文件。
如果你還沒有足夠的真實執行資料,先從你的工具 schema 構建一個合成資料集,訓練初始模型,部署它,幾週後用真實資料重新訓練。
第四步:使用 Ollama 部署
以 GGUF 格式匯出你的微調模型並建立 Ollama Modelfile:
FROM ./qwen2.5-7b-customer-tools.gguf
PARAMETER temperature 0.1
PARAMETER num_ctx 2048
SYSTEM """You are a customer support router. Given a customer message, call the appropriate tool. Available tools: lookup_order, check_status, initiate_refund, update_address, send_notification, check_inventory, apply_discount, escalate_to_human. Respond with a JSON tool call or a conversational message if no tool applies."""
ollama create customer-router -f Modelfile
ollama run customer-router
測試它:
curl http://localhost:11434/api/chat -d '{
"model": "customer-router",
"messages": [{"role": "user", "content": "I want a refund for ORD-55123, it was defective"}],
"stream": false
}'
預期輸出:
{
"tool_calls": [{
"function": {
"name": "initiate_refund",
"arguments": "{\"order_id\": \"ORD-55123\", \"reason\": \"defective\"}"
}
}]
}
在有 16GB RAM 的機器上的回應時間:200-400ms。足夠快可以用於即時工作流程執行。
第五步:替換 n8n 中的 OpenAI 節點
在你的 n8n 工作流程中,用 HTTP Request 節點替換 OpenAI 節點:
HTTP Request 節點配置:
- 方法:POST
- URL:
http://localhost:11434/api/chat - Body(JSON):
{
"model": "customer-router",
"messages": [
{
"role": "user",
"content": "={{ $json.body.message }}"
}
],
"stream": false,
"format": "json"
}
來自 Ollama 的回應包含相同結構的工具呼叫。你的下游 Switch 節點解析工具名稱並路由到正確的分支——與以前完全一樣。
更新 Switch 節點以從 Ollama 回應格式而不是 OpenAI 回應格式解析。工具名稱在相同位置;你可能需要稍微調整 JSON 路徑。
成本比較
以下是不同自動化量的真實計算:
| 每日執行次數 | 每月總計 | OpenAI 成本(GPT-4o-mini) | OpenAI 成本(GPT-4o) | 微調本地 | 每月節省 |
|---|---|---|---|---|---|
| 100 | 3,000 | $60/月 | $90/月 | $0/月 | $60-90/月 |
| 500 | 15,000 | $300/月 | $450/月 | $0/月 | $300-450/月 |
| 2,000 | 60,000 | $1,200/月 | $1,800/月 | $0/月 | $1,200-1,800/月 |
| 5,000 | 150,000 | $3,000/月 | $4,500/月 | $0/月 | $3,000-4,500/月 |
「微調本地」列是 $0,因為在你自己的硬體上推理沒有邊際成本。你已經在為伺服器付費了。即使每天 5,000 次執行,推理的電力成本也可以忽略不計——每月不到 $5。
一次性成本:微調計算(在雲 GPU 上 $5-20,或在 Ertas 上免費),加上建立資料集和測試的 4-8 小時時間。
每天 100 次執行的損益平衡:不到一週。
Make.com 等效方案
相同的模式在 Make.com 中也有效。用調用本地 Ollama 端點的 HTTP 模組替換 OpenAI 模組。
HTTP 模組配置:
- URL:
http://your-server-ip:11434/api/chat - 方法:POST
- Body 類型:Raw(JSON)
- 請求內容:
{
"model": "customer-router",
"messages": [{"role": "user", "content": "{{1.body.message}}"}],
"stream": false,
"format": "json"
}
如果你的 Make.com 實例在雲中運行而你的 Ollama 實例在本地運行,你需要暴露 Ollama 端點。選項:Cloudflare Tunnel(免費)、ngrok 或 VPN。對於生產環境,使用帶訪問策略的 Cloudflare Tunnel 來限制誰可以訪問端點。
Make.com 的定價模型實際上使節省更加顯著。你按操作付費,OpenAI 模組算作一個操作,加上你單獨向 OpenAI 付費。使用調用本地端點的 HTTP 模組,你仍然為 Make.com 操作付費,但完全消除了 OpenAI 成本。
可靠性提升
這是被低估的好處。成本節省引人注目,但可靠性往往是更大的收益。
通用 GPT-4 模型偶爾會幻覺工具名稱。它可能輸出 search_order 而不是 lookup_order,或 refund_order 而不是 initiate_refund。對人類來說足夠接近,但對你的 Switch 節點來說足夠錯誤以使其崩潰。
在你的八個工具名稱上專門訓練的微調模型永遠不會幻覺第九個。它在訓練資料中只見過這八個名稱。輸出空間被限制在你的實際 schema 中。
在客戶支援工作流程的測試中,微調 7B 模型達到:
- 工具選擇準確率: 94-97%(vs 帶提示工程的 GPT-4o-mini 89-93%)
- 參數擷取準確率: 91-95%(vs GPT-4o-mini 87-92%)
- Schema 合規性: 99.5%+(vs GPT-4o-mini 96-98%)
- 幻覺工具名稱: 0%(vs 通用模型 1-3%)
通用模型上的 1-3% 幻覺率聽起來不多,直到你每天運行 500 次執行。在 2% 時,那是每天 10 次失敗執行——10 個遇到錯誤的客戶,10 個支援票,10 次手動干預。
處理邊緣案例
不匹配任何工具的消息怎麼辦?模型需要進行對話式回應。
在你的訓練資料中包含負向範例——像「你們的營業時間是什麼?」或「謝謝幫助!」這樣的消息,不應該觸發任何工具。訓練模型為這些消息輸出對話式回應。
可能匹配多個工具的消息怎麼辦?「我想退貨並更改我的地址」——這需要兩個工具呼叫。如果你的工作流程支援順序執行,則訓練多工具範例;或者訓練模型選擇主要意圖並在後續輪次處理第二個。
新工具怎麼辦?當你向工作流程添加第九個工具時,你需要重新訓練。將新工具的範例添加到你 的資料集中,包含將其與類似現有工具區分開的負向範例,並運行快速微調。使用 LoRA,重新訓練需要 30-45 分鐘。你可以在午餐時間完成。
Ship AI that runs on your users' devices.
Ertas early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
遷移清單
以下是遷移清單:
- 匯出執行歷史從你的 n8n/Make.com 工作流程(最少 500 次成功運行)
- 格式化為 JSONL,帶有正確的工具呼叫結構和 20% 負向範例
- 微調 7B 模型,使用 LoRA(30-45 分鐘)
- 部署到與工作流程引擎相同的機器或網路上的 Ollama
- 替換 OpenAI 節點為指向 localhost:11434 的 HTTP Request 節點
- 測試在切換生產流量之前使用 50 個真實消息
- 監控前 1,000 次執行,將工具選擇準確率與 OpenAI 基準進行比較
- 每月重新訓練使用新的執行資料以持續改善
最難的部分是第 1 步——習慣在你自己硬體上運行的 7B 模型可以匹配 GPT-4 對你特定工具的路由準確率的想法。一旦你看到測試結果,其餘的就是直接的管道工作。
你的工作流程繼續運行。你的自動化繼續工作。你的 API 帳單降至零。
延伸閱讀
- How to Replace the OpenAI Node in n8n with a Fine-Tuned Model — 帶節點逐一配置截圖的步驟指南。
- Make.com with Local AI: The Complete Integration Guide — 將 Make.com HTTP 模組連接到本地 Ollama 端點的完整介紹。
- n8n + Ollama + Fine-Tuned Models: The Zero-Cost Stack — 在沒有持續成本的單一伺服器上運行完整自動化堆疊的架構指南。
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
Keep reading

Stop Paying GPT-4 to Call Your APIs: Fine-Tune a Local Tool-Calling Model
You're paying frontier-model prices for what amounts to pattern matching and JSON generation. A fine-tuned 8B model handles tool calling at 90%+ accuracy for zero per-query cost. Here's the math and the migration path.

Building AI Agents That Work Offline: Fine-Tuned Models for Edge Automation
AI agents that depend on cloud APIs are fragile, expensive, and privacy-risky. Fine-tuned tool-calling models running on edge hardware create agents that work offline, respond instantly, and keep data local.

Make.com + Local AI: Automations That Don't Bill You Per Token
Connect Make.com to a locally-running AI model and eliminate per-token API costs from your automations. Step-by-step setup guide for no-code AI builders.