Back to blog
    n8nopenaifine-tuningcase-study

    我用微调模型替换了 n8n 工作流中的每一个 OpenAI 调用

    一位构建者的亲身经历:将 12 个 n8n 工作流从 OpenAI 迁移到本地微调模型。成本、坑点,以及 60 天后的真实结果。

    Edward Xi Yang

    三个月前,我的 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,4008,200800(每个工作流 200 条)
    提取(3 个工作流)6,1504,800600(每个工作流 200 条)
    生成(5 个工作流)5,6003,900750(每个工作流 150 条)

    “清洗”包括去重、丢掉输出明显有问题的执行(这几个月里我手工标记过一些)、修正格式不一致的地方,以及确认每一对输入输出都是自足的,不引用提示词里根本不会出现的上下文。

    最后我得到三份合并好的数据集:

    1. 分类数据集(800 条):输入文本 + 类别或分数标签,覆盖全部 4 个分类工作流。
    2. 提取数据集(600 条):输入文本 + 结构化 JSON 输出,覆盖发票、合同和商品规范化三个工作流。
    3. 生成数据集(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.23.9GPT-4o(略胜)
    会议纪要转行动项3.84.1微调模型
    社交媒体帖子起草4.03.5GPT-4o
    聊天机器人回复3.64.3微调模型
    数据富化3.42.8GPT-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.83.9+0.1
    单次请求平均延迟1,100ms185ms-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,100ms185ms
    遇到的 API 宕机次数(60 天)30
    供应商依赖OpenAI(关键)无(关键)

    原来每月 $487,现在每月 $49.99:$30 的 VPS、$25 的 Ertas,还有数据富化工作流用的 Serper API $5。一年省下 $5,244。

    不过到现在这一步,省钱几乎已经是次要的了。我更看重的是可靠性和自主权。OpenAI 出问题的时候,我的 AI 层照常运转。旧金山有人调一下定价滑块,我的成本也不会跟着变。客户的数据留在我自己的服务器上。

    模型是我的,数据是我的,基础设施也是我的。自从在工作流里用上 AI 以来,我第一次真正拥有了这门生意里最要紧的那部分。

    如果你也在用 n8n 跑带 OpenAI 调用的工作流,每月花超过 $50,这趟迁移值得做。我用了 4 周的业余时间。在我的任务上模型更准,在所有任务上都更快,成本还低 90%。真希望我早半年就动手。


    延伸阅读

    就本文向 AI 提问

    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