专家模式
专家模式中调用了一个叫Pydantic库,它的核心作用:数据验证与解析。在 Python 这种动态类型语言中,变量的类型随时可能发生变化。当你从外部环境(比如前端的 API 请求、数据库读取、读取本地 JSON 文件)接收数据时,你很难保证传入的数据格式完全符合你的预期。比如你期望一个代表年龄的整数 age,别人却传进了一个字符串 “twenty”,如果直接处理,代码在运行到深处时就会崩溃。
Pydantic 就是用来解决这个痛点的。它利用 Python 的类型提示机制,在数据进入你的核心业务逻辑之前,强制对其进行检查、清洗和过滤。
老师给我们展示了一个案例,两数相加的节点。我自己添加了备注展示如下:
# 导入 Python 类型提示模块 Optional (表示值可能为 None) 和 Type (表示类本身的类型)
from typing import Optional, Type
# 从 panda_plugins.base 导入节点基类 BaseWorkNode 和节点注册装饰器 work_node
from panda_plugins.base import BaseWorkNode, work_node
# 从 pydantic 导入数据模型基类 BaseModel,用于提供严格的数据参数类型校验
from pydantic import BaseModel
# 定义输入数据模型:继承自 BaseModel,它指定了节点在运行时需要接收到什么参数及其要求
class InputModel(BaseModel):
"""
Define the input model for the node.
Use pydantic to define, which is a library for data validation and parsing.
Reference: https://pydantic-docs.helpmanual.io
为工作节点定义输入模型.
使用 Pydantic 定义, Pydantic 是一个用于数据验证和解析的库.
参考文档: https://pydantic-docs.helpmanual.io
"""
# 定义参数 number1,类型必须为整数 (int),Pydantic 会自动在运行前验证传入值
number1: int
# 定义参数 number2,类型也必须为整数 (int)
number2: int
# 定义输出数据模型:继承自 BaseModel,它规范了节点在执行完毕后会输出什么样的数据结构
class OutputModel(BaseModel):
"""
Define the output model for the node.
Use pydantic to define, which is a library for data validation and parsing.
Reference: https://pydantic-docs.helpmanual.io
为工作节点定义输出模型.
使用 Pydantic 定义, Pydantic 是一个用于数据验证和解析的库.
参考文档: https://pydantic-docs.helpmanual.io
"""
# 定义输出字段 result,即计算出来的相加结果,数据类型为整数 (int)
result: int
# 使用 @work_node 装饰器将该类注册为系统的可用节点
# name="Example - Add Two Numbers" 是节点在前端控制面板中显示的名称,group="Test Nodes" 是该节点所属的分组
@work_node(name="Example - Add Two Numbers", group="Test Nodes")
# 定义节点核心执行类,必须继承 BaseWorkNode 基类才能被系统识别和调用
class ExamplePluginAddition(BaseWorkNode):
"""
Implement a example node, which can add two numbers and return the result.
实现一个示例节点, 完成一个简单的加法运算, 输入 2 个数值, 输出 2 个数值的和.
"""
# Return the input model
# 返回输入模型
# 使用 @classmethod 表明这是一个类方法,框架在无需实例化节点对象时,就能主动调用获取这里的输入规范
@classmethod
def input_model(cls) -> Optional[Type[BaseModel]]:
# 返回上方定义好的 InputModel 类,作为本节点的输入契约
return InputModel
# Return the output model
# 返回输出模型
# 同样使用 @classmethod 提供对外访问本节点输出结构的方法
@classmethod
def output_model(cls) -> Optional[Type[BaseModel]]:
# 返回上方定义好的 OutputModel 类,作为本节点的输出契约
return OutputModel
# Node running logic
# 节点运行逻辑
# 核心算法执行函数。当系统触发该节点运行时,系统将输入的数据实例化为 BaseModel (此处为 InputModel) 并传入
def run(self, input: BaseModel) -> BaseModel:
# 提取 input 实例对象中的 number1 和 number2 属性,执行加法,将结果存入 result 变量
result = input.number1 + input.number2
# 将计算得到的数值 result 封装到事先约定好的 OutputModel 实例中,并返回给工作流系统
return OutputModel(result=result)
# 这是一个 Python 的标准独立执行入口判断。只有当该脚本文件被作为主程序直接运行时才会执行,被其他文件 import 时不会执行
if __name__ == "__main__":
# 本地调试:实例化上面声明的加法计算节点
node = ExamplePluginAddition()
# 本地调试:手动构造一个符合 InputModel 规范的对象,赋予 number1 为 1,number2 为 2
input = InputModel(number1=1, number2=2)
# 本地调试:调用被实例化节点的 run 方法,传入刚刚创建的输入对象,并把返回结果打印到控制台中
print(node.run(input))
1.点击创建工作流旁边的专家模式
2.在专家模式中写的节点可以在自定义节点中展示
3.拖动节点到面板,即可以实现节点功能
总结
这个专家模式还没有很熟悉,正在学习中,希望能够跟各位交流共进。