动手学Dify:自定义工具与沙盒
工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。Dify 提供了两种工具类型:第一方工具和自定义工具。
可以直接使用 Dify 生态提供的第一方内置工具,或者轻松导入自定义的 API 工具(目前支持 OpenAPI / Swagger 和 OpenAI Plugin 规范)。
https://docs.dify.ai/zh-hans/guides/tools/readme
https://docs.dify.ai/zh-hans/plugins/introduction
工具的作用
-
工具使用户可以在 Dify 上创建更强大的 AI 应用,如你可以为智能助理型应用(Agent)编排合适的工具,它可以通过任务推理、步骤拆解、调用工具完成复杂任务。
-
方便将你的应用与其他系统或服务连接,与外部环境交互,如代码执行、对专属信息源的访问等。工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。Dify 提供了两种工具类型:第一方工具和自定义工具。
配置第一方工具
若你需要直接使用 Dify 生态提供的第一方内置工具,你需要在使用前配置相应的凭据。
凭据校验成功后工具会显示“已授权”状态。配置凭据后,工作区中的所有成员都可以在编排应用程序时使用此工具。
工具 | 工具描述 |
---|---|
谷歌搜索 | 用于执行 Google SERP 搜索并提取片段和网页的工具。输入应该是一个搜索查询 |
维基百科 | 用于执行维基百科搜索并提取片段和网页的工具。 |
DALL-E 绘画 | 用于通过自然语言输入生成高质量图片 |
网页抓取 | 用于爬取网页数据的工具 |
WolframAlpha | 一个强大的计算知识引擎,能根据问题直接给出标准化答案,同时具有强大的数学计算功能 |
图表生成 | 用于生成可视化图表的工具,你可以通过它来生成柱状图、折线图、饼图等各类图表 |
当前时间 | 用于查询当前时间的工具 |
雅虎财经 | 获取并整理出最新的新闻、股票报价等一切你想要的财经信息。 |
Stable Diffusion | 一个可以在本地部署的图片生成的工具,你可以使用 stable-diffusion-webui 来部署它 |
Vectorizer | 一个将 PNG 和 JPG 图像快速轻松地转换为 SVG 矢量图的工具。 |
YouTube | 一个用于获取油管频道视频统计数据的工具 |
如何创建自定义工具
可以在“工具-自定义工具”内导入自定义的 API 工具,目前支持 OpenAPI / Swagger 和 ChatGPT Plugin 规范。
可以将 OpenAPI schema 内容直接粘贴或从 URL 内导入。关于 OpenAPI / Swagger 规范你可以查看官方文档说明。
第三方模型与工具(插件)
插件是 Dify 平台的扩展模块,让你可以轻松地接入第三方模型与工具,显著提升应用能力。通过插件系统,你的 AI 应用能够更好地”看”、“听”、“说”、“画”、“计算”、“推理”,并连接外部 API,执行真实世界的操作。
新的插件系统突破了原有框架的限制,提供更丰富和强大的扩展能力。提供五种类型插件,每一种类型对应成熟的场景解决方案,赋予开发者用无限的创意改造 Dify 应用的空间。 同时,插件系统也为用户提供了便捷的功能扩展方式:
-
即插即用:通过 Dify Marketplace 或本地文件安装,无需编程知识即可使用强大的功能扩展。
-
丰富生态:访问由开发者社区贡献的各类插件,涵盖模型接入、工具集成、智能策略等多个方面。
-
灵活分享:可以通过 Dify Marketplace、GitHub 或本地文件的形式获取和分享插件。
插件支持的类型
-
Models(模型)各类 AI 模型的接入插件,让你能够轻松使用不同的 AI 模型,无需复杂的配置过程。
-
Tools(工具)能够被 Chatflow / Workflow / Agent 类型应用所调用的第三方服务,用于增强 Dify 应用的能力。
-
Agent 策略为 Agent 节点提供不同的推理和决策逻辑,优化工具选择和结果处理。
-
Extensions(扩展)通过简单的 HTTP 服务调用即可使用的轻量级扩展功能。
-
Bundle(插件包)预先组合好的插件集合,可以一次性安装多个相关插件,简化配置流程。
Dify沙盒
DifySandbox
是一个轻量、快速、安全的代码运行环境,支持多种编程语言,包括 Python
、Nodejs
等,用户在 Dify Workflow
中使用到的如 Code
节点、Template Transform
节点、LLM
节点的 Jinja2 语法、Tool
节点的 Code Interpreter
等都基于 DifySandbox 运行,它确保了 Dify
可以运行用户代码的前提下整个系统的安全性。
https://docs.dify.ai/zh-hans/development/backend/sandbox/README
-
多语言支持:
DifySandbox
基于Seccomp
,这是一个系统层级的解决方案,从而确保了可以支持多种编程语言,目前支持了Python
与Nodejs
。 -
系统安全:使用白名单策略,只允许运行特定的系统调用,从而确保不会出现意外的绕过。
-
文件系统隔离:用户代码将运行在一个独立的隔离的文件系统中。
-
网络隔离:
-
DockerCompose:独立网络 Sandbox 网络,并使用代理容器进行网络访问,确保内网系统的安全,同时提供了灵活的代理配置方案。
-
K8s:直接使用
Egress
配置网络隔离策略即可。
-
DifySandbox 已预先配置了以下 Python 依赖:
-
http
- 基础网络请求库 -
jinja2
- 模板引擎,用于 LLM 提示词处理 -
requests
- HTTP 客户端库
若需要额外的 Python 依赖,请遵循以下步骤
-
找到项目根目录下的
dependencies/python-requirements.txt
文件。 -
在文件中添加所需的依赖包名及版本。若涉及权限变更,请参考**常见问题。
-
重新构建 DifySandbox。