基于函数创建一个插件
本章节将介绍如何通过函数来创建插件。创建完成后,必须发布才可以被智能体或工作流使用。通过使用插件,您可以扩展智能体和工作流的功能,使其更加灵活和强大。如何发布插件,请参考发布插件。
创建插件的流程
创建插件
- 登录Versatile智能体平台,在左侧导航栏“个人空间”区域,选择进入所需空间,如图1所示。
如果已选择团队空间,界面显示为实际的团队空间名称,而非“个人空间”。
- 在左侧导航栏中选择“开发中心 > 组件库 > 我的插件”,单击左上角“创建插件”。
- 在“创建插件”页面中的“插件类型”中选择“函数类型”,在“基本信息”步骤中设置插件的基础信息,请参照表1完成信息配置。
表1 基本信息 参数
说明
插件图标
单击默认图标按钮,可上传本地图片作为插件的自定义图标。
支持jpg、jpeg、png格式,不超过200KB。
插件名称
用于标识当前插件的名称,便于在智能体、工作流和资产中心中快速搜索和定位。例如:查询天气。
命名规则:
命名要求:可以包含中文、英文、数字、特殊字符等。
长度限制:1~64个字符。
插件英文名称
插件的英文名称,用于在大模型调用时快速搜索和定位该插件。
命名规则:
命名要求:字母、数字和下划线(_)的组合,不允许使用其他特殊字符或空格。
长度限制:1~64个字符。
描述(可选)
描述当前插件的类型、功能和适用场景,帮助用户快速了解插件的作用和用途。
仅我可见
该功能默认关闭。开启后,仅插件的创建者可见。此设置在插件创建后无法修改。
- 配置完成后,单击“确定”完成插件创建。插件创建成功后,可以在插件列表中查看创建好的插件。请参考创建工具为插件添加工具。
创建工具
- 在“工具信息”页签中,单击左侧的“新建”。
- 在“函数名称”的下拉列表中选择需要的函数,即之前已定义保存的函数。您也可以进行以下操作。
- 单击
:可以直接在弹出的创建函数页面快速创建函数,参数说明如表2所示,参数配置完成后可单击“确定”保存函数。 - 单击
:可以在弹出的编辑页面中快速编辑函数,参数编辑完成后可单击“确定”保存函数。
表2 创建函数参数说明 参数
说明
名称
函数名,用于调用函数。
命名规则:
命名要求:可以包含英文、数字,必须以英文字母开头。
长度限制:2~32个字符。
描述
函数功能描述。
入参
设置函数的输入参数。
单击参数列表“操作”列的
可以新增参数,参数配置说明请参见表3。出参
输出参数。每个变量都可在后置节点中引用。
单击参数列表“操作”列的
可以新增参数,参数配置说明请参见表3。执行语言
运行函数的环境。当前支持Python3.9、Node.js14.18,请查看Python函数开发指南、Node.js函数开发指南。
编辑源码
在源码编辑区,可以编写函数内部的代码运行逻辑,如图2所示,图中各模块说明如下:
①:导入模块,是Python标准库中的模块,无需修改。
②:用户自定义导入模块。
③:公共函数使用方法示例,提供了如何使用公共函数和mssiAuthData参数的示例,无需修改。
④:函数定义和注释,extractRequestParam函数和handler函数是系统预置的模板代码,无需修改。
⑤:系统方法,无需修改。
依赖包
单击“添加”,可以选择自定义依赖包。自定义依赖包上传方法请参见创建自定义依赖包。
一个函数最多添加20个依赖包。
- 单击
- 配置完成后,单击“确定”。
添加完成的工具可以在工具列表中查看。
创建自定义依赖包
- 登录Versatile智能体平台,在左侧导航栏“个人空间”区域,选择进入所需空间,如图3所示。
如果已选择团队空间,界面显示为实际的团队空间名称,而非“个人空间”。
- 在左侧导航栏选择“开发中心 > 组件库 > 我的插件”,单击您通过选择函数类型创建的插件。
- 在“工具信息”页签中,单击左侧的“新建”。或编辑已添加的工具。
- 选择已有函数,进入编辑函数界面,如图4所示。
- 单击“依赖包”右侧的“添加”,如图5所示。
- 在“选择依赖包”的弹框中,单击“创建依赖包”,设置依赖包的基本配置信息,具体的参数说明如表4所示。
- 单击“确定”。
创建完成后,可以在添加工具时添加并使用该依赖包。
示例
开发语言
代码节点以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
配置示例:
- 文本拼接示例代码。
def main(args: dict) -> dict: # 注意在输入参数中定义名为input1的变量 input1 = args.get('input1') # 注意在输入参数中定义名为input2的变量 input2 = args.get('input2') res = { # 注意在输出参数中定义名为res的变量 "res": input1 + input2, } return res - 数学计算示例代码。
def main(args: dict) -> dict: # 注意在输入参数中定义名为input1的变量 input1 = args.get('input1') try: input1 = int(input1) return { # 注意输出参数中定义res变量 'res': input1 * input1 } except Exception as e: return { # 注意输出参数中定义res变量 'res': "输入类型错误或者数字大小超出限制" }
更多操作
工具创建完成后,您可以在工具列表中查看每个工具的调试状态、智能体引用数和工作流引用数。您可以执行如表5的操作。





