原文地址: https://zhuzhulang.github.io/blog/posts/how-to-add-custom-providers/
之前介绍了如何搭建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,预计算输入 tokens
- validate_credentials,模型凭据校验
- _invoke_error_mapping,调用异常错误映射表
相关的代码这里就赘述了,完整的代码可以参考。
最后是更新后的效果,成功出现了自己定义的模型提供商:
配置出现如下的页面:
可以说,整个过程还是很简单的,只需要按照说明进行操作即可。
参考文章:
https://docs.dify.ai/zh-hans/guides/model-configuration/new-provider
https://docs.dify.ai/zh-hans/guides/model-configuration/predefined-model
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |