更新时间:2025-12-04 GMT+08:00
分享

代码

代码节点支持通过编写Python或Node.js代码来处理文本等复杂逻辑,生成业务期望的返回值。

前提条件

已完成工作流搭建,如果未搭建工作流,请参考搭建工作流

如果使用FunctionGraph执行方式,请确保当前华为账号或IAM用户具备FunctionGraph的权限,如何获取FunctionGraph的权限请参见授权使用FunctionGraph

配置代码节点

  1. 登录Versatile智能体平台,在左侧导航栏“个人空间”区域,选择进入所需空间,如图1所示。

    如果已选择团队空间,界面显示为实际的团队空间名称,而非“个人空间”。

    图1 选择团队空间

  2. 在左侧导航栏选择“开发中心 > 应用管理 > 工作流应用”,单击您创建的工作流。
  3. 单击“添加节点”并选择“代码”节点。
  4. 通过单击该节点打开节点配置页面,选择“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函数是系统预置的模板代码,无需修改。

    ⑤:系统方法,无需修改。

    ⑥:用户自定义函数中的逻辑。输出为JOSN格式,请参考图4 源码编辑区的输出格式,详细配置请参见配置示例

    依赖包

    单击“添加”,可以选择自定义依赖包。自定义依赖包上传方法请参见创建自定义依赖包

    一个函数最多添加20个依赖包。

    图2 源码编辑区
    图3 创建函数

    示例

    1. 开发语言

      代码节点以Python语言为例。

    2. 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
    3. 配置示例
      以数学计算示例代码为例:
      # -*- 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)

  5. 节点配置完成后,单击“确定”。
  6. 连接代码节点和其他节点。

创建自定义依赖包

函数运行环境内置了常用公共依赖包,支持在函数中引用;同时也支持用户创建自定义依赖包。本节介绍如何创建自定义依赖包。

  1. 登录Versatile智能体平台,在左侧导航栏“个人空间”区域,选择进入所需空间,如图4所示。

    如果已选择团队空间,界面显示为实际的团队空间名称,而非“个人空间”。

    图4 选择团队空间

  2. 在左侧导航栏选择“开发中心 > 应用管理 > 工作流应用”,单击您创建的工作流。
  3. 单击“代码”节点,进入节点配置界面,“执行方式”选择为“FunctionGraph”。
  4. 选择已有函数,进入编辑函数界面,如图5所示。

    图5 创建函数

  5. 单击“依赖包”后的“添加”,如图6所示。

    图6 选择依赖包

  6. 单击“创建依赖包”,设置依赖包的基本配置信息,具体的参数说明如表3所示。

    表3 新建依赖包参数说明

    参数

    说明

    依赖包名称

    自定义依赖包的名称,支持英文、数字、下划线,仅支持以英文开头,长度为2-32个字符。

    执行语言

    运行函数的环境,当前仅支持Python3.9、Node.js14.18。

    描述(可选)

    依赖包的描述信息,最多支持200个字符。

    上传(支持多个文件)

    上传.zip格式文件,文件大小限制为10MB以内。

    上传文件时,如果文件中包含敏感信息(如账户密码等),请您自行加密,防止信息泄露。

  7. 单击“确定”。

    创建完成后,可以在代码节点中添加并使用该依赖包。

相关文档