validate_provider_credential。运行时,Dify 会根据用户选择的模型类型和模型名称,调用相应模型层的 validate_credentials 方法。
集成自定义模型插件
集成自定义模型分为四个步骤:- 创建模型供应商文件:确定自定义模型将包含的模型类型。
- 按模型类型创建代码文件:为每种模型类型(例如
llm或text_embedding)创建单独的代码文件。将每种模型类型保留在各自的逻辑层中,可简化维护和后续扩展。 - 开发模型调用逻辑:在每个模型类型模块中,创建一个以该模型类型命名的 Python 文件(例如
llm.py)。在文件中定义一个类,实现符合系统模型接口规范的模型逻辑。 - 调试插件:为新的供应商功能编写单元测试和集成测试,确保所有组件按预期工作。
1. 创建模型供应商文件
在插件的/provider 目录中,创建一个 xinference.yaml 文件。
Xinference 系列模型支持 LLM、Text Embedding 和 Rerank 模型类型,因此 xinference.yaml 必须包含全部三种类型。
示例:
provider_credential_schema。由于 Xinference 支持文本生成、嵌入和重排序模型,可按如下方式配置:
model_name:
server_url)和模型 UID:
2. 开发模型代码
Xinference 支持llm、rerank、speech2text 和 tts,因此需在 /models 下为每种类型创建相应的目录,每个目录包含其功能代码。
以下是 llm 类型模型的示例。创建一个名为 llm.py 的文件,然后定义一个继承自 __base.large_language_model.LargeLanguageModel 的类,例如 XinferenceAILargeLanguageModel。该类必须实现以下方法。
LLM 调用
调用 LLM 的核心方法,支持流式和同步响应:yield 的函数视为返回 Generator 的生成器,因此分开实现可保持返回类型清晰:
预计算输入 Token
如果模型不提供 token 计数接口,返回0:
AIModel 基类调用 self._get_num_tokens_by_gpt2(text: str),它使用 GPT-2 分词器。注意这只是一个近似值,可能与你的模型不完全匹配。
验证模型凭据
类似于供应商级别的凭据检查,但范围限定于单个模型:动态模型参数模式
与 预定义模型 不同,没有 YAML 文件定义模型支持哪些参数,因此你必须动态生成参数模式。 例如,Xinference 支持max_tokens、temperature 和 top_p。其他供应商(例如 OpenLLM)可能仅对部分模型支持 top_k 等参数,因此模式必须适配每个模型的能力:
错误映射
当模型调用过程中发生错误时,将其映射到运行时的某个InvokeError 类型,以便 Dify 统一处理不同的错误:
InvokeConnectionErrorInvokeServerUnavailableErrorInvokeRateLimitErrorInvokeAuthorizationErrorInvokeBadRequestError
3. 调试插件
开发完成后,测试插件以确保其正常运行。详见:调试插件
4. 发布插件
如需将插件上架到 Dify 市场,参见「发布到 Dify 市场」。探索更多
快速开始: 插件端点文档:- Manifest 结构
- Endpoint 定义
- 反向调用 Dify 服务
- 工具
- 模型
Edit this page | Report an issue