代码
代码节点支持通过编写Python或Node.js代码来处理文本等复杂逻辑,生成业务期望的返回值。
前提条件
已完成工作流搭建,如果未搭建工作流,请参考搭建工作流。
如果使用FunctionGraph执行方式,请确保当前华为账号或IAM用户具备FunctionGraph的权限,如何获取FunctionGraph的权限请参见授权使用FunctionGraph。
配置代码节点
- 登录Versatile智能体平台,在左侧导航栏“个人空间”区域,选择进入所需空间,如图1所示。
如果已选择团队空间,界面显示为实际的团队空间名称,而非“个人空间”。
- 在左侧导航栏选择“开发中心 > 应用管理 > 工作流应用”,单击您创建的工作流。
- 单击“添加节点”并选择“代码”节点。
- 通过单击该节点打开节点配置页面,选择“FunctionGraph”执行方式。
- 单击
图标,可修改代码节点名称,修改完成后单击名称旁边的
进行保存。 - 单击
图标,可重命名代码节点名称,复制一个代码节点或删除代码节点。 - 单击
图标,可对代码点进行测试。
FunctionGraph:使用FunctionGraph函数,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。FunctionGraph配置方式请参照表1和图3。
如果使用FunctionGraph执行方式,请确保当前华为账号或IAM用户具备FunctionGraph的权限,如何获取FunctionGraph的权限请参见授权使用FunctionGraph。
表1 FunctionGraph执行方式配置参数说明 参数
说明
执行方式
FunctionGraph:支持依赖包管理、网络访问等等高级功能,支持多语言。
函数名称
选择下拉列表中的函数,即之前已定义保存的函数,也可以进行以下操作。
- 单击
:可以直接在弹出的创建函数页面快速创建函数,参数说明如表2所示,参数配置完成后可单击“创建”保存函数。 - 单击
:选择函数后,单击该图标可以在弹出的“编辑函数”页面中快速编辑函数,参数编辑完成后可单击“更新”保存函数。
输入参数
按照函数定义中指定的参数列表配置入参,即传递给函数的实际值。
输入参数或选择前序节点的输出作为输入。
输出参数
配置代码运行后需要输出的参数。
异常处理
支持对节点的异常(如超时、调用失败等情况)进行处理,包括超时时间、重试次数、异常处理方式。
“超时时间”:支持用户配置超时时间,取值范围0.1~900,默认900s。
“重试次数”:支持配置重试次数(不重试、重试1次、重试2次、重试3次),系统默认不重试。
“异常处理方式”:配置异常处理方式。- 中断流程:节点发生异常后,直接中断流程,不再运行后续节点。
- 返回设定内容:节点发生异常后,工作运行不会中断,用户可自定义设置需要返回的输出字段内容,必须是输出参数中已定义的字段,且格式为合法的JSON格式。
- 执行异常流程:节点发生异常后,工作流不会中断,而是会执行异常处理流程。用户可以在该运行异常的节点前新增节点,并为新增的异常分支配置相应的处理流程。
表2 创建函数参数说明 参数
说明
名称
函数名,用于调用函数。
描述
函数功能描述。
入参
输入参数。
出参
输出参数。每个变量都可在后置节点中引用。
执行语言
当前支持Python3.9、Node.js14.18,即运行函数的环境,请查看Python函数开发指南、Node.js函数开发指南。
编辑源码
在源码编辑区,编写函数内部的代码运行逻辑,如图2所示,图中各模块说明如下:
①:导入模块,是Python标准库中的模块,无需修改。
②:用户自定义导入模块。
③:公共函数使用方法示例,提供了如何使用公共函数和mssiAuthData参数的示例,无需修改。
④:函数定义和注释,extractRequestParam函数和handler函数是系统预置的模板代码,无需修改。
⑤:系统方法,无需修改。
依赖包
单击“添加”,可以选择自定义依赖包。自定义依赖包上传方法请参见创建自定义依赖包。
一个函数最多添加20个依赖包。
示例
- 开发语言
代码节点以Python语言为例。
- Python
基于Python 3.11.3的标准库,大多数模块都能正常运行,如下面白名单所示模块,不在白名单中的模块可能不能正常运行。
- 三方库白名单
sys,time,numpy,warnings,enum,os,functools,collections,types,datetime,numbers,abc,io,executor_sdk,contextlib,dataclasses,math,operator,pickle,contextvars,_contextvars,ast,re,ctypes,copyreg,weakref,textwrap,platform,typing,__future__,sympy,mpmath,bisect,cmath,colorsys,keyword,linecache,timeit,gc,random,decimal,_decimal,fractions,flint,gmpy2,unicodedata,tokenize,gmpy,copy,inspect,string,struct,importlib,array,shutil,pathlib,tempfile,subprocess,json,xml.etree.ElementTree,uuid,_uuid,urandom
- 内置函数白名单
exec,print,id,issubclass,compile,__build_class__,hasattr,eval,chr,next,ord,callable,repr,sorted,iter,min,max,weakref,all,any,hash,locals,sum,vars,open,abs,round,divmod,pow,delattr
- 三方库白名单
- 配置示例
以数学计算示例代码为例:
# -*- coding:utf-8 -*- import json import base64 def extractRequestParam(rawValue, encoded, defaultValue): if encoded and rawValue: rawValue = str(base64.b64decode(rawValue), "utf-8") return json.loads(rawValue) if rawValue else defaultValue def math(args: dict) -> dict: # 注意在输入参数中定义名为input1的变量 input1 = args.get('input1') try: input1 = int(input1) return { # 注意输出参数中定义res变量 'res': input1 * input1 } except Exception as e: return { # 注意输出参数中定义res变量 'res': "输入类型错误或者数字大小超出限制" } ## 请勿对下面的函数名做修改 def handler(event, context): """ 函数是方法的入口 :param event: 执行事件(event), 包含用户定义的函数参数以及所选择的的连接器认证相关参数 :param context: Runtime提供的函数执行上下文 :return: """ isBase64Encoded = event.get('isBase64Encoded', False) inputData = extractRequestParam(event.get('body'), isBase64Encoded, {}) # 用户定义的函数参数数据 mssiAuthData = extractRequestParam(event.get('mssiAuthData'), isBase64Encoded, {}) # 连接器认证数据 mssiAuthData["securityToken"] = context.getToken() result = {'output1':math(inputData.get('input1'))} return json.dumps(result)
- 单击
- 节点配置完成后,单击“确定”。
- 连接代码节点和其他节点。
创建自定义依赖包
函数运行环境内置了常用公共依赖包,支持在函数中引用;同时也支持用户创建自定义依赖包。本节介绍如何创建自定义依赖包。
- 登录Versatile智能体平台,在左侧导航栏“个人空间”区域,选择进入所需空间,如图4所示。
如果已选择团队空间,界面显示为实际的团队空间名称,而非“个人空间”。
- 在左侧导航栏选择“开发中心 > 应用管理 > 工作流应用”,单击您创建的工作流。
- 单击“代码”节点,进入节点配置界面,“执行方式”选择为“FunctionGraph”。
- 选择已有函数,进入编辑函数界面,如图5所示。
- 单击“依赖包”后的“添加”,如图6所示。
- 单击“创建依赖包”,设置依赖包的基本配置信息,具体的参数说明如表3所示。
- 单击“确定”。
创建完成后,可以在代码节点中添加并使用该依赖包。




