当前位置: 首页 > news >正文

【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

http://www.dtcms.com/a/546568.html

相关文章:

  • 仓颉线程池管理策略深度解析
  • 做网站域名的好处是什么wordpress安装不了插件
  • 做企划的网站山东网站建设哪里好
  • 网站自创汽车行业网站建设比较好
  • 揭阳网站制作服务龙岩正规全网品牌营销招商
  • 成都市网站建设哪家好怎么建设个人博客网站
  • wordpress没法做大网站wordpress 能承受多大并发访问
  • wordpress做大型网站北京网站制作网络推广公司
  • yarn报错:info no lockfile found
  • 湛江网站建设方案服务网站开发文献翻译
  • 国土资源部门网站建设制度郑州网站免费制作
  • 循环神经网络实现文本情感分类案例
  • Common Go Mistakes(Ⅱ 数据类型)
  • 图书馆 网站建设网络营销托管服务商指的是
  • 怎么做自己的网站wordpress打开网页耗内存
  • [MySQL]表——用户管理
  • mysql 配置引起的报错
  • 免费企业自助建站app推广赚佣金
  • 10.29 ArkTS函数
  • 网站建设费用预算模板网络安全服务机构
  • 渐开线花键参数一般是怎么确定的?
  • Unity 将地图分割为可自定义的矩形区域来管理物体的插件
  • php做网站的技术难点大数据营销 全网推广
  • 产品展示型网站建设公司网站设计 上海
  • 【JavaEE初阶】TCP核心机制4——滑动窗口
  • FEMU—NVMe ZNS 核心实现的学习
  • 做结构图的网站云南做网站哪家便宜
  • 甘肃古典建设集团有限公司网站要想让别人网站卖我的东西怎么做
  • 深入理解Java String:不可变性、内存机制与高效操作
  • 仓颉GC调优参数:垃圾回收的精密控制艺术