高级接入工具
在开始接入工具之前,请确保你已经阅读过快速接入,并对 Dify 的工具接入流程有了基本的了解。
工具接口
我们在Tool
类中定义了一系列快捷方法,用于帮助开发者快速构较为复杂的工具。
消息返回
Dify支持文本
链接
图片
文件BLOB
等多种消息类型,你可以通过以下几个接口返回不同类型的消息给 LLM 和用户。
注意,在下面的接口中的部分参数将在后面的章节中介绍。
图片URL
只需要传递图片的URL即可,Dify会自动下载图片并返回给用户。
链接
如果你需要返回一个链接,可以使用以下接口。
文本
如果你需要返回一个文本消息,可以使用以下接口。
文件 BLOB
如果你需要返回文件的原始数据,如图片、音频、视频、PPT、Word、Excel 等,可以使用以下接口。
blob
文件的原始数据,bytes 类型meta
文件的元数据,如果你知道该文件的类型,最好传递一个mime_type
,否则Dify将使用octet/stream
作为默认类型
快捷工具
在大模型应用中,我们有两种常见的需求:
- 先将很长的文本进行提前总结,然后再将总结内容传递给 LLM,以防止原文本过长导致 LLM 无法处理
- 工具获取到的内容是一个链接,需要爬取网页信息后再返回给 LLM
为了帮助开发者快速实现这两种需求,我们提供了以下两个快捷工具。
文本总结工具
该工具需要传入 user_id 和需要进行总结的文本,返回一个总结后的文本,Dify 会使用当前工作空间的默认模型对长文本进行总结。
网页爬取工具
该工具需要传入需要爬取的网页链接和一个 user_agent(可为空),返回一个包含该网页信息的字符串,其中user_agent
是可选参数,可以用来识别工具,如果不传递,Dify将使用默认的user_agent
。
变量池
我们在Tool
中引入了一个变量池,用于存储工具运行过程中产生的变量、文件等,这些变量可以在工具运行过程中被其他工具使用。
下面,我们以DallE3
和Vectorizer.AI
为例,介绍如何使用变量池。
DallE3
是一个图片生成工具,它可以根据文本生成图片,在这里,我们将让DallE3
生成一个咖啡厅的 Logo。Vectorizer.AI
是一个矢量图转换工具,它可以将图片转换为矢量图,使得图片可以无限放大而不失真,在这里,我们将DallE3
生成的PNG图标转换为矢量图,从而可以真正被设计师使用。
DallE3
首先我们使用 DallE3,在创建完图片以后,我们将图片保存到变量池中,代码如下
我们可以注意到这里我们使用了self.VARIABLE_KEY.IMAGE.value
作为图片的变量名,为了便于开发者们的工具能够互相配合,我们定义了这个KEY
,大家可以自由使用,也可以不使用这个KEY
,传递一个自定义的KEY也是可以的。
Vectorizer.AI
接下来我们使用 Vectorizer.AI,将 DallE3 生成的PNG图标转换为矢量图,我们先来过一遍我们在这里定义的函数,代码如下
接下来我们来实现这三个函数
可以注意到的是,我们这里其实并没有使用到image_id
,我们已经假设了调用这个工具的时候一定有一张图片在默认的变量池中,所以直接使用了image_binary = self.get_variable_file(self.VARIABLE_KEY.IMAGE)
来获取图片,在模型能力较弱的情况下,我们建议开发者们也这样做,可以有效提升容错率,避免模型传递错误的参数。