码力全开 / Dify二次开发-新增工具

Created Sat, 24 May 2025 22:55:27 +0800 Modified Mon, 26 May 2025 09:05:50 +0800
638 Words 1 min   Total Page Views:

前言

之前介绍了如何新增模型提供商,下面继续之前的内容,介绍如何在Dify中新增内置工具。按照之前的做法,本次新增一个Doga Speech的小工具,用于将输入的文本转换为语音输出。

开始操作

首先在dify/api/core/tools/provider/builtin目录下新增1个doga的包:

mkdir dify/api/core/tools/provider/builtin/doga

其中配置doga.yaml中内容如下:

identity:
  author: demo
  name: doga
  label:
    en_US: Doga Speech
    zh_Hans: Doga Speech
  description:
    en_US: a tool for speech synthesis
    zh_Hans: 语音合成小工具
  icon: doga_speech.png
  tags:
    - utilities

如果之前看过新增模型提供商文章的小伙伴,应该对这段代码感觉很熟悉。分别是说明工具的作者、显示的标签、文本说明、图标及类型。 在doga.py模块中实现模型提供商相关认证代码,由于不需要认证,因此其代码如下:

from typing import Any
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController

class DogaProvider(BuiltinToolProviderController):
    def _validate_credentials(self, credentials: dict[str, Any]):
        pass

之后创建1个tools的子包用于表示该工具有哪些功能。由于只有简单的TTS功能,因此目录下doga_speech.yaml的内容如下:

identity:
  name: doga_speech
  author: doga
  label:
    en_US: Doga Speech
    zh_Hans: Doga语音
description:
  human:
    en_US: A tool for speech synthesis
    zh_Hans: 用于语音合成的工具
  llm: A tool for speech synthesis
parameters:
  - name: input_text
    type: string
    required: true
    label:
      en_US: input text
      zh_Hans: 文本输入
    human_description:
      en_US: input text for speech synthesis
      zh_Hans: 用于语音合成的输入文本
    form: form

其中要求用户输入1个文本字段,接收到该字段后在doga_speech.py模块中进行相应的处理并返回对应的内容。

from core.tools.tool.builtin_tool import BuiltinTool
from core.tools.entities.tool_entities import ToolInvokeMessage
from typing import Any, Dict, List, Union

class DogaSpeechTool(BuiltinTool):
    def _invoke(self, tool_Parameters: Dict[str, Any]):
        input_text = tool_Parameters["input_text"]
        if input_text:
            return self.create_text_message("Audio generated successfully")
        return self.create_text_message("Audio generated failed"),

编写完上述代码后,在Dify界面中可以搜索到如下的工具:

image

之后创建1个Agent,其对应的工具添加如下:

image

更多内容可以查看官方文档,本任务相对来说比较基础和简单。

参考文章:

https://docs.dify.ai/zh-hans/guides/tools/quick-tool-integration

如果喜欢这篇文章或对您有帮助,可以:[☕] 请我喝杯咖啡 | [💓] 小额赞助