validate_provider_credential。Runtime 会根据用户选择的模型类型或模型名称,自动调用对应模型层的 validate_credentials 方法进行验证。
接入自定义模型插件
接入自定义模型分为以下步骤:- 创建模型供应商文件 明确自定义模型中所包含的模型类型。
-
根据模型类型创建代码文件
根据模型的类型(如
llm或text_embedding)创建代码文件。确保每种模型类型有独立的逻辑分层,便于维护和扩展。 - 根据不同的模型模块,编写模型调用代码 在对应的模型类型模块下,创建一个与模型类型同名的 Python 文件(例如 llm.py)。在文件中定义实现具体模型逻辑的类,该类应符合系统的模型接口规范。
- 调试插件 为新增的供应商功能编写单元测试和集成测试,确保所有功能模块符合预期,并能够正常运行。
1. 创建模型供应商文件
在插件项目的/provider 路径下,新建 xinference.yaml 文件。
Xinference 家族模型支持 LLM``,Text Embedding 和 Rerank 模型类型,因此需要在 xinference.yaml 文件中包含上述模型类型。
示例代码:
provider_credential_schema 字段。Xinference 支持 text-generation,embeddings 和 reranking 模型,示例代码如下:
model_name。
2. 编写模型代码
Xinference 模型供应商的模型类型包含 llm、rerank、speech2text、tts 类型,因此需要在 /models 路径下为每个模型类型创建独立的分组,并创建对应的功能代码文件。 下文将以 llm 类型为例,说明如何创建llm.py 代码文件。创建代码时需创建一个 Xinference LLM 类,可以取名为 XinferenceAILargeLanguageModel,继承 __base.large_language_model.LargeLanguageModel 基类,实现以下几个方法:
- LLM 调用
yield 的关键字函数识别为生成器函数,返回的数据类型固定为 Generator,因此需要分别实现同步和流式返回,例如以下示例代码:
该示例使用了简化参数,实际编写代码时需参考上文中的参数列表。
- 预计算输入 Tokens
self._get_num_tokens_by_gpt2(text: str) 方法计算 tokens。该方法位于 AIModel 基类中,使用 GPT-2 的 Tokenizer 进行计算。但请注意,这是一个替代方案,计算结果可能存在一定误差。
- 模型凭据校验
- 模型参数 Schema
max_tokens、temperature 和 top_p 三种模型参数。然而一些供应商(例如 OpenLLM)会根据具体模型支持不同的参数。
举例来说,供应商 OpenLLM 的 A 模型支持 top_k 参数,而 B 模型则不支持 top_k。在该情况下,需要动态生成每个模型对应的参数 Schema,示例代码如下:
- 调用异常错误映射表
InvokeError 类型,方便 Dify 针对不同错误做不同后续处理。
Runtime Errors:
InvokeConnectionError调用连接错误InvokeServerUnavailableError调用服务方不可用InvokeRateLimitError调用达到限额InvokeAuthorizationError调用鉴权失败InvokeBadRequestError调用传参有误
3. 调试插件
插件开发完成后,接下来需测试插件是否可以正常运行。详细说明请参考: debug-plugin.md4. 发布插件
如果想要将插件发布至 Dify Marketplace,请参考以下内容: publish-to-dify-marketplace探索更多
快速开始: 插件接口文档:- Manifest 结构
- Endpoint 详细定义
- 反向调用 Dify 能力
- 工具
- 模型
编辑此页面 | 提交问题