关于 n8n-validation-expert
n8n-validation-expert 是帮助理解和修复 n8n 验证问题的技能,面向配置和维护工作流的用户。它介绍错误分级、验证配置和工作流的方法,以及自动修复的适用范围。
主要功能
- 01区分错误、警告与建议
- 02说明四种验证配置档
- 03提供常见错误的排查步骤
- 04解释工作流结构验证
- 05说明自动清理与修复限制
适用场景
- 01部署前检查工作流配置
- 02排查无效字段和表达式
- 03识别断开的节点引用
- 04判断验证警告是否可接受
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ovachiever/ droid-tings --skill n8n-validation-expert安装后在 Claude Code 中输入/n8n-validation-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
ERROR_CATALOG.mdFALSE_POSITIVES.mdREADME.md详细介绍
n8n 验证专家
解读和修复 n8n 验证错误的专家指南。
验证理念
尽早验证,频繁验证
验证通常是一个迭代过程:
- 预期会有多轮验证反馈
- 通常需要 2-3 轮“验证 → 修复”
- 平均需要 23s 思考错误、58s 修复错误
关键要点:验证是一个迭代过程,而非一次性操作!
错误严重级别
1. 错误(必须修复)
会阻止工作流执行——必须在激活前解决
类型:
missing_required- 未提供必填字段invalid_value- 值与允许的选项不匹配type_mismatch- 数据类型错误(例如应为数字,却提供了字符串)invalid_reference- 引用的节点不存在invalid_expression- 表达式语法错误
示例:
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required",
"fix": "Provide a channel name (lowercase, no spaces, 1-80 characters)"
}
2. 警告(应该修复)
不会阻止执行——可以激活工作流,但可能存在问题
类型:
best_practice- 建议采用,但并非必需deprecated- 使用了旧版 API/功能performance- 可能存在性能问题
示例:
{
"type": "best_practice",
"property": "errorHandling",
"message": "Slack API can have rate limits",
"suggestion": "Add onError: 'continueRegularOutput' with retryOnFail"
}
3. 建议(可选)
锦上添花——可通过改进提升工作流
类型:
optimization- 可以更高效alternative- 有更好的方法可以实现相同结果
验证循环
遥测数据中的模式
7,841 次出现此模式:
1. Configure node
↓
2. validate_node_operation (23 seconds thinking about errors)
↓
3. Read error messages carefully
↓
4. Fix errors
↓
5. validate_node_operation again (58 seconds fixing)
↓
6. Repeat until valid (usually 2-3 iterations)
示例
// Iteration 1
let config = {
resource: "channel",
operation: "create"
};
const result1 = validate_node_operation({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Error: Missing "name"
// ⏱️ 23 seconds thinking...
// Iteration 2
config.name = "general";
const result2 = validate_node_operation({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Error: Missing "text"
// ⏱️ 58 seconds fixing...
// Iteration 3
config.text = "Hello!";
const result3 = validate_node_operation({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Valid! ✅
这是正常的! 多次迭代时不必气馁。
验证配置
根据所处阶段选择合适的配置:
minimal
使用场景:编辑期间快速检查
验证内容:
- 仅检查必填字段
- 基本结构
优点:速度最快,限制最少 缺点:可能会遗漏问题
runtime(推荐)
使用场景:部署前验证
验证内容:
- 必填字段
- 值类型
- 允许的值
- 基本依赖项
优点:平衡性好,可发现实际错误 缺点:可能会遗漏某些边缘情况
此配置适用于大多数使用场景
ai-friendly
使用场景:AI 生成的配置
验证内容:
- 与 runtime 相同
- 减少误报
- 对轻微问题更宽容
优点:减少 AI 工作流中的干扰 缺点:可能会放行一些值得商榷的配置
strict
使用场景:生产部署、关键工作流
验证内容:
- 所有内容
- 最佳实践
- 性能问题
- 安全问题
优点:安全性最高 缺点:警告较多,也可能出现误报
常见错误类型
1. missing_required
含义:未提供必填字段
修复方法:
- 使用
get_node_essentials查看必填字段 - 将缺失字段添加到配置中
- 提供合适的值
示例:
// Error
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required"
}
// Fix
config.channel = "#general";
2. invalid_value
含义:值与允许的选项不匹配
修复方法:
- 查看错误消息中的允许值
- 使用
get_node_essentials查看选项 - 更新为有效值
示例:
// Error
{
"type": "invalid_value",
"property": "operation",
"message": "Operation must be one of: post, update, delete",
"current": "send"
}
// Fix
config.operation = "post"; // Use valid operation
3. type_mismatch
含义:字段的数据类型错误
修复方法:
- 查看错误消息中的预期类型
- 将值转换为正确的类型
示例:
// Error
{
"type": "type_mismatch",
"property": "limit",
"message": "Expected number, got string",
"current": "100"
}
// Fix
config.limit = 100; // Number, not string
4. invalid_expression
含义:表达式语法错误
修复方法:
- 使用 n8n 表达式语法技能
- 检查是否缺少
{{}}或存在拼写错误 - 验证节点/字段引用
示例:
// Error
{
"type": "invalid_expression",
"property": "text",
"message": "Invalid expression: $json.name",
"current": "$json.name"
}
// Fix
config.text = "={{$json.name}}"; // Add {{}}
5. invalid_reference
含义:引用的节点不存在
修复方法:
- 检查节点名称拼写
- 确认节点存在于工作流中
- 将引用更新为正确的名称
示例:
// Error
{
"type": "invalid_reference",
"property": "expression",
"message": "Node 'HTTP Requets' does not exist",
"current": "={{$node['HTTP Requets'].json.data}}"
}
// Fix - correct typo
config.expression = "={{$node['HTTP Request'].json.data}}";
自动清理系统
功能说明
自动修复任何工作流更新中的常见操作符结构问题
运行时机:
n8n_create_workflown8n_update_partial_workflow- 任何工作流保存操作
修复内容
1. 二元运算符(两个值)
运算符:equals、notEquals、contains、notContains、greaterThan、lessThan、startsWith、endsWith
修复:移除 singleValue 属性(二元运算符比较两个值)
修复前:
{
"type": "boolean",
"operation": "equals",
"singleValue": true // ❌ Wrong!
}
修复后(自动):
{
"type": "boolean",
"operation": "equals"
// singleValue removed ✅
}
2. 一元运算符(一个值)
运算符:isEmpty、isNotEmpty、true、false
修复:添加 singleValue: true(一元运算符检查单个值)
修复前:
{
"type": "boolean",
"operation": "isEmpty"
// Missing singleValue ❌
}
修复后(自动):
{
"type": "boolean",
"operation": "isEmpty",
"singleValue": true // ✅ Added
}
3. IF/Switch 元数据
修复:为 IF v2.2+ 和 Switch v3.2+ 添加完整的 conditions.options 元数据
无法修复的内容
1. 连接损坏
引用了不存在的节点
解决方案:在 n8n_update_partial_workflow 中使用 cleanStaleConnections 操作
2. 分支数量不匹配
有 3 条 Switch 规则,但只有 2 个输出连接
解决方案:添加缺少的连接或移除多余的规则
3. 矛盾的损坏状态
API 返回损坏的数据,但拒绝更新
解决方案:可能需要手动干预数据库
误报
什么是误报?
在技术上“错误”,但在你的使用场景中可以接受的验证警告
常见误报
1. “缺少错误处理”
警告:未配置错误处理
可接受的情况:
- 失败情况显而易见的简单工作流
- 测试/开发工作流
- 非关键通知
应修复的情况:处理重要数据的生产工作流
2. “没有重试逻辑”
警告:节点失败时不会重试
可接受的情况:
- 自带重试逻辑的 API
- 幂等操作
- 手动触发的工作流
应修复的情况:不稳定的外部服务、生产自动化
3. “缺少速率限制”
警告:API 调用没有速率限制
可接受的情况:
- 没有限制的内部 API
- 低流量工作流
- 在服务端实施速率限制的 API
应修复的情况:公共 API、高流量工作流
4. “无界查询”
警告:SELECT 未使用 LIMIT
可接受的情况:
- 已知的小型数据集
- 聚合查询
- 开发/测试
应修复的情况:针对大型表的生产查询
减少误报
使用 ai-friendly 配置文件:
validate_node_operation({
nodeType: "nodes-base.slack",
config: {...},
profile: "ai-friendly" // Fewer false positives
})
验证结果结构
完整响应
{
"valid": false,
"errors": [
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required",
"fix": "Provide a channel name (lowercase, no spaces)"
}
],
"warnings": [
{
"type": "best_practice",
"property": "errorHandling",
"message": "Slack API can have rate limits",
"suggestion": "Add onError: 'continueRegularOutput'"
}
],
"suggestions": [
{
"type": "optimization",
"message": "Consider using batch operations for multiple messages"
}
],
"summary": {
"hasErrors": true,
"errorCount": 1,
"warningCount": 1,
"suggestionCount": 1
}
}
如何阅读
1. 检查 valid 字段
if (result.valid) {
// ✅ Configuration is valid
} else {
// ❌ Has errors - must fix before deployment
}
2. 优先修复错误
result.errors.forEach(error => {
console.log(`Error in ${error.property}: ${error.message}`);
console.log(`Fix: ${error.fix}`);
});
3. 查看警告
result.warnings.forEach(warning => {
console.log(`Warning: ${warning.message}`);
console.log(`Suggestion: ${warning.suggestion}`);
// Decide if you need to address this
});
4. 考虑建议
// Optional improvements
// Not required but may enhance workflow
工作流验证
validate_workflow(结构)
验证整个工作流,而不仅是单个节点
检查项:
- 节点配置——每个节点都有效
- 连接——没有失效的引用
- 表达式——语法和引用均有效
- 流程——工作流逻辑结构
示例:
validate_workflow({
workflow: {
nodes: [...],
connections: {...}
},
options: {
validateNodes: true,
validateConnections: true,
validateExpressions: true,
profile: "runtime"
}
})
常见工作流错误
1. 连接损坏
{
"error": "Connection from 'Transform' to 'NonExistent' - target node not found"
}
修复:移除过时的连接或创建缺少的节点
2. 循环依赖
{
"error": "Circular dependency detected: Node A → Node B → Node A"
}
修复:重构工作流以消除循环
3. 多个起始节点
{
"warning": "Multiple trigger nodes found - only one will execute"
}
修复:移除多余的触发器或拆分为单独的工作流
4. 未连接的节点
{
"warning": "Node 'Transform' is not connected to workflow flow"
}
修复:连接节点,或在不使用时将其移除
恢复策略
策略 1:从头开始
适用情况:配置严重损坏
步骤:
- 从
get_node_essentials中记录必填字段 - 创建最精简的有效配置
- 逐步添加功能
- 每次添加后都进行验证
策略 2:二分搜索
适用情况:工作流验证通过,但执行不正确
步骤:
- 移除一半节点
- 验证并测试
- 如果正常:问题在已移除的节点中
- 如果失败:问题在剩余节点中
- 重复以上步骤,直到隔离出问题
策略 3:清理过时连接
适用情况:“找不到节点”错误
步骤:
n8n_update_partial_workflow({
id: "workflow-id",
operations: [{
type: "cleanStaleConnections"
}]
})
策略 4:使用自动修复
适用情况:运算符结构错误
步骤:
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: false // Preview first
})
// Review fixes, then apply
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: true
})
最佳实践
✅ 应做
- 每次进行重大更改后都要验证
- 完整阅读错误消息
- 逐个修复错误(一次一个)
- 部署前使用
runtime配置 - 确认成功前检查
valid字段 - 对于运算符问题,相信自动清理的结果
- 不确定要求时,使用
get_node_essentials - 记录你接受的误报
❌ 不应做
- 激活前跳过验证
- 试图一次性修复所有错误
- 忽略错误消息
- 开发期间使用
strict配置(噪声太多) - 假设验证已通过(始终检查结果)
- 手动修复自动清理问题
- 带着未解决的错误部署
- 忽略所有警告(有些警告很重要!)
详细指南
有关完整的错误目录和误报示例:
- ERROR_CATALOG.md - 包含示例的完整错误类型列表
- FALSE_POSITIVES.md - 何时可以接受警告
总结
要点:
- 验证是迭代过程(平均 2-3 轮,23 秒 + 58 秒)
- 必须修复错误,警告可酌情处理
- 自动清理会自动修复运算符结构
- 使用 runtime 配置进行平衡验证
- 存在误报——要学会识别
- 阅读错误消息——其中包含修复指导
验证流程:
- 验证 → 阅读错误 → 修复 → 再次验证
- 重复直到验证通过(通常需要 2-3 次迭代)
- 检查警告并判断是否可以接受
- 放心部署
相关技能:
- n8n MCP Tools Expert - 正确使用验证工具
- n8n Expression Syntax - 修复表达式错误
- n8n Node Configuration - 了解必填字段