找回密码
 立即注册
首页 业界区 安全 来咯,围观下如何Dify二次开发

来咯,围观下如何Dify二次开发

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

相关内容可以参考。可以看到,如果要使用插件功能,只能升级到1.0.0版本。而且Dify这个项目更新很快,换句话说就是很不稳定。
下面开始正式的操作。先创建1个doga的包,主要是纪念如下的人物:
2.png

这里没什么恶意,仅仅是学习而已。整个包的目录结构如下:
  1. doga                                 
  2. ├── _assets                           
  3. │   ├── icon_l_en.png                 
  4. │   └── icon_s_en.png                 
  5. ├── doga.py                           
  6. ├── doga.yaml                        
  7. ├── __init__.py                       
  8. └── llm                              
  9.     ├── doga-1.0.yaml                 
  10.     ├── __init__.py                  
  11.     └── llm.py                        
复制代码
其中_assets目录用于存储logo,而dogma.yaml是配置文件。
在doga.yaml中先定义如下的内容:
  1. provider: doga
  2. label:
  3.   en_US: Doga
  4.   zh_Hans: 卡波苏
  5. description:
  6.    zh_Hans: 卡波苏模型
  7.    en_US: doga model
  8. icon_small:
  9.   en_US: icon_s_en.png
  10.   zh_Hans: icon_s_en.png
  11. icon_large:
  12.   en_US: icon_l_en.png
  13.   zh_Hans: icon_l_en.png
  14. background: "#93c5fd"
  15. supported_model_types:
  16.   - llm
  17. configurate_methods:
  18.   - predefined-model
  19. provider_credential_schema:
  20.   credential_form_schemas:
  21.     - variable: doga_api_key
  22.       label:
  23.         en_US: API Key
  24.       type: secret-input
  25.       required: true
  26.       placeholder:
  27.         zh_Hans: 请在此输入您的API Key
  28.         en_US: Please enter your API Key
  29.     - variable: doga_endpoint_url
  30.       label:
  31.         zh_Hans: 自定义API endpoint地址
  32.         en_US: Custom API endpoint URL
  33.       type: text-input
  34.       required: false
  35.       placeholder:
  36.         zh_Hans: Base URL, e.g. https://api.example.com/v1
  37.         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,调用异常错误映射表
相关的代码这里就赘述了,完整的代码可以参考。
最后是更新后的效果,成功出现了自己定义的模型提供商:
3.png

配置出现如下的页面:
4.png

可以说,整个过程还是很简单的,只需要按照说明进行操作即可。
参考文章:
https://docs.dify.ai/zh-hans/guides/model-configuration/new-provider
https://docs.dify.ai/zh-hans/guides/model-configuration/predefined-model

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册