我不是来唱衰n8n的,但"n8n已死,Skills当立"这句话,最近实在刷到太多次了。一开始我以为是营销号又在制造焦虑,结果点进去一看,讨论得还真有点东西。今天不站队,就从一个实际用过n8n搭过不少自动化流程、也折腾过一阵AI Agent Skills的人的角度,把这场"范式之争"掰开揉碎讲清楚。这篇文章会覆盖三块:n8n作为可视化工作流引擎真正的问题出在哪、Skills这套"AI Agent技能包"到底是怎么运作的、以及作为一个普通开发者/自动化爱好者,你手里的项目到底该用哪个,或者怎么把它们揉在一起用。不管你是已经在用n8n跑业务流程,还是刚听说Skills这个词准备入坑,这篇文章应该都能给你一些参考。
先说我的立场:n8n没有死,它只是从"主角"退位成了"配角"。真正死掉的,是"用拖拽节点就能搞定所有自动化"那个想当然的思维模式。而Skills也确实不是新瓶装旧酒,它解决的恰恰是n8n最不擅长的那类问题。下面一个个说。
1. 先聊聊"n8n已死"这句话是怎么传出来的
1.1 我为什么对n8n感情复杂:它确实解决过问题
从2021年开始,我就拿n8n当主力自动化工具用。那时候它最吸引人的是三件事:一是可视化编排,把几十个API串成一个流程,确实比写胶水代码快;二是集成丰富,什么HTTP Request、Slack、Notion、Google Sheets、Telegram,基本都是拖一个节点填一下凭证就能跑;三是自托管很友好,Docker一键起,数据在自己手里,不用像Zapier那样按任务量付费,跑多少都心里有数。
我印象很深的一个项目,是帮一个朋友搭了一套"小红书自动发布"的流程(对,就是那个热词里出现的场景)。需求其实很简单:从Notion数据库里读选题和文案,经过一个审核表格确认,然后调用发布接口定时发出去。用n8n做起来非常顺手:Notion节点拉数据,IF节点做状态判断,HTTP Request节点调发布API,最后再用一个Schedule Trigger控制每天三个时间点触发。那段时间我对n8n是真爱,甚至逢人就安利"把重复劳动都交给它"。
所以当我在一些技术社区看到"n8n已死"的话题时,第一反应是又有人搞标题党。但看多了之后,我发现真正讨论的人并不是在诅咒这个项目,而是在表达一种更深层的焦虑:n8n这套"画流程图"的自动化范式,在AI Agent面前似乎有点落伍了。这个焦虑不是空穴来风,下面我想认真说说n8n架构里那些让我越来越难受的地方。
1.2 但n8n的"死穴"藏在架构里
用久了n8n你会发现,它的核心是DAG(有向无环图),也就是把节点连成一条确定的执行路径。这个设计在传统API编排里非常合理:数据从A节点流到B节点,每条边都是明确的,出错可以重试,分支也可以预先定义。但问题也恰恰出在这个"预先定义"上。
第一个死穴是静态流程面对动态分支时会卡死。什么叫动态分支?就是"下一步怎么走,取决于上一步的结果由大模型判断"这类逻辑。举个例子,我想让AI先判断用户发来的售后消息属于"退款""换货"还是"投诉",然后走不同的处理节点。在n8n里我得先接一个HTTP节点调用LLM API,再解析返回结果,然后写三个IF节点去匹配关键字,才能把路由掰到三个分支里。节点一多,图就变得非常臃肿,调试的时候要不就是漏了一个判断,要不就是模型返回的格式稍微变一下,整个流程就断在解析那一步。
第二个死穴是配置地狱。n8n的节点虽然多,但参数封装得很深。一个HTTP Request节点,要处理认证方式、Query参数、Header、Body格式、响应解析,每个都要手动去填;到了分页、重试、限流这些企业级需求,几乎每个节点都得单独加逻辑。我在一个项目里光是配置一个"带分页的CRM接口同步",就折腾了两个晚上。等到流程终于跑通,我发现自己写出来的配置文件比用代码实现还要长。这就很讽刺了:本来是为了省事,结果配置本身变成了维护负担。
第三个死穴是跨流程的数据状态管理。n8n不是没有变量机制,但真要跨多个流程共享数据,你得依赖外部数据库或者文件存储。比如我在一个自动发帖流程里,希望每次发布完把"已发布内容清单"存下来,供另一个周报流程读取。n8n里实现这个要么用Redis节点,要么自己维护一张数据库表,然后每个流程都要手动去读去写。最初拖节点很爽,到了这种需要"记忆"和"状态"的地方,就完全露馅了。
1.3 "已死"说的不是产品层面,是范式层面
我必须澄清一点:n8n官方还在持续更新,集成数量还在涨,GitHub上star也很健康,"死"这个字是不准确的。但从使用理念上看,它确实在经受一场范式层面的冲击。
传统工作流自动化,本质上是"把流程画出来,机器照着执行"。这套逻辑背后有一个假设:流程的每个分支都是可以预先枚举的。但在LLM出现之后,很多需求变成了"流程本身也是动态的"——用户输入千变万化,走的路径自然也应该千变万化。n8n也意识到了这一点,所以后来加了AI Agent节点、加了LangChain相关的集成,试图让自己跟上时代。可问题是,当你把AI当成一个节点塞进DAG里,整个图结构反而变得更僵硬了,决策能力、返工路径、工具调用的灵活性全被限制在"图"这个载体里。
真正让"n8n已死"这个说法有市场的,是同一个时间里冒出来的另一套方案:AI Agent的技能机制,也就是Skills。这套机制我后面会详细讲,先给个类比:n8n像给员工发一张流程图,告诉他"先做A,再做B,遇到C就走D";Skills像给员工发一个工具箱和一份使用说明,告诉他"这些工具是干这个的,遇到什么问题自己挑合适的"。后者明显更贴近"智能体"的形态——不再由人预设路线,而是让模型根据任务动态选择工具、组织步骤。这确实是一场语义上的革命,或者说,是从"编排"到"涌现"的转弯。
2. Skills是怎么从AI Agent生态里长出来的
2.1 先分清几组概念:Agent、Tool、Skill、工作流
现在社区里概念满天飞,什么Agent、Tool、Agent Skill、Workflow,很多人已经绕晕了。我尽量用大白话理一遍。
- **Workflow(工作流)**就是n8n那一套:一个有向图,节点是操作,边是数据流,执行路径固定。
- **Agent(智能体)**可以理解为一个"能自己思考的调度器"。它接收一个任务目标,然后自己决定调用哪些工具、按什么顺序调用、要不要重复尝试。
- **Tool(工具)**是Agent可以调用的一组函数,比如"发送邮件""搜索网页""执行SQL"。在代码实现里,Tool通常是一个函数加上一份JSON Schema描述。
- Agent Skill(技能),更准确说应该叫"技能包",是把一个领域的操作方法和经验打包起来,以Markdown/脚本/配置的形式交给Agent。它跟Tool的区别在于,Skill更强调"指导":不仅告诉Agent能做什么,还包含怎么做、什么时候用、有哪些坑要避免。
光看字面还不够直观,我画个对比表(避免Mermaid,直接用文字表述):
| 对比维度 | n8n工作流 | AI Agent Skill |
|---|---|---|
| 核心思路 | 人先设定路径 | 模型动态决策 |
| 灵活性 | 低,适合确定流程 | 高,适合开放任务 |
| 维护难度 | 流程复杂后图很乱 | 技能包相对独立,好维护 |
| 适用场景 | 固定接口编排、定时任务 | 需要理解语义、多分支决策 |
| 失败处理 | 节点重试、异常分支 | 模型自行调整策略重试 |
| 可组合性 | 弱,跨流程靠外部存储 | 强,Agent可串多个Skill |
我说得直白一点:n8n适合"流程已经很明确"的场景,Skills适合"流程本身要靠AI摸索"的场景。两者不是替代关系,而是面向不同复杂度层级。
2.2 Skills到底长什么样:从SKILL.md说起
Anthropic在2024年年底正式给Claude引入了Agent Skills的概念之后,整个社区才开始大规模讨论"Skills"这个词。现在大家熟悉的Claude Skills,基本结构是一个目录里放一个或多个文件,核心是SKILL.md,里面写清楚这个技能的使用场景、核心方法、步骤指南、注意事项,甚至可以带示例。目录里还可以放辅助脚本、提示词模板、参考配置文件。
举个例子,一个"前端开发Skills"(这个热词在市面上特别火)的目录可能长这样:
frontend-dev/ ├── SKILL.md ├── code-review-prompt.md ├── debug-tips.md └── scripts/ ├── scan_for_errors.py └── extract_selectors.pySKILL.md里写的不只是"你会做前端",而是把自己积累的实战经验结构化。比如对于"重构旧页面"这个任务,技能文档里可能会写明:先分析现有代码结构,再梳理依赖关系,然后分模块重构,最后跑测试。这些指导会被注入到大模型的上下文里,等于把一位前端老手的经验"装进"了Agent。
这里有一个关键点需要解释清楚:Skills并不增加模型的推理能力,它增加的是模型做某件事时的有效上下文。模型还是那个模型,但多了一份"怎么做才专业"的手册,它就不会乱来。我试过把一份调试GPS定位问题的技能包丢给Claude,它在排查步骤上明显比裸模型更有章法,知道先看权限、再看服务端返回、最后才怀疑硬件问题。这就是技能包的价值。
2.3 为什么Skills能解决n8n解决不了的问题
先说动态选择。n8n里"调用哪个节点"是写死的,而Agent里"调用哪个Skill"是模型根据任务动态决定的。比如同一个任务,用户说要生成一份周报,Agent可以自己决定是调用"数据分析Skill"还是"文案生成Skill",甚至两个都用。这个"选择权"的转移,是根本性的差异。
第二个原因是上下文效率。n8n每次执行都是加载整条流程信息,不会区分"这次任务需要什么"。Skills则不一样:它通常按需加载,Agent先根据用户描述判断需要哪个技能,再把对应技能的文档注入上下文。我之前见过一个Rust实现的Agent框架,就是靠一套"技能索引+按需注入"的机制,让每个请求只加载必要的提示词和工具描述,token消耗控制得很好。这对企业应用来说非常重要,毕竟上下文越长、成本越高,不必要的技能文档全塞进去只会浪费钱。
第三个原因是可组合性。把一个复杂任务拆成几个技能,Agent就可以像搭积木一样组合使用。比如"小红书爆款文案"这个技能,可以跟"图片生成"技能和"定时发布"技能组合成一个完整的内容运营Agent。在n8n里,这种跨系统组合要靠流程节点去连;在Skills体系里,模型会自己判断该调用哪几个技能、按什么顺序调用。组合的灵活性不是一个量级。
第四个原因是分发和复用。n8n的流程本质上是一堆JSON,导出之后别人导入,逻辑很难看懂。Skills则是一个目录+一份Markdown,天然适合放进Git仓库。现在社区里已经出现不少免费的Skills库、Skills下载平台,你可以把别人整理好的技能包直接拉下来,稍微改改就能用。这个分发模型比"导出整个流程模板"要轻量得多。
3. 范式之争:流程编排 vs 能力涌现
3.1 编排范式的底层逻辑:先画蓝图,再执行
n8n代表的是典型的老派自动化思路,跟工业流水线同源。生产线怎么走,工位怎么排,每个工位做什么,都是工程师提前定好的。好处是确定性强、容易审计、出问题能定位到具体节点;坏处是所有的不确定性都要在设计阶段消化掉。
我记得有一次接到一个需求:要把一个多语言客服流程自动化。最初的设想是,用户发来一个问题,系统先翻译成英文,再让GPT生成回复,翻回原语言,然后通过IM接口发出去。如果用n8n做,这套链路确实能跑通。但当我试图把"如果用户问的是订单物流"、"如果用户情绪激烈"这些分支全加进去,图就膨胀得没法看了。因为整个范式默认了"所有情况都是预知的",而真实世界的用户问题根本预知不完。
这就是编排范式的天花板:它不是不好,而是只适合"你已经知道所有路径"的系统。一旦路径空间大到无法枚举,流程图本身就成了最大的维护负担。传统自动化工具能覆盖的场景,在AI时代其实是被压缩了:很多原本需要人工设计分支的判断,现在完全可以让模型自己完成。
3.2 涌现范式的底层逻辑:给工具箱,而不是给图纸
Skills背后的逻辑是"涌现"(Emergence):不预先规定Agent该怎么走,只给它一系列能力,让它在解决问题过程里自己"涌现"出路径。
这个思想在工程上有个很直观的类比:以前你请一个实习生干活,会给一份详细的SOP;现在你请一个资深顾问,只会给他一堆工具和一份说明书。顾问不需要你教他"第一步干什么,第二步干什么",他拿到需求之后会自己规划。Skills的粒度刚好介于"工具函数"和"完整应用"之间:它不解决一个具体的API调用,而是解决一类任务的方法论。
我举个实际例子。假设我要做一个"Django项目自动开发"的Agent(市面上已经有不少人在做这类东西)。如果用n8n,我得把"建项目、建模型、写视图、写路由、跑迁移"这些步骤全部变成节点,每一步都是固定的。但用Skills就不一样:我只需要给它几个技能包,比如"Django项目脚手架Skill"、"数据库模型设计Skill"、"API接口开发Skill"、"代码审查Skill"。Agent接到"帮我开发一个博客后端"这个任务之后,自己会决定先调哪个Skill、生成什么内容、怎么验证结果。你可能觉得这不就是我们平时写的prompt吗?但Skill和prompt的关键区别在于:prompt是给用户看的,Skill是给Agent决策用的,它带着明确的条件判断路由,让Agent知道在什么场景下激活、该用什么参数、会遇到什么坑。
3.3 两类场景的边界怎么划:我给的建议
这段时间我反复踩坑后的经验是:不要非此即彼,先判断你的需求是哪类。
优先用n8n这类工作流引擎的场景:
- 流程固定,分支有限,且需要精确控制在5个节点以内的;
- 对审计和重试有硬性要求的,比如订单处理、对账、审批流;
- 需要定时触发、Webhook接收、多系统同步的集成类任务;
- 团队里没有机器学习背景的人,但能看懂流程图。
优先用Agent Skills的场景:
- 输入是自然语言、结果不确定的,比如"生成一份销售分析报告";
- 需要多个工具联动、且选择顺序不固定的,比如"搜索资料+总结+发邮件";
- 希望沉淀领域经验,比如"如何做竞品分析"、"如何排查服务端错误";
- 调用外部API数量很多,且参数经常变,写死n8n节点会维护到吐的场景。
我见过不少团队的错误做法是:用n8n硬接LLM,然后把所有判断都塞进IF节点里,结果流程图表比蜘蛛网还复杂。反过来也有团队用Agent做定时同步,结果每天跑出来的数据格式不一致,还得人肉兜底。说到底,工具选型的核心是看"不确定性"落在哪:流程不确定,用Agent;数据格式不确定,用流程引擎做清洗和校验;两者都有,就分层处理。
3.4 警惕"取代"话术:n8n和Skills其实可以融合
回归标题"n8n已死,Skills当立",这个说法最误导人的地方在于:它把两种范式搞成了"取代关系"。实际上更合理的形态是融合——n8n负责"外壳"和"稳定层",Skills负责"判断"和"生成层"。
具体怎么融合?我目前在生产环境里常用的一个架构是这样:n8n作为整个自动化系统的调度中枢,负责接收事件、管理定时任务、执行固定流程;遇到需要智能判断的节点时,通过HTTP请求调用一个自建的Agent服务;这个Agent服务内部挂载了一系列Skills,模型根据任务上下文选择技能并执行;最后把结构化结果返回给n8n,由n8n负责后续的存储、通知、重试。
这样分工的好处是:稳定的部分享受n8n的可视化编排和失败重试机制,不确定的部分交给Agent和Skills去"涌现"。说白了,n8n从来没有失去意义,它只是退到"执行层";Skills也并不是要替代所有自动化工具,它管的是"决策层"。这两层耦合在一起,才是我们这些搞实战的人在日常项目里真正需要的东西。
4. 从n8n思维迁移到Skills思维:我的实操建议
4.1 哪些自动化可以直接换Skills,别犹豫
如果你现在手头有几个流程让你心累,我建议优先迁移这几类:
第一类是"需要生成内容再发布"的流程。前面提到的小红书自动发布,如果只是定时发固定文案,留在n8n没问题;但如果你希望每天基于热点自动生成不同风格的文案,再用n8n就要写大量拼prompt和解析的节点了,直接换成Skills轻松得多。给Agent挂一个"小红书爆款文案"技能,再挂一个"图片生成"技能,它自己就能产出完整内容,你只需要留一个发布接口。
第二类是"根据自然语言输入做多步处理"的流程。比如用户发来一个需求单,你要拆解需求、评估排期、分配人员、生成工单。这类任务用n8n硬做,要枚举所有可能的需求类型,显然不合理;用Skills就会让Agent先把需求分类,再根据分类走对应的处理逻辑。
第三类是"领域经验沉淀"型的需求。前端开发技能、后端调试技能、SQL调优技能、竞品调研技能,这些本质上是把方法论教给Agent。你把这些经验写成Skill,它就能在每次任务里稳定复现。相比之下,在n8n里沉淀经验就非常别扭,因为n8n的节点是操作步骤,不是思考方法论。
4.2 手写一个最小Skill:从零开始5分钟上手
很多人一说Skills就觉得很复杂,其实一点也不神秘。以目前Claude和各大Agent框架支持的SKILL.md格式为参考,我通常按下面这个模式来写。
先创建一个目录,比如叫weekly-report-skill,里面放一个SKILL.md,结构长这样:
--- name: weekly-report-generator description: 生成项目周报。适合在用户要求“写周报”、“汇总本周工作”时使用,输入为本周工作要点或原始信息,输出为结构化周报Markdown。 --- # 周报生成技能 ## 适用场景 - 用户提供了本周的工作内容、项目进展、指标数据 - 用户要求输出一份简洁、清晰的周报 ## 执行步骤 1. 梳理用户提供的信息,归类为“项目进展”、“风险与问题”、“下周计划”三个板块。 2. 对每个板块的内容进行结构化整理,保留关键数据。 3. 生成Markdown格式的周报,开头摘要不超过三句话。 4. 如果没有用户提供数据,必须主动询问,不允许编造。 ## 注意事项 - 周报里的数据必须引用用户提供的原始数字,不能自己估算。 - 风险板块需要给出影响程度评级(高/中/低)。就这么简单。关键是description字段写得够具体,模型才能判断什么时候激活这个技能。写完SKILL.md后,你可以把这份技能放到Agent的skills目录里,或者在引入Agent时用/skills命令通过平台安装。不同的Agent框架加载方式略有差异,但整体思路一致:技能就是一个带说明文档的方法包。
如果你需要更复杂的技能,还可以把Shell脚本或Python脚本挂进来,用SKILL.md里的步骤调用它们。比如一个"自动挖洞技能"(安全从业者用的)可能需要在SKILL.md里写明先用什么扫描工具、再解析输出,最后生成报告。但我不建议一开始就把技能写得太复杂,先写一个能用的最小版本,跑通了再逐步加内容,否则调试成本很高。
4.3 把Skills挂进n8n或者独立Agent:几种常见的接入方式
有了Skill之后,怎么把Agent接进自动化系统?我分享一下我验证过的三条路径,前两条基于常见的Agent能力和n8n的灵活扩展,第三条是最省事的方案。
路径一:n8n调外部Agent服务。在n8n里加一个HTTP Request节点,请求你自建Agent服务的API,这个Agent服务里挂载好Skills。n8n把用户输入和上下文传过去,Agent经过技能选择和执行,返回结构化结果。这个方案最灵活,代价是要自己维护一个Agent服务,适合对性能和私有化要求高的团队。
路径二:n8n的AI Agent节点直接写系统提示词挂技能。n8n里本身有AI Agent节点,你可以在System Prompt里把Skill文档全文写进去。严格说这不算真正的"按需加载",但小规模场景下很实用,不用额外维护服务,适合一次只用一个技能、上下文不太长的场景。如果技能文档很大,建议只把关键步骤摘要写进去,控制token消耗。
路径三:直接用独立Agent应用,通过Webhook衔接。比如我最近在跑一个内部工具,就用独立Agent加Skills处理用户请求,再把结果通过Webhook发回n8n触发后续动作。这种All-in-Agent的玩法,适合团队已经在用Agent开发、想快速验证流程的场景。
我个人建议,如果你是企业级部署,优先考虑第一或第三条,因为单独把n8n的AI节点作为主力决策器,遇到复杂的多技能调用会显得笨拙。保持"编排归编排、决策归决策"的职责分离,后续维护会舒服很多。
4.4 常见问题与排查技巧实录:踩过这些坑,心里就有底了
用Skills的过程中,我踩过的坑比用n8n多得多。这里记录几个高频问题,给你当速查表用。
问题一:Agent死活不触发某个Skill。大概率是description写得不行。我发现很多人把description当成文档摘要,写一堆形容词,比如"这是一个用来生成报表的技能,功能强大"。模型根本不清楚什么时候该用它。正确的写法是给条件:当用户要求生成销售周报或有原始数据需要汇总时使用。把触发条件写清楚,命中率会大幅提升。另外还要注意,不要让太多技能description里出现同一组关键词,否则模型会选错。
问题二:技能脚本输出格式不稳定,下游解析崩。这是最让人头疼的。解决思路是"脚本回归测试+格式强约束"。我给每个带脚本的Skill都加了一个测试用例,用假数据跑一遍脚本,确保输出JSON的字段名和类型稳定。如果发现模型返回的格式偶尔不遵守,就在SKILL.md的注意事项里加一句"必须输出JSON,字段如下,禁止额外说明"。模型对这类硬要求的遵守度比想象中高。
问题三:上下文越用越长,费用膨胀。很多人的Skills文档写得像一本教科书,动辄几千行。日常任务根本不需要那么多指导,Agent反而会因为上下文太长而注意力涣散。我的建议是:把SKILL.md控制在200行以内,只写骨架步骤和核心禁忌;详细模板和完整脚本放到附加文件里,按需再取。这样既保留了技能深度,又控制了token消耗。
问题四:权限和安全问题。Skill里的脚本如果有网络请求、文件读写、甚至执行系统命令,就要特别小心。尤其是从网上下载的Skills,先看清楚里面有没有可疑的shell命令,再在容器或沙箱里运行。不要因为方便直接拿来用,安全意识还是要有的——毕竟这个行业里最不缺的就是供应链攻击。
问题五:版本管理混乱。Skill也是代码,同样需要版本管理。我的习惯是把所有技能包放在同一个Git仓库里,每次改动都写清变更说明,加一个轻量级的CI脚本,用来检查SKILL.md的格式和脚本能不能运行。用Rust、Python还是Node其实无所谓,关键是"可重复、可回溯"。
最后再分享一个我自己的真实心法:不要被"新概念"带跑。n8n也好,Skills也罢,本质上都只是"自动化"这把刀的不同刀刃。n8n解决的是确定性问题,Skills解决的是不确定性问题,两者结合才是完整的工具箱。我现在的项目基本都是一半n8n、一半Agent加Skills:n8n负责定时触发、系统同步、失败重试这些脏活;Agent加Skills负责语义理解、内容生成、动态决策这些巧活。每次看到那些"XX已死"的话术,我都会想,与其纠结谁取代谁,不如把手头的问题拆清楚,让每种工具回到原本擅长的那块去。这也算是我这几年折腾自动化工具,最后沉淀下来的一点体会。