本文档指导非专业开发者如何为Dify添加新模型,重点在于通过修改配置文件为现有模型供应商添加新型号模型。包括Fork仓库、复制与修改模型配置、更新供应商版本、本地测试以及提交贡献的完整流程。
欢迎来到 Dify 的插件开发世界!Dify 的强大功能离不开社区贡献者的共同努力。我们相信,即使你不是专业的程序员,只要你对 AI 技术充满热情并愿意查阅资料,也能为 Dify 贡献自己的一份力量,例如帮助 Dify 支持更多、更新的 AI 模型。
本文将以最简明的方式,带你完成最常见也最简单的贡献:为一个 Dify 已经支持的模型供应商,添加一个新型号的模型。这种方式通常只需要修改配置文件,无需编写代码,非常适合作为你的第一个贡献!
相关概念:在开始前,建议你阅读模型插件文档,了解模型插件的基本概念和结构。
这种快速接入方式适用于:
(如果你需要添加的模型需要新的 API 逻辑或支持特殊功能,那将涉及到 Python 代码编写,请参考 创建新模型提供者 获取更详细的指南。)
准备工作:
操作步骤:
Fork & Clone 官方插件仓库:
https://github.com/langgenius/dify-official-plugins
。找到并复制模型配置文件:
models/
目录下,找到你想要添加模型的供应商文件夹,例如 vertex_ai
。models/llm/
(如果是文本生成模型)。gemini-1.0-pro-001.yaml
)。gemini-1.5-pro-latest.yaml
)。修改模型配置 (YAML):
gemini-1.5-pro-latest.yaml
)。model
: 必须更新为新型号的官方 API 标识符。label
: 必须更新为在 Dify 界面中展示给用户的模型名称 (建议提供 en_US
和 zh_Hans
两种语言)。model_properties
: 更新 context_size
(上下文窗口大小)。parameter_rules
: 检查并更新模型参数的限制,特别是 max_tokens
(最大输出 Token 数) 的 default
, min
, max
值。pricing
: 更新模型的输入 (input
) 和输出 (output
) 定价,以及单位 (unit
, 通常是 0.000001
表示百万 Token) 和货币 (currency
)。示例 (添加 Gemini 1.5 Pro):
参数 | 可能的旧模型 (示例) | 新 Gemini 1.5 Pro (示例) | 说明 |
---|---|---|---|
model | gemini-1.0-pro-001 | gemini-1.5-pro-latest | 必须修改为官方模型 ID |
label: en_US | Gemini 1.0 Pro | Gemini 1.5 Pro | 必须修改为用户可见标签 |
context_size | 30720 | 1048576 | 必须根据官方文档修改 |
max_tokens (下) | 2048 | 8192 | 必须根据官方文档修改默认/最大值 |
更新供应商 Manifest 版本:
models/vertex_ai/
)。manifest.yaml
文件。version
字段递增一个小版本号 (例如 version: 0.0.8
-> version: 0.0.9
)。这告诉 Dify 这是一个更新。打包与本地测试:
dify-official-plugins
仓库的根目录 (即包含 models
, tools
等文件夹的那个目录)。plugin packaged successfully, output path: <provider_name>.difypkg
的提示,并在当前项目根目录下生成一个名为 <provider_name>.difypkg
的插件包文件。<provider_name>.difypkg
文件进行上传。提交你的贡献:
manifest.yaml
)通过 Git 提交 (commit) 并推送 (push) 到你 Fork 的 GitHub 仓库。langgenius/dify-official-plugins
主仓库发起一个 Pull Request (PR)。在 PR 描述中,可以简要说明你添加了哪个模型,并附上该模型官方文档的链接,方便审核者确认参数。然后呢?
一旦你的 PR 被审核通过并合并,你的贡献就会成为 Dify 官方插件的一部分,所有 Dify 用户都能方便地使用这个新模型了!
这种快速接入方法是让 Dify 支持新模型的最快途径。当然,如果未来这个模型需要支持更复杂的功能(例如图片输入、函数调用等),那么可能就需要有经验的开发者对插件进行代码层面的更新了。但你现在完成的这一步,已经是非常有价值的贡献!
探索更多:
manifest.yaml
的作用)