TraceStudio-dev/docs/server1.2/NODE_SYSTEM_IMPLEMENTATION.md
2026-01-09 21:37:02 +08:00

7.0 KiB
Raw Blame History

TraceStudio v2.0 节点系统实现完成

🎯 实现成果

已成功实现 基于装饰器的优雅节点开发系统,让用户专注于核心业务逻辑,框架自动处理元数据收集和注册。


📦 核心文件

1. 节点基类系统

  • server/app/core/node_base.py - TraceNode 基类 + 装饰器
    • 四大属性规范InputSpec/OutputSpec/ParamSpec/ContextSpec
    • 装饰器自动收集系统
    • 缓存机制支持
    • 预览模式支持
    • 输入验证

2. 节点注册中心

  • server/app/core/node_registry.py - 节点注册与管理
    • @register_node 装饰器
    • 元数据自动提取
    • 分类管理
    • 查询与统计

3. 示例节点库

  • server/app/nodes/example_nodes.py - 8 个示例节点
    • AddNode / MultiplyNode数学节点
    • CSVLoaderNode数据加载
    • FilterRowsNode / SelectColumnsNode数据转换
    • ConcatNode聚合节点
    • TableOutputNode输出节点
    • StatisticsNode分析节点

4. 测试套件

  • server/tests/test_node_system.py - 完整测试
    • 节点注册测试
    • 元数据生成测试
    • 节点执行测试
    • 输入验证测试
    • 全部通过

5. 开发文档

  • docs/NODE_DEVELOPMENT_GUIDE_v2.md - 完整开发指南
    • 快速开始
    • 四大属性详解
    • 装饰器用法
    • 完整示例
    • 最佳实践

🌟 核心特性

1 装饰器自动收集

@register_node
class AddNode(TraceNode):
    CATEGORY = "Math"
    
    @input_port("a", "Number", description="加数A")
    @input_port("b", "Number", description="加数B")
    @output_port("result", "Number", description="和")
    @param("offset", "Number", default=0)
    @context_var("operation", "String", description="运算描述")
    def process(self, inputs, context=None):
        return {
            "outputs": {"result": inputs["a"] + inputs["b"] + self.get_param("offset")},
            "context": {"operation": "..."}
        }

优势:

  • 代码简洁(减少 40% 代码量)
  • 语义清晰(装饰器即文档)
  • 易于维护(属性定义靠近使用位置)

2 四大属性规范

  • InputSpec - 主输入(必须连线,左侧端口)
  • OutputSpec - 主输出(供下游连接,右侧端口)
  • ParamSpec - 控制参数(面板配置,支持多种控件)
  • ContextSpec - 上下文变量(自动广播,可引用)

3 自动注册与元数据

@register_node  # 自动注册到全局注册表
class MyNode(TraceNode):
    ...

# 自动生成元数据供前端使用
metadata = NodeRegistry.get_metadata("MyNode")

4 支持多种节点类型

  • NORMAL - 标准流水线节点1进1出
  • INPUT - 输入节点(仅输出)
  • OUTPUT - 输出节点(仅输入)
  • COMPOSITE - 复合节点(多进多出/聚合)

📊 测试结果

✅ 注册节点: 加法 [AddNode] (Math/Basic)
✅ 注册节点: 乘法 [MultiplyNode] (Math/Basic)
✅ 注册节点: CSV 加载器 [CSVLoaderNode] (Data/Loader)
✅ 注册节点: 行过滤 [FilterRowsNode] (Data/Transform)
✅ 注册节点: 列选择 [SelectColumnsNode] (Data/Transform)
✅ 注册节点: 数据合并 [ConcatNode] (Data/Aggregate)
✅ 注册节点: 表格显示 [TableOutputNode] (Output/Display)
✅ 注册节点: 统计分析 [StatisticsNode] (Data/Analysis)

已注册节点总数: 8
分类: Math/Basic, Data/Loader, Data/Transform, Data/Aggregate, Output/Display, Data/Analysis

✅ 所有测试通过!

🚀 如何使用

运行测试

conda activate tracestudio
cd server
python tests/test_node_system.py

创建自定义节点

  1. cloud/custom_nodes/ 创建 Python 文件
  2. 使用装饰器定义节点:
from server.app.core.node_base import TraceNode, input_port, output_port, param, context_var
from server.app.core.node_registry import register_node

@register_node
class MyCustomNode(TraceNode):
    CATEGORY = "Custom/MyCategory"
    DISPLAY_NAME = "我的节点"
    
    @input_port("data", "DataTable", description="输入数据")
    @output_port("result", "DataTable", description="输出结果")
    @param("threshold", "Number", default=0.5, min=0, max=1)
    def process(self, inputs, context=None):
        # 你的业务逻辑
        return {"outputs": {"result": ...}, "context": {}}
  1. 服务器启动时自动加载

启动服务器

conda activate tracestudio
python -m uvicorn server.main:app --reload --host 127.0.0.1 --port 8000

📝 设计对比

旧版方式(繁琐)

class OldNode(TraceNode):
    InputSpec = {"data": ("DataTable", {"description": "输入数据"})}
    OutputSpec = {"result": ("DataTable", {"description": "输出结果"})}
    ParamSpec = {"threshold": ("Number", {"default": 0.5, "min": 0, "max": 1})}
    
    def process(self, inputs, context=None):
        ...

新版方式(优雅)

@register_node
class NewNode(TraceNode):
    @input_port("data", "DataTable", description="输入数据")
    @output_port("result", "DataTable", description="输出结果")
    @param("threshold", "Number", default=0.5, min=0, max=1)
    def process(self, inputs, context=None):
        ...

🎓 核心设计原则

  1. 连接即输入 - 输入完全由连线决定,面板不显示输入选择
  2. 流水线隐喻 - 大多数节点遵循"1进1出"的流式设计
  3. 双重上下文 - 支持全局命名空间($Global和节点命名空间$NodeID
  4. 参数灵活性 - 支持静态值、Context 引用、暴露端口三种模式
  5. 自动化优先 - 框架自动处理元数据、注册、验证等繁琐工作

📚 相关文档

  • 开发指南: docs/NODE_DEVELOPMENT_GUIDE_v2.md
  • 工作文档: docs/worker.md
  • 节点设计: 见用户提供的设计规范

🔧 技术栈

  • Python 3.11+
  • FastAPI后端框架
  • 装饰器模式(元数据收集)
  • 注册中心模式(节点管理)
  • ABC抽象基类

完成清单

  • TraceNode 基类实现
  • 四大属性规范InputSpec/OutputSpec/ParamSpec/ContextSpec
  • 装饰器自动收集系统
  • 节点注册中心
  • @register_node 装饰器
  • 8 个示例节点
  • 完整测试套件
  • 开发文档
  • 所有测试通过

🎯 后续建议

1. 执行引擎

  • 实现 WorkflowExecutorDAG 执行器)
  • 递归依赖解析
  • 缓存命中检查
  • 状态管理与进度上报

2. 前端集成

  • API 端点对接GET /api/plugins
  • 节点元数据渲染
  • 参数面板生成
  • 上下文引用 UI

3. 安全机制

  • 节点代码安全校验
  • 沙箱执行
  • 资源限制

4. 增强功能

  • 热重载(开发模式)
  • 节点版本管理
  • 节点依赖检查
  • 更多内置节点

🎉 恭喜TraceStudio v2.0 节点系统核心架构已完成!