Build lightweight AI agent admin

This commit is contained in:
Codex
2026-06-08 18:14:59 +08:00
commit e164840f43
2530 changed files with 435693 additions and 0 deletions
@@ -0,0 +1,151 @@
"""
变量赋值节点
"""
import logging
from typing import Any, Dict
from ..base import BaseNode, NodeContext, NodeResult
from ..registry import NodeRegistry
logger = logging.getLogger(__name__)
@NodeRegistry.register
class VariableNode(BaseNode):
"""
变量赋值节点
设置或修改变量的值
"""
node_type = 'variable'
node_name = '变量'
node_category = 'data'
node_icon = 'variable'
node_description = '设置或修改变量的值'
inputs = [
{
'name': 'value',
'type': 'any',
'description': '要设置的值',
},
]
outputs = [
{
'name': 'value',
'type': 'any',
'description': '设置后的值',
},
]
def execute(self, context: NodeContext) -> NodeResult:
"""执行变量赋值"""
try:
assignments = self.config.get('assignments', [])
output_variables = {}
for assignment in assignments:
var_name = assignment.get('name', '')
value_type = assignment.get('type', 'static')
value = assignment.get('value', '')
if not var_name:
continue
# 根据类型处理值
if value_type == 'static':
# 静态值
final_value = value
elif value_type == 'variable':
# 从其他变量获取
final_value = context.get_variable(value, '')
elif value_type == 'template':
# 模板渲染
final_value = context.resolve_template(value)
elif value_type == 'json':
# JSON 解析
import json
final_value = json.loads(value)
elif value_type == 'expression':
# 简单表达式(仅支持基本运算)
final_value = self._evaluate_expression(value, context)
else:
final_value = value
# 设置变量
context.set_variable(var_name, final_value)
output_variables[var_name] = final_value
return NodeResult(
success=True,
output=output_variables,
output_variables=output_variables,
)
except Exception as e:
logger.exception(f'变量节点执行失败: {e}')
return NodeResult(
success=False,
error=str(e),
)
def _evaluate_expression(self, expression: str, context: NodeContext) -> Any:
"""
评估简单表达式
仅支持基本的数学运算和字符串操作
"""
# 替换变量引用
resolved = context.resolve_template(expression)
# 安全的评估环境
safe_dict = {
'abs': abs,
'int': int,
'float': float,
'str': str,
'len': len,
'min': min,
'max': max,
'sum': sum,
'round': round,
}
try:
return eval(resolved, {"__builtins__": {}}, safe_dict)
except Exception:
return resolved
@classmethod
def get_config_schema(cls) -> Dict[str, Any]:
"""获取配置 Schema"""
return {
'type': 'object',
'properties': {
'assignments': {
'type': 'array',
'title': '变量赋值',
'items': {
'type': 'object',
'properties': {
'name': {
'type': 'string',
'title': '变量名',
},
'type': {
'type': 'string',
'title': '值类型',
'enum': ['static', 'variable', 'template', 'json', 'expression'],
'default': 'static',
},
'value': {
'type': 'string',
'title': '',
},
},
},
},
},
}