本文档详细介绍了如何在Dify中接入自定义模型,以Xinference模型为例。文档涉及创建模型供应商文件、根据模型类型编写对应代码、实现模型调用逻辑和异常处理及调试发布等完整流程。特别详细地说明了LLM调用、Token计算、凭证校验和参数生成等核心方法的实现。
validate_provider_credential
。Runtime 会根据用户选择的模型类型或模型名称,自动调用对应模型层的 validate_credentials
方法进行验证。
llm
或 text_embedding
)创建代码文件。确保每种模型类型有独立的逻辑分层,便于维护和扩展。
/provider
路径下,新建 xinference.yaml
文件。
Xinference
家族模型支持 LLM``,Text Embedding
和 Rerank
模型类型,因此需要在 xinference.yaml
文件中包含上述模型类型。
示例代码:
provider_credential_schema
字段。Xinference 支持
text-generation,embeddings 和 reranking 模型,示例代码如下:
model_name
。
llm.py
代码文件。创建代码时需创建一个 Xinference LLM 类,可以取名为 XinferenceAILargeLanguageModel
,继承 __base.large_language_model.LargeLanguageModel
基类,实现以下几个方法:
yield
的关键字函数识别为生成器函数,返回的数据类型固定为 Generator
,因此需要分别实现同步和流式返回,例如以下示例代码:
该示例使用了简化参数,实际编写代码时需参考上文中的参数列表。
self._get_num_tokens_by_gpt2(text: str)
方法计算 tokens。该方法位于 AIModel
基类中,使用 GPT-2 的 Tokenizer 进行计算。但请注意,这是一个替代方案,计算结果可能存在一定误差。
max_tokens
、temperature
和 top_p
三种模型参数。然而一些供应商(例如 OpenLLM)会根据具体模型支持不同的参数。
举例来说,供应商 OpenLLM
的 A 模型支持 top_k
参数,而 B 模型则不支持 top_k
。在该情况下,需要动态生成每个模型对应的参数 Schema,示例代码如下:
InvokeError
类型,方便 Dify 针对不同错误做不同后续处理。
Runtime Errors:
InvokeConnectionError
调用连接错误InvokeServerUnavailableError
调用服务方不可用InvokeRateLimitError
调用达到限额InvokeAuthorizationError
调用鉴权失败InvokeBadRequestError
调用传参有误