Skip to main content
本文档由 AI 自动翻译。如有任何不准确之处,请参考 英文原版
自定义模型 是指你自行部署或配置的大语言模型。本指南以 Xinference 为例,演示如何将自定义模型集成到你的 模型插件 中。 默认情况下,自定义模型自动包含 模型类型模型名称 两个参数,因此供应商 YAML 文件无需额外定义。 你无需在供应商配置文件中实现 validate_provider_credential。运行时,Dify 会根据用户选择的模型类型和模型名称,调用相应模型层的 validate_credentials 方法。

集成自定义模型插件

集成自定义模型分为四个步骤:
  1. 创建模型供应商文件:确定自定义模型将包含的模型类型。
  2. 按模型类型创建代码文件:为每种模型类型(例如 llmtext_embedding)创建单独的代码文件。将每种模型类型保留在各自的逻辑层中,可简化维护和后续扩展。
  3. 开发模型调用逻辑:在每个模型类型模块中,创建一个以该模型类型命名的 Python 文件(例如 llm.py)。在文件中定义一个类,实现符合系统模型接口规范的模型逻辑。
  4. 调试插件:为新的供应商功能编写单元测试和集成测试,确保所有组件按预期工作。

1. 创建模型供应商文件

在插件的 /provider 目录中,创建一个 xinference.yaml 文件。 Xinference 系列模型支持 LLMText EmbeddingRerank 模型类型,因此 xinference.yaml 必须包含全部三种类型。 示例
接下来,定义 provider_credential_schema。由于 Xinference 支持文本生成、嵌入和重排序模型,可按如下方式配置:
Xinference 中的每个模型都需要一个 model_name
由于 Xinference 在本地部署,用户还须提供服务器地址(server_url)和模型 UID:
至此,自定义模型供应商的 YAML 配置完成。接下来,为配置中定义的每个模型创建代码文件。

2. 开发模型代码

Xinference 支持 llmrerankspeech2texttts,因此需在 /models 下为每种类型创建相应的目录,每个目录包含其功能代码。 以下是 llm 类型模型的示例。创建一个名为 llm.py 的文件,然后定义一个继承自 __base.large_language_model.LargeLanguageModel 的类,例如 XinferenceAILargeLanguageModel。该类必须实现以下方法。

LLM 调用

调用 LLM 的核心方法,支持流式和同步响应:
将流式和同步响应实现为两个独立的函数。Python 将任何包含 yield 的函数视为返回 Generator 的生成器,因此分开实现可保持返回类型清晰:

预计算输入 Token

如果模型不提供 token 计数接口,返回 0
或者,可从 AIModel 基类调用 self._get_num_tokens_by_gpt2(text: str),它使用 GPT-2 分词器。注意这只是一个近似值,可能与你的模型不完全匹配。

验证模型凭据

类似于供应商级别的凭据检查,但范围限定于单个模型:

动态模型参数模式

预定义模型 不同,没有 YAML 文件定义模型支持哪些参数,因此你必须动态生成参数模式。 例如,Xinference 支持 max_tokenstemperaturetop_p。其他供应商(例如 OpenLLM)可能仅对部分模型支持 top_k 等参数,因此模式必须适配每个模型的能力:

错误映射

当模型调用过程中发生错误时,将其映射到运行时的某个 InvokeError 类型,以便 Dify 统一处理不同的错误:
  • InvokeConnectionError
  • InvokeServerUnavailableError
  • InvokeRateLimitError
  • InvokeAuthorizationError
  • InvokeBadRequestError
接口方法的更多细节,参见 模型文档 本指南所述的完整代码文件,参见 GitHub 仓库

3. 调试插件

开发完成后,测试插件以确保其正常运行。详见:

调试插件

4. 发布插件

如需将插件上架到 Dify 市场,参见「发布到 Dify 市场」。

探索更多

快速开始 插件端点文档
Last modified on June 24, 2026