码力全开 / Dify二次开发-新增模型提供商

Created Tue, 20 May 2025 15:16:54 +0800 Modified Mon, 26 May 2025 09:05:00 +0800
899 Words 1 min   Total Page Views:

前言

之前介绍了如何搭建Dify的环境,可以说是非常的简单,没什么难度。下面开始正式进行Dify的二次开发,预计要分多篇文章来叙述了。 整体来说,二次Dify开发难度并不大,可能会有一些坑,但是对于经验丰富的我来说都不成问题。不知道谁说Dify是高级Python工程师应有的水平,我只能呵呵了。 废话不多说,这里先实现个小小的目标,自定义模型服务商吧。首先提前申明下下面的代码是基于0.15.3的。 在官方文档中有如下这么一个提示:

image

相关内容可以参考。可以看到,如果要使用插件功能,只能升级到1.0.0版本。而且Dify这个项目更新很快,换句话说就是很不稳定。

新增模型提供商

下面开始正式的操作。先创建1个doga的包,主要是纪念如下的人物:

image

这里没什么恶意,仅仅是学习而已。整个包的目录结构如下:

doga                                  
├── _assets                           
│   ├── icon_l_en.png                 
│   └── icon_s_en.png                 
├── doga.py                           
├── doga.yaml                         
├── __init__.py                       
└── llm                               
    ├── doga-1.0.yaml                 
    ├── __init__.py                   
    └── llm.py                        

其中_assets目录用于存储logo,而dogma.yaml是配置文件。 在doga.yaml中先定义如下的内容:

provider: doga
label:
  en_US: Doga
  zh_Hans: 卡波苏
description:
   zh_Hans: 卡波苏模型
   en_US: doga model
icon_small:
  en_US: icon_s_en.png
  zh_Hans: icon_s_en.png
icon_large:
  en_US: icon_l_en.png
  zh_Hans: icon_l_en.png
background: "#93c5fd"
supported_model_types:
  - llm
configurate_methods:
  - predefined-model
provider_credential_schema:
  credential_form_schemas:
    - variable: doga_api_key
      label:
        en_US: API Key
      type: secret-input
      required: true
      placeholder:
        zh_Hans: 请在此输入您的API Key
        en_US: Please enter your API Key
    - variable: doga_endpoint_url
      label:
        zh_Hans: 自定义API endpoint地址
        en_US: Custom API endpoint URL
      type: text-input
      required: false
      placeholder:
        zh_Hans: Base URL, e.g. https://api.example.com/v1
        en_US: Base URL, e.g. https://api.example.com/v1

相关的说明可以查看参考文章中的链接。由于该模态只支持LLM对话,因此只有llm子包,其中的llm.py中需要实现一个继承自LargeLanguageModel的自定义类,该类需要实现如下一些方法:

  • _invoke,模型运行调用
  • get_num_tokens,预计算输入 tokens
  • validate_credentials,模型凭据校验
  • _invoke_error_mapping,调用异常错误映射表

相关的代码这里就赘述了,完整的代码可以参考

最终效果

最后是更新后的效果,成功出现了自己定义的模型提供商:

image

配置出现如下的页面:

image

输入对应的API key后,我们创建一个空白的应用进行测试:

image

选择新增的模型提供商,再输入相应的内容可以看到如下的结果:

image

可以说,整个过程还是很简单的,只需要按照说明进行操作即可。

参考文章:

https://docs.dify.ai/zh-hans/guides/model-configuration/new-provider

https://docs.dify.ai/zh-hans/guides/model-configuration/predefined-model

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