前言
之前介绍了如何搭建Dify的环境,可以说是非常的简单,没什么难度。下面开始正式进行Dify的二次开发,预计要分多篇文章来叙述了。
整体来说,二次Dify开发难度并不大,可能会有一些坑,但是对于经验丰富的我来说都不成问题。不知道谁说Dify是高级Python工程师应有的水平,我只能呵呵了。
废话不多说,这里先实现个小小的目标,自定义模型服务商吧。首先提前申明下下面的代码是基于0.15.3
的。
在官方文档中有如下这么一个提示:
相关内容可以参考。可以看到,如果要使用插件功能,只能升级到1.0.0
版本。而且Dify这个项目更新很快,换句话说就是很不稳定。
新增模型提供商
下面开始正式的操作。先创建1个doga的包,主要是纪念如下的人物:
这里没什么恶意,仅仅是学习而已。整个包的目录结构如下:
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
,预计算输入 tokensvalidate_credentials
,模型凭据校验_invoke_error_mapping
,调用异常错误映射表
相关的代码这里就赘述了,完整的代码可以参考。
最终效果
最后是更新后的效果,成功出现了自己定义的模型提供商:
配置出现如下的页面:
输入对应的API key后,我们创建一个空白的应用进行测试:
选择新增的模型提供商,再输入相应的内容可以看到如下的结果:
可以说,整个过程还是很简单的,只需要按照说明进行操作即可。
参考文章:
https://docs.dify.ai/zh-hans/guides/model-configuration/new-provider
https://docs.dify.ai/zh-hans/guides/model-configuration/predefined-model

