【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

这是我的第375篇原创文章。

一、引言

dify工作流或者对话助手中编排里的代码执行节点是走sandbox,但是sandbox中环境中的第三方包有限,安装多了会导致包版本冲突,我们可以曲线救国,利用dify本身环境自带的第三方包开发一个工具,然后在工作流中调用这个工具。本文将结合一个具体的案例来实现。

二、实现过程

2.1 准备工具供应商 yaml

这个 yaml 将包含工具供应商的信息,包括供应商名称、图标、作者等详细信息,以协助前端灵活展示。我们需要在 core/tools/provider/builtin下创建一个smb模块(文件夹),并创建smb.yaml,名称必须与模块名称一致。后续,我们关于这个工具的所有操作都将在这个smb模块(文件夹)下进行。

k-means这样的工具,就不需要填写凭据字段,可以参考这里:api/core/tools/provider/builtin/wikipedia/wikipedia.yaml。最终smb.yaml文件如下:

【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

图标需要放置在当前模块的_assets文件夹下,参考这里:api/core/tools/provider/builtin/google/_assets/icon.svg。

2.2 准备工具 yaml

一个供应商底下可以有多个工具,每个工具都需要一个 yaml 文件来描述,这个文件包含了工具的基本信息、参数、输出等。依旧以 KmeansCluster 为例,我们需要在smb模块下创建一个tools模块,并创建tools/ kmeans_cluster.yaml,内容如下。

【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

说明:

  • identity 字段是必须的,它包含了工具的基本信息,包括名称、作者、标签、描述等
  • parameters 参数列表
    • name 参数名称,唯一,不允许和其他参数重名
    • type 参数类型,目前支持string、number、boolean、select 四种类型,分别对应字符串、数字、布尔值、下拉框
    • required 是否必填
      • 在llm模式下,如果参数为必填,则会要求 Agent 必须要推理出这个参数
      • 在form模式下,如果参数为必填,则会要求用户在对话开始前在前端填写这个参数
    • options 参数选项
      • 在llm模式下,Dify 会将所有选项传递给 LLM,LLM 可以根据这些选项进行推理
      • 在form模式下,type为select时,前端会展示这些选项
    • default 默认值
    • label 参数标签,用于前端展示
    • human_description 用于前端展示的介绍,支持多语言
    • llm_description 传递给 LLM 的介绍,为了使得 LLM 更好理解这个参数,我们提议在这里写上关于这个参数尽可能详细的信息,让 LLM 能够理解这个参数
    • form 表单类型,目前支持llm、form两种类型,分别对应 Agent 自行推理和前端填写

2.3 准备工具代码

当完成工具的配置后来,我们就可以开始编写工具代码了,主要用于实现工具的逻辑。在smb/tools模块下创建google_search.py,内容如下

【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

参数:工具的整体逻辑都在_invoke方法中,这个方法接收两个参数:user_id和tool_Parameters,分别表明用户 ID 和工具参数

返回数据:在工具返回时,你可以选择返回一个消息或者多个消息,这里我们返回一个消息,使用create_text_message和create_link_message可以创建一个文本消息或者一个链接消息。

2.4 准备供应商代码

最后,我们需要在供应商模块下创建一个供应商类,用于实现供应商的凭据验证逻辑,如果凭据验证失败,将会抛出ToolProviderCredentialValidationError异常。在google模块下创建google.py,内容如下。

【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

三、结果

当上述步骤完成后来,我们就可以在前端看到这个工具了:

【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

并且可以在 Agent 或工作流中使用这个工具:

【Python大语言模型系列】Dify 开发自定义工具并在工作流中调用

作者简介: 读研期间发表6篇SCI数据算法相关论文,目前在某研究院从事数据算法相关研究工作,结合自身科研实践经历持续分享关于Python、数据分析、特征工程、机器学习、深度学习、人工智能系列基础知识与案例。关注gzh:数据杂坛,获取数据和源码学习更多内容。

原文链接:

【Python大语言模型系列】Dify 开发一个自定义工具并在工作流中直接调用(完整案例)

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容