"工具"
关于工具
在 Discord 群中, 很多的问题都是围绕"工具"展开的.
我可以透露的是, “工具"正在进行一次格式和生态的调整.
这里有几个建议带给大家:
未来
未来可能会有更清晰和更简单的"工具"的开发, 以及可能会有"工具商店"之类的出现.
现在
工作流
我们的工作流"发布为工具"是个潜力巨大的功能, 我将在 Cookbook 带头示范 😁.
一些能用 jinjia2, httpx, requests, 以及其他 python3.10 自带库就能解决了的事情, 很建议"工作流发布为工具”.
- 我将做一个 Cookbook, 用工具流实现一个永久存储的功能
- 我也将讲解 Code Block (主要 python)的一些特性
- 我将开源一个 prompt, 用于生成 Code Block 里的代码
内置工具
“内置工具"的开发其实比较复杂, 以及官方目前的说明书有些混乱和零散 - 虽然能提供足够的信息, 但是东一榔头, 西一棒子…
这里既是劝退, 也是给有需要的一个简单的指路:
- 需要你了解工具代码的格式规范 https://docs.dify.ai/v/zh-hans/guides/gong-ju/quick-tool-integration
- 代码完成后, 在 Docker 里启动是不行的, 你需要本地源码启动
- 你可以跳过前端页面部署, 改而直接 docker 前端
- 提交 PR, 等待审核
- 在新版本更新时, 你的工具可能会被合并进去.
- 如果能顺利地合并进 Dify 的主代码仓库中, 那么恭喜! 你的工具终于可以用了.
- 代码是 python
- 你的变量等参数配置要手动选好
- 目前没有给提供详细说明书的渠道.
- 工具提供了丰富的脚手架, 比如 summary. 但是它们可能涉及到调用"系统推理模型”.
- 不同的模型会带来不同的效果, 有时候是不安全的.
- 比如"系统推理模型"欠费或者被停用了, 这个工具很可能会报错.
下面简单提供一点代码的示例:
from core.tools.entities.tool_entities import ToolInvokeMessage, ToolProviderType
from core.tools.tool.tool import Tool
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
from core.tools.errors import ToolProviderCredentialValidationError
from core.tools.provider.builtin.google.tools.google_search import GoogleSearchTool
from typing import Any, Dict
class GoogleProvider(BuiltinToolProviderController):
def _validate_credentials(self, credentials: Dict[str, Any]) -> None:
try:
# 1. 此处需要使用 GoogleSearchTool()实例化一个 GoogleSearchTool,它会自动加载 GoogleSearchTool 的 yaml 配置,但是此时它内部没有凭据信息
# 2. 随后需要使用 fork_tool_runtime 方法,将当前的凭据信息传递给 GoogleSearchTool
# 3. 最后 invoke 即可,参数需要根据 GoogleSearchTool 的 yaml 中配置的参数规则进行传递
GoogleSearchTool().fork_tool_runtime(
meta={
"credentials": credentials,
}
).invoke(
user_id='',
tool_paramters={
"query": "test",
"result_type": "link"
},
)
except Exception as e:
raise ToolProviderCredentialValidationError(str(e))您写出来的代码, 会是这个样子的 👆
如果您需要新的依赖库的安装, 那您确实会仍然需要进行"工具"的开发和代码的提交.
心动不如行动.