快速接入工具
这里我们以 GoogleSearch 为例,介绍如何快速接入一个工具。
1. 准备工具供应商 yaml
介绍
这个 yaml 将包含工具供应商的信息,包括供应商名称、图标、作者等详细信息,以帮助前端灵活展示。
示例
我们需要在 core/tools/provider/builtin
下创建一个google
模块(文件夹),并创建google.yaml
,名称必须与模块名称一致。
后续,我们关于这个工具的所有操作都将在这个模块下进行。
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-input
、text-input
、select
三种类型,分别对应密码输入框、文本输入框、下拉框,如果为secret-input
,则会在前端隐藏输入内容,并且后端会对输入内容进行加密。
3. 准备工具 yaml
一个供应商底下可以有多个工具,每个工具都需要一个 yaml 文件来描述,这个文件包含了工具的基本信息、参数、输出等。
仍然以 GoogleSearch 为例,我们需要在google
模块下创建一个tools
模块,并创建tools/google_search.yaml
,内容如下。
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 自行推理和前端填写
4. 准备工具代码
当完成工具的配置以后,我们就可以开始编写工具代码了,主要用于实现工具的逻辑。
在google/tools
模块下创建google_search.py
,内容如下。
参数
工具的整体逻辑都在_invoke
方法中,这个方法接收两个参数:user_id
和tool_Parameters
,分别表示用户 ID 和工具参数
返回数据
在工具返回时,你可以选择返回一个消息或者多个消息,这里我们返回一个消息,使用create_text_message
和create_link_message
可以创建一个文本消息或者一个链接消息。
5. 准备供应商代码
最后,我们需要在供应商模块下创建一个供应商类,用于实现供应商的凭据验证逻辑,如果凭据验证失败,将会抛出ToolProviderCredentialValidationError
异常。
在google
模块下创建google.py
,内容如下。
完成
当上述步骤完成以后,我们就可以在前端看到这个工具了,并且可以在 Agent 中使用这个工具。
当然,因为 google_search 需要一个凭据,在使用之前,还需要在前端配置它的凭据。