快速接入工具

这里我们以 GoogleSearch 为例,介绍如何快速接入一个工具。

1. 准备工具供应商 yaml

介绍

这个 yaml 将包含工具供应商的信息,包括供应商名称、图标、作者等详细信息,以帮助前端灵活展示。

示例

我们需要在 core/tools/provider/builtin下创建一个google模块(文件夹),并创建google.yaml,名称必须与模块名称一致。

后续,我们关于这个工具的所有操作都将在这个模块下进行。

identity: # 工具供应商的基本信息
  author: Dify # 作者
  name: google # 名称,唯一,不允许和其他供应商重名
  label: # 标签,用于前端展示
    en_US: Google # 英文标签
    zh_Hans: Google # 中文标签
    ja_JP: : Google # 日文标签
    pt_BR: : : Google # 葡萄牙文标签
  description: # 描述,用于前端展示
    en_US: Google # 英文描述
    zh_Hans: Google # 中文描述
    ja_JP: : Google # 日文描述
    pt_BR: : Google # 葡萄牙文描述
  icon: icon.svg # 图标,需要放置在当前模块的_assets文件夹下
  • identity 字段是必须的,它包含了工具供应商的基本信息,包括作者、名称、标签、描述、图标等

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

2. 准备供应商凭据

Google 作为一个第三方工具,使用了 SerpApi 提供的 API,而 SerpApi 需要一个 API Key 才能使用,那么就意味着这个工具需要一个凭据才可以使用,而像wikipedia这样的工具,就不需要填写凭据字段,可以参考这里:api/core/tools/provider/builtin/wikipedia/wikipedia.yaml

配置好凭据字段后效果如下:

  • type:凭据字段类型,目前支持secret-inputtext-inputselect 三种类型,分别对应密码输入框、文本输入框、下拉框,如果为secret-input,则会在前端隐藏输入内容,并且后端会对输入内容进行加密。

3. 准备工具 yaml

一个供应商底下可以有多个工具,每个工具都需要一个 yaml 文件来描述,这个文件包含了工具的基本信息、参数、输出等。

仍然以 GoogleSearch 为例,我们需要在google模块下创建一个tools模块,并创建tools/google_search.yaml,内容如下。

  • identity 字段是必须的,它包含了工具的基本信息,包括名称、作者、标签、描述等

  • parameters 参数列表

    • name 参数名称,唯一,不允许和其他参数重名

    • type 参数类型,目前支持stringnumberbooleanselect 四种类型,分别对应字符串、数字、布尔值、下拉框

    • required 是否必填

      • llm模式下,如果参数为必填,则会要求 Agent 必须要推理出这个参数

      • form模式下,如果参数为必填,则会要求用户在对话开始前在前端填写这个参数

    • options 参数选项

      • llm模式下,Dify 会将所有选项传递给 LLM,LLM 可以根据这些选项进行推理

      • form模式下,typeselect时,前端会展示这些选项

    • default 默认值

    • label 参数标签,用于前端展示

    • human_description 用于前端展示的介绍,支持多语言

    • llm_description 传递给 LLM 的介绍,为了使得 LLM 更好理解这个参数,我们建议在这里写上关于这个参数尽可能详细的信息,让 LLM 能够理解这个参数

    • form 表单类型,目前支持llmform两种类型,分别对应 Agent 自行推理和前端填写

4. 准备工具代码

当完成工具的配置以后,我们就可以开始编写工具代码了,主要用于实现工具的逻辑。

google/tools模块下创建google_search.py,内容如下。

参数

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

返回数据

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

5. 准备供应商代码

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

google模块下创建google.py,内容如下。

完成

当上述步骤完成以后,我们就可以在前端看到这个工具了,并且可以在 Agent 中使用这个工具。

当然,因为 google_search 需要一个凭据,在使用之前,还需要在前端配置它的凭据。

Last updated