【AI WorkFow】n8n 源码分析-节点和工作流结构说明(二)
目录
- n8n 节点和工作流数据结构说明
- 一、核心概念
- 1. 工作流(Workflow)
- 2. 节点(Node)
- 二、主要数据结构
- 1. `IWorkflowBase` - 工作流基础结构
- 2. INode - 节点结构
- 3. IConnections - 连接结构
- 4. INodeParameters - 节点参数
- 5. INodeExecutionData - 节点执行数据
- 三、工作流执行相关数据结构
- 1. IRunExecutionData - 执行数据
- 2. ITaskData - 任务数据
- 四、节点类型系统
- 1. INodeType - 节点类型
- 2. INodeTypeDescription - 节点描述
- 五、连接类型
- 六、小结
n8n 节点和工作流数据结构说明
n8n 是一个基于节点的工作流自动化平台,其核心是节点(Node) 和 连接(Connection) 组成的有向无环图(DAG)。本文档将详细介绍 n8n 中节点和工作流的数据结构定义。
- 节点(Node):工作流中的基本执行单元,代表一个具体操作(如 HTTP 请求、数据库查询等)。
- 连接(Connection):定义节点之间的数据流向,构成工作流的执行路径。
一、核心概念
1. 工作流(Workflow)
工作流是 n8n 中的基本执行单元,由节点和它们之间的连接(边)组成。工作流的定义主要包括以下几个部分:
- 节点列表(Nodes):工作流中包含的所有节点
- 连接信息(Connections):节点之间的连接关系
- 设置(Settings):工作流级别的配置
- 静态数据(Static Data):用于持久化存储的数据
- 固定数据(Pin Data):用于测试的手动输入数据
2. 节点(Node)
节点是工作流的基本执行单元,每个节点代表一个特定的操作或功能。常见的节点类型包括:
- 触发器(如 Webhook、定时任务)
- 动作(如 HTTP 请求、邮件发送)
- 逻辑控制(如条件判断、循环)
二、主要数据结构
1. IWorkflowBase - 工作流基础结构
export interface IWorkflowBase {id: string; // 工作流唯一标识符name: string; // 工作流名称active: boolean; // 工作流是否激活isArchived: boolean; // 工作流是否已归档createdAt: Date; // 创建时间startedAt?: Date; // 启动时间updatedAt: Date; // 更新时间nodes: INode[]; // 节点列表connections: IConnections; // 节点连接信息settings?: IWorkflowSettings; // 工作流设置staticData?: IDataObject; // 静态数据pinData?: IPinData; // 固定数据(用于测试)versionId?: string; // 版本标识符
}
2. INode - 节点结构
export interface INode {id: string; // 节点唯一标识符name: string; // 节点名称(在工作流中唯一)typeVersion: number; // 节点类型版本type: string; // 节点类型(如 "n8n-nodes-base.httpRequest")position: [number, number]; // 节点在画布中的位置disabled?: boolean; // 节点是否禁用notes?: string; // 节点备注notesInFlow?: boolean; // 备注是否显示在流程中retryOnFail?: boolean; // 失败时是否重试maxTries?: number; // 最大尝试次数waitBetweenTries?: number; // 重试间隔alwaysOutputData?: boolean; // 是否始终输出数据executeOnce?: boolean; // 是否只执行一次onError?: OnError; // 错误处理方式continueOnFail?: boolean; // 失败时是否继续parameters: INodeParameters; // 节点参数credentials?: INodeCredentials; // 节点凭证webhookId?: string; // Webhook ID(如果适用)extendsCredential?: string; // 继承的凭证
}
3. IConnections - 连接结构
连接定义了节点之间的数据流关系:
export interface IConnections {// 源节点名称[nodeName: string]: INodeConnections;
}export interface INodeConnections {// 连接类型(如 "main")--- 【用于定义边的类型】[type: string]: NodeInputConnections;
}// 节点输入连接
export type NodeInputConnections = Array<IConnection[] | null>;export interface IConnection {node: string; // 目标节点名称type: NodeConnectionType; // 连接类型index: number; // 输入索引
}
4. INodeParameters - 节点参数
节点参数定义了节点的具体配置,根据节点类型不同而不同:
export interface INodeParameters {[key: string]: NodeParameterValueType;
}export type NodeParameterValueType =| NodeParameterValue // 基本值类型| INodeParameters // 嵌套参数| INodeParameterResourceLocator // 资源定位器| ResourceMapperValue // 资源映射器| FilterValue // 过滤器| AssignmentCollectionValue // 赋值集合| NodeParameterValue[] // 数组类型| INodeParameters[] // 参数数组// ... 其他类型
5. INodeExecutionData - 节点执行数据
节点执行时处理的数据结构:
export interface INodeExecutionData {json: IDataObject; // JSON 数据binary?: IBinaryKeyData; // 二进制数据error?: NodeApiError | NodeOperationError; // 错误信息pairedItem?: IPairedItemData | IPairedItemData[] | number; // 配对项信息metadata?: {subExecution: RelatedExecution;};// ... 其他字段
}
三、工作流执行相关数据结构
1. IRunExecutionData - 执行数据
包含工作流执行过程中产生的所有数据:
export interface IRunExecutionData {startData?: {startNodes?: StartNodeData[];destinationNode?: string;runNodeFilter?: string[];};resultData: {error?: ExecutionError;runData: IRunData;pinData?: IPinData;lastNodeExecuted?: string;};executionData?: {contextData: IExecuteContextData;nodeExecutionStack: IExecuteData[];waitingExecution: IWaitingForExecution;waitingExecutionSource: IWaitingForExecutionSource | null;};// ... 其他字段
}
2. ITaskData - 任务数据
单个节点执行的结果数据:
export interface ITaskData extends ITaskStartedData {executionTime: number; // 执行时间executionStatus?: ExecutionStatus; // 执行状态data?: ITaskDataConnections; // 输出数据inputOverride?: ITaskDataConnections; // 输入覆盖error?: ExecutionError; // 错误信息metadata?: ITaskMetadata; // 元数据
}
四、节点类型系统
1. INodeType - 节点类型
定义节点的行为和属性:
export interface INodeType {description: INodeTypeDescription; // 节点描述supplyData?(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData>;execute?(this: IExecuteFunctions): Promise<NodeOutput>;poll?(this: IPollFunctions): Promise<INodeExecutionData[][] | null>;trigger?(this: ITriggerFunctions): Promise<ITriggerResponse | undefined>;webhook?(this: IWebhookFunctions): Promise<IWebhookResponseData>;// ... 其他方法
}
2. INodeTypeDescription - 节点描述
节点的元数据信息:
export interface INodeTypeDescription extends INodeTypeBaseDescription {version: number | number[]; // 节点版本defaults: NodeDefaults; // 默认值inputs: Array<NodeConnectionType | INodeInputConfiguration> | ExpressionString;outputs: Array<NodeConnectionType | INodeOutputConfiguration> | ExpressionString;properties: INodeProperties[]; // 节点属性credentials?: INodeCredentialDescription[]; // 所需凭证// ... 其他字段
}
五、连接类型
n8n 支持多种连接类型,用于不同类型的数据传输:
export const NodeConnectionTypes = {AiAgent: 'ai_agent',AiChain: 'ai_chain',AiDocument: 'ai_document',AiEmbedding: 'ai_embedding',AiLanguageModel: 'ai_languageModel',AiMemory: 'ai_memory',AiOutputParser: 'ai_outputParser',AiRetriever: 'ai_retriever',AiTextSplitter: 'ai_textSplitter',AiTool: 'ai_tool',AiVectorStore: 'ai_vectorStore',Main: 'main', // 主要数据流
} as const;
六、小结
n8n 的数据结构设计体现了以下特点:
- 模块化:每个节点独立定义其行为和参数
- 可扩展:支持自定义节点类型和连接类型
- 类型安全:使用 TypeScript 提供完整的类型定义
- 灵活连接:支持多种连接类型和复杂的节点间关系
- 执行跟踪:完整的执行数据跟踪和错误处理机制
by 久违 2025.10.23
