我用微调模型替换了 n8n 工作流中的每一个 OpenAI 调用
一位构建者的亲身经历:将 12 个 n8n 工作流从 OpenAI 迁移到本地微调模型。成本、坑点,以及 60 天后的真实结果。
三个月前,我的 n8n 实例上跑着 12 个工作流,每一个都要调用 OpenAI API,月账单 $487。今天这个数字是 $0。我现在的 AI 总支出是 $55/月:一台 $30 的 VPS 跑 Ollama,再加 $25 的 Ertas。下面是我具体做了什么、哪里出了岔子,以及全本地运行 60 天之后有哪些出乎意料的地方。
我没有机器学习背景,日常就是用 n8n 把各种事情自动化,从客户入职流程到内容生产流水线。我在 2025 年年中开始用 OpenAI 的 API,因为那是给工作流加上智能能力最省事的办法。确实省事,直到账单越涨越高,直到一次限流事故让我的生产工作流瘫痪三个小时,我才意识到:OpenAI 只要改一次 API 政策,我这门生意就可能整个停摆。
这篇文章记录了完整的迁移过程:规划、训练、测试、切换,以及两个月生产使用之后的真实结果。
迁移前的架构
我经营一家小型自动化代理公司。我的 n8n 实例同时承担内部运营和客户项目的工作流。当时在调用 OpenAI API 的是这 12 个工作流:
| # | 工作流 | 使用的模型 | 每日调用量 | 月成本 |
|---|---|---|---|---|
| 1 | 邮件分拣(把收到的邮件分成 6 类) | GPT-4o-mini | ~180 封邮件 | $18 |
| 2 | 线索评分(分析表单提交,给出 1-10 分) | GPT-4o | ~45 条线索 | $32 |
| 3 | 内容摘要(为邮件简报总结文章) | GPT-4o | ~30 篇文章 | $28 |
| 4 | 支持工单分类(路由到对应团队) | GPT-4o-mini | ~120 张工单 | $14 |
| 5 | 发票数据提取(从 PDF 文本中抽取明细行) | GPT-4o | ~200 张发票 | $67 |
| 6 | 会议纪要总结(转录稿转成行动项) | GPT-4o | ~40 场会议 | $45 |
| 7 | 社交媒体内容生成(根据需求简报起草帖子) | GPT-4o | ~25 份简报 | $38 |
| 8 | 客户反馈分析(情感分析 + 主题提取) | GPT-4o-mini | ~90 条反馈 | $12 |
| 9 | 合同条款提取(识别关键条款) | GPT-4o | ~15 份合同 | $52 |
| 10 | 商品描述规范化(统一商品信息) | GPT-4o-mini | ~300 条商品 | $35 |
| 11 | 聊天机器人回复生成(面向客户的支持机器人) | GPT-4o | ~250 次对话 | $98 |
| 12 | 数据富化(根据公司名和网址做调研) | GPT-4o | ~60 家公司 | $48 |
| 合计 | ~1,355 次/天 | $487/月 |
随着客户不断往工作流里加量,这 $487 每月还在以大约 12% 的速度往上走。按这个走势,到夏天就是 $650/月,到年底会超过 $800。
我为什么决定迁移
有三件事把我推过了临界点。
账单在涨。 $487 听上去也许算不上灾难,但我是个小作坊,这笔钱是我除自己工资以外第二大的经营开支。它又跟房租或软件订阅不一样,我没法预测,随着用量在月与月之间上下浮动 15% 到 20%。
那次限流事故。 2025 年 12 月,OpenAI 出现容量问题,某个周二下午延迟飙升、限流报错持续了大约三个小 时。我有三个面向客户的工作流同时开始失败:邮件分拣、支持工单分类和聊天机器人。工单堆积,邮件没人分类,机器人只会返回错误。那个下午我一边跟客户道歉,一边手工处理积压队列。我手上没有任何兜底,整个 AI 层就是一个单点故障。
我想拥有自己的模型。 我把生意建在了别人的基础设施上。我花几个月打磨出来的提示词,一旦背后的模型没了就一文不值。如果 OpenAI 调价、下线某个模型,或者判定我的用法违反条款,我连 B 计划都没有。对一件如此关键的事情来说,这让我无法接受。
迁移计划
我没打算一口气全部迁完。我按任务类型和复杂度把 12 个工作流分成三组:
第 1 组:分类(4 个工作流):邮件分拣、支持工单分类、客户反馈分析、线索评分。输入一段文本,输出一个类别或分数,微调起来最简单。
第 2 组:提取(3 个工作流):发票数据提取、合同条款提取、商品描述规范化。输入非结构化文本,输出结构化数据,复杂度中等。
第 3 组:生成(5 个工作流):内容摘要、会议纪要、社交媒体生成、聊天机器人回复、数据富 化。输出自由格式文本,复杂度最高。
我的计划是按这个顺序推进,每组花大约一周,最后留一周做并行测试和切换。
第 1 周:数据收集
这是整件事里最枯燥的部分。我需要训练数据,也就是每个工作流的输入以及对应的正确输出。
好在 n8n 会保存执行历史。我手上有好几个月的成功执行记录,既有发给 OpenAI 的输入,也有收到的输出。我写了个简单的脚本,把它们导出成 JSONL 文件。
我为每个工作流导出了最近 3 个月的成功执行记录,然后做清洗:
| 工作流分组 | 原始执行数 | 清洗后 | 最终训练集 |
|---|---|---|---|
| 分类(4 个工作流) | 12,400 | 8,200 | 800(每个工作流 200 条) |
| 提取(3 个工作流) | 6,150 | 4,800 | 600(每个工作流 200 条) |
| 生成(5 个工作流) | 5,600 | 3,900 | 750(每个工作流 150 条) |
“清洗”包括去重、丢掉输出明显有问题的执行(这几个月里我手工标记过一些)、修正格式不一致的地方,以及确认每一对输入输出都是自足的,不引用提示词里根本不会出现的上下文。
最后我得到三份合并好的数据集:
- 分类数据集(800 条):输入文本 + 类别或分数标签,覆盖全部 4 个分类工作流。
- 提取数据集(600 条):输入文本 + 结构化 JSON 输出,覆盖发票、合同和商品规范化三个工作流。
- 生成数据集(750 条):输入的需求简报或文本 + 生成结果,覆盖摘要、社交媒体、聊天机器人和数据富化四个工作流。
清洗前后花了大约 6 小时,分散在 3 天里。这活儿一点都不光鲜,可微调模型最后能不能用,全看这一步。垃圾进,垃圾出。
第 2 周:微调
我用 Ertas 微调了三个模型:
模型 1:Qwen 2.5 7B,负责分类。 分类选 Qwen,是因为它推理快,而且结构化输出处理得好。上传 800 条分类数据集,训练用了 35 分钟。我跑了内置评估,留出测试集上一次就拿到 94% 的准确率。说实话我挺意外的,本以为要反复训练好几轮。
模型 2:Llama 3.1 8B,负责提取。 提取需要理解文档结构并产出合法的 JSON,所以我选了参数量稍大的 Llama 作为基座。上传 600 条提取数据集,训练用了 42 分钟。评估显示提取任务准确率 91%。主要的错误集中在边缘情况上:多币种发票,以及排版不常见的合同。
模型 3:Llama 3.1 8B,负责生成。 生成是最难的一类任务,因为“正确”的输出本身就是主观的。我还是用 Llama 3.1 8B,在 750 条数据集上训练了 48 分钟。这里的评估更麻烦,没办法直接比对是否逐字一致。我人工看了 50 条生成结果,大约 82% 可以直接用,14% 需要小改,4% 完全跑偏。
微调总成本:$25 的 Ertas Builder 套餐,这笔钱覆盖了全部三次训练还有富余。总耗时:大约 2 小时的实际操作,再加上训练本身的时间。
三个模型我都导出成了 GGUF 文件。量化到 Q4_K_M 之后,每个大约 4.5 到 5GB。
第 3 周:测试
这是最关键的一周。我在开发机上装好 Ollama,加载三个模型,做并行测试。
每个工作流我都取最近 100 次生产执行,分别用 OpenAI 模型和我的微调模型跑一遍,然后比对输出。
分类结果
| 工作流 | GPT-4o/mini 准确率 | 微调 Qwen 7B 准确率 | 胜者 |
|---|---|---|---|
| 邮件分拣 | 88% | 96% | 微调模型 |
| 支持工单分类 | 85% | 95% | 微调模型 |
| 客户反馈分析 | 90% | 93% | 微调模型 |
| 线索评分(误差在 1 分以内) | 72% | 84% | 微调模型 |
在每一项分类任务上,微调模型都赢过了 GPT-4o-mini。这说得通:微调模型正是拿这些类别、拿我这个领域的样例训练出来的,而 GPT-4o-mini 只能靠一段系统提示词去猜。
线索评分的提升最让我意外。GPT-4o(这个工作流用的是完整版而非 mini,我为它多花了钱)给线索打分很不稳定,同一段线索描述今天给 6 分,明天可能给 8 分。微调模型的一致性要好得多,因为它从 200 条样例里学到了我自己的评分标准。
提取结果
| 工作流 | GPT-4o 准确率 | 微调 Llama 8B 准确率 | 胜者 |
|---|---|---|---|
| 发票提取(全部字段正确) | 76% | 92% | 微调模型 |
| 合同条款提取 | 71% | 88% | 微调模型 |
| 商品描述规范化 | 83% | 95% | 微调模型 |
微调模型依旧全线胜出。提升最大的是发票:GPT-4o 在字段命名的一致性上很吃力,偶尔还会凭空编出数值。微调模型学会了我那套 JSON schema,几乎从不偏离。
合同条款提取是最难啃的一项。有些合同的排版很特别,微调模型没见过。我把这些都记了下来,留作后续补充的训练数据。
生成结果
| 工作流 | GPT-4o 质量(人工 1-5 分) | 微调 Llama 8B 质量 | 胜者 |
|---|---|---|---|
| 内容摘要 | 4.2 | 3.9 | GPT-4o(略胜) |
| 会议纪要转行动项 | 3.8 | 4.1 | 微调模型 |
| 社交媒体帖子起草 | 4.0 | 3.5 | GPT-4o |
| 聊天机器人回复 | 3.6 | 4.3 | 微调模型 |
| 数据富化 | 3.4 | 2.8 | GPT-4o |
生成这一类的结果参差。微调模型在结构可预期的任务上表现突出,比如会议纪要和聊天机器人回复,这两类格式固定,内容又高度贴合我的领域。GPT-4o 则在创意类任务(社交媒体帖子)和需要外部知识的任务(数据富化)上占优。
社交媒体帖子起草这一项,微调模型写出来的东西能用,就是套路化。品牌口吻拿捏得完全准确(它本来就是照着这个训练的),可缺少 GPT-4o 那种花样。反正这些初稿本来就要人过一遍,我觉得可以接受。
数据富化上微调模型追不上 GPT-4o,因为这个任务天然需要关于各家公司的广泛知识。这是唯一一个我认真考虑过继续留在 API 上的工作流,后面会讲我最后怎么处理的。
第 4 周:切换
我开了一台 Hetzner CPX41 VPS:8 vCPU(AMD EPYC)、16GB 内存、240GB NVMe SSD,费用 $30.49/月。装上 Ubuntu 24.04,配好 Ollama,加载三个 GGUF 模型。
我把 n8n 指向 Ollama 端点,不再走 OpenAI API。Ollama 暴露的是兼容 OpenAI 的接口,所以这一步实际上就是在 n8n 的 HTTP Request 节点里改掉 base URL 和 API key。大多数工作流改一行就完事。
我按把握从大到小依次迁移:
第 1-2 天:分类工作流(把握最大)。4 个分类工作流全部切到微调后的 Qwen 模型。OpenAI 仍然并行跑着,充当影子管道:两个模型处理同样的输入,只采用微调模型的输出。
第 3-4 天:提取工作流。3 个全部切换,同样配影子管道。这里重点盯 JSON 解析错误,因为下游工作流依赖干净的结构化输出。
第 5 天:生成工作流(数据富化除外)。5 个里切了 4 个。聊天机器人那个我心里没底,毕竟直接面向客户,影子管道我多跑了 3 天。
第 6-7 天:数据富化。这个最棘手。我的微调模型在公司调研上比不过 GPT-4o 的知识广度,于是我做了个务实的决定,改成混合方案:微调模型负责格式和结构化输出,实际的网络调研数据由 Serper API($5/月)拿到之后再喂给模型。这个工作流的总成本从 $48/月降到了大约 $7/月。
全部切换完成后,我把 OpenAI 的 API key 又留了一周作为手动兜底,一次都没用上。第 14 天,我把它删了。
60 天后的结果
两个月完整的生产使用之后,下面是诚实的对比。
成本
| 指标 | 之前(OpenAI) | 之后(自托管) | 变化 |
|---|---|---|---|
| 每月 AI API 成本 | $487 | $0 | -100% |
| 每月 VPS 成本 | $0 | $30.49 | +$30.49 |
| 每月 Ertas 成本 | $0 | $25 | +$25 |
| 每月 Serper API 成本(数据富化) | $0 | $5 | +$5 |
| 每月 AI 总支出 | $487 | $49.99 | -$437.01 |
| 每年 AI 总支出 | $5,844 | $599.88 | -$5,244.12 |
我每个月省下 $437,一年就是 $5,244。对一家小型自动化代理公司来说,这是笔实打实的钱,差不多相当于一个兼职外包一个月的费用,或者一批新设备,又或者就是净利润。
性能
| 指标 | 之前(OpenAI) | 之后(自托管) | 变化 |
|---|---|---|---|
| 分类准确率均值 | 84% | 95% | +11 个百分点 |
| 提取准确率均值 | 77% | 92% | +15 个百分点 |
| 生成质量均值(1-5 分) | 3.8 | 3.9 | +0.1 |
| 单次请求平均延迟 | 1,100ms | 185ms | -83% |
| 超时/报错率 | 1.8% | 0.1% | -94% |
| 可用性(AI 层) | 99.2% | 99.95% | +0.75 个百分点 |
分类和提取上的准确率提升是真实且持续的。60 天下来,在我这些具体任务上,微调模型的表现一直稳定优于当初的 GPT-4o。
延迟的改善非常夸张,工作流肉眼可见地快了。以前每封邮件要 3 到 4 秒的邮件分拣,现在 500ms 以内就跑完。支持工单分类器 120ms 就有响应。客户也察觉到了,那位把支持机器人跑在我 n8n 实例上的客户说“机器人感觉利索多了”。
最有价值的还是可用性的改善。60 天里零 API 宕机,零限流报错,零“模型过载”响应,工作流就是一直在跑。唯一一次停机是我重启 VPS 做内核更新的那 12 分钟,而且我把它排在了凌晨 3 点。
用量
| 指标 | 之前 | 之后 | 变化 |
|---|---|---|---|
| 每日处理的 AI 请求数 | ~1,355 | ~1,620 | +20% |
| 每月 AI 请求数 | ~40,650 | ~48,600 | +20% |
| 单次请求成本 | $0.012 | $0.001 | -92% |
这 60 天里用量涨了 20%,因为客户往自己的流水线里加了更多数据。放在老方案下,这点增长会把 API 账单推到 $585 以上。换了新方案,我压根没感觉到,VPS 扛下这些额外负载毫不费力。
出乎我意料的地方
本地反而更快
我原以为自托管会更慢,结果差得远。少了到 OpenAI 服务器的网络往返、API 排队时间和冷启动延迟,每一个请求都更快。走 API 要 800ms 的分类请求,本地 120ms 就完成,快了 6.7 倍。
会议纪要那个工作流受益尤其大。一份 45 分钟的会议转录稿走 GPT-4o 要 8 到 12 秒,走本地模型只要 1.5 秒。乘以每月 40 场会议,光这一个工作流每月就省下 7 到 8 分钟的实际等待时间。
微调模型更稳定
这是实际使用中最大的改善。面对完全相同的输入,GPT-4o 的输出在格式、结构甚至正确性上都会变来变去。我下游的 n8n 节点因此堆了一大堆容错逻辑:抓格式变体的正则、处理畸形 JSON 的重试、兜底的解析器。
换成微调模型之后,这些容错代码我删掉了大半。模型在 98% 以上的情况下产出同一种输出格式。我的 n8n 工作流同时变得更简单、更可靠。
有些工作流确实变好了
我对微调模型的预期是“够用就行”,分类和提取 上拿到的却是“明显更好”。线索评分工作流与人工打分的吻合度从 72% 升到 84%,支持工单分类器从 85% 升到 95%。这种幅度的提升实实在在减少了团队的人工复核量。
道理很简单:GPT-4o 想在所有事情上都做得好,我的微调模型只想把一件事做好。在这一件事上,专精的那个赢。
资源占用很低
我本来担心三个模型都加载之后,VPS 的内存或 CPU 会吃紧。实际上 Ollama 的模型加载策略很省:活跃模型常驻内存,其余按需换入。16GB 内存能同时留住两个模型,第三个需要时大约 2 秒就加载完。
日常运行时 CPU 占用平均在 15% 到 20%,批量处理时会冲到 60% 到 70%。在需要升级配置之前,我还有很大余量继续往上加工作流。
如果重来一次,我会怎么改
先从量最大的工作流下手
我从分类开始,因为它最好微调。现在回头看,我应该先做商品描述规范化(每天 300 条)或者聊天机器人(每天 250 次对话)。这两个的 API 成本最高,回本也最快。
一开始就多收集训练数据
分类每个工作流用了 200 条样例,效果不错。但提取和生成,我希望当初用的是 300 到 400 条。合同条款提取模型至今在不常见的合同排版上吃力,我怀疑更多训练数据能解决。我一直在补充样例,打算下个月重新训练一轮。
更早测试边缘情况
我第一批训练数据偏向常见情况。发票提取模型处理标准发票很好,一开始却在多页发票和外币格式上翻车。我本该从一开始就有意把更多边缘情况放进训练集。后来我补了 50 条边缘情况样例并重新训练,边缘情况上的准确率从 61% 跳到了 87%。
从第一天就把监控搭起来
头两周我都在手工检查输出。我应该一开始就搭一个简单的监控看板,自动跟踪准确率、延迟和输出格式的合规情况。后来我用一个单独的 n8n 工作流做到了这件事:抽样 5% 的输出记录下来供复核。真希望第一天就做了。
最终数据
我把账再列一遍,因为这些数字到今天看着还是让我吃惊。
| 之前 | 之后 | |
|---|---|---|
| 每月 AI 支出 | $487 | $49.99 |
| 每年 AI 支出 | $5,844 | $599.88 |
| 每年节省 | $5,244.12 | |
| 准确率(分类均值) | 84% | 95% |
| 准确率(提取均值) | 77% | 92% |
| 平均延迟 | 1,100ms | 185ms |
| 遇到的 API 宕机次数(60 天) | 3 | 0 |
| 供应商依赖 | OpenAI(关键) | 无(关键) |
原来每月 $487,现在每月 $49.99:$30 的 VPS、$25 的 Ertas,还有数据富化工作流用的 Serper API $5。一年省下 $5,244。
不过到现在这一步,省钱几乎已经是次要的了。我更看重的是可靠性和自主权。OpenAI 出问题的时候,我的 AI 层照常运转。旧金山有人调一下定价滑块,我的成本也不会跟着变。客户的数据留在我自己的服务器上。
模型是我 的,数据是我的,基础设施也是我的。自从在工作流里用上 AI 以来,我第一次真正拥有了这门生意里最要紧的那部分。
如果你也在用 n8n 跑带 OpenAI 调用的工作流,每月花超过 $50,这趟迁移值得做。我用了 4 周的业余时间。在我的任务上模型更准,在所有任务上都更快,成本还低 90%。真希望我早半年就动手。
延伸阅读
- n8n 迁移到微调模型的代理公司实操手册:面向代理公司的分步指南,讲怎么把 n8n 工作流从 API 模型迁移到本地微调模型。
- n8n + 本地 LLM:符合 HIPAA 的自动化:如何用本地运行的模型搭建合规的自动化工作流。
- 按 token 计价的隐性成本:为什么按 token 计价的设计天然与你的增长为敌,以及该怎么应对。
Ship AI that runs on your users' devices.
Free plan with 30 credits/mo, no card required. Paid plans from $10/mo USD.
Keep reading
把 n8n 的 OpenAI 节点换成本地模型
导出 n8n 的执行历史,用它微调一个模型,在 Ollama 上跑起来,然后替换掉 OpenAI 节点,让按次执行的 API 账单归零。
从每月 $500 的 OpenAI 账单到 $0:将 n8n 工作流迁移到本地模型
一份面向在 OpenAI API 调用上花费数百美元的 n8n 用户的实用迁移指南。将工作流迁移到本地微调模型,不会破坏任何东西。
n8n + Ollama + 微调模型:零 API 成本自动化技术栈
在 n8n 中构建强大的 AI 自动化,每次执行零成本。本指南展示如何通过 Ollama 将每个 OpenAI 节点替换为本地运行的微调模型。