module。
当前支持模型类型如下:
llm文本生成模型text_embedding文本 Embedding 模型rerankRerank 模型speech2text语音转文字tts文字转语音moderation审查
Anthropic 为例,Anthropic 仅支持 LLM,因此在 model_providers.anthropic 创建一个 llm 为名称的 module。
对于预定义的模型,我们首先需要在 llm module 下创建以模型名为文件名称的 YAML 文件,如:claude-2.1.yaml。
准备模型 YAML
model_providers 目录下其他供应商对应模型类型目录下的 YAML 配置信息,完整的 YAML 规则见:Schema1。
实现模型调用代码
接下来需要在llm module 下创建一个同名的 python 文件 llm.py 来编写代码实现。
在 llm.py 中创建一个 Anthropic LLM 类,我们取名为 AnthropicLargeLanguageModel(随意),继承 __base.large_language_model.LargeLanguageModel 基类,实现以下几个方法:
-
LLM 调用
实现 LLM 调用的核心方法,可同时支持流式和同步返回。
在实现时,需要注意使用两个函数来返回数据,分别用于处理同步返回和流式返回,因为Python会将函数中包含
yield关键字的函数识别为生成器函数,返回的数据类型固定为Generator,因此同步和流式返回需要分别实现,就像下面这样(注意下面例子使用了简化参数,实际实现时需要按照上面的参数列表进行实现): -
预计算输入 tokens
若模型未提供预计算 tokens 接口,可直接返回 0。
-
模型凭据校验
与供应商凭据校验类似,这里针对单个模型进行校验。
-
调用异常错误映射表
当模型调用异常时需要映射到 Runtime 指定的
InvokeError类型,方便 Dify 针对不同错误做不同后续处理。 Runtime Errors:InvokeConnectionError调用连接错误InvokeServerUnavailableError调用服务方不可用InvokeRateLimitError调用达到限额InvokeAuthorizationError调用鉴权失败InvokeBadRequestError调用传参有误
Footnotes
-
Provider
provider(string) 供应商标识,如:openailabel(object) 供应商展示名称,i18n,可设置en_US英文、zh_Hans中文两种语言zh_Hans(string) [optional] 中文标签名,zh_Hans不设置将默认使用en_US。en_US(string) 英文标签名
description(object) [optional] 供应商描述,i18nzh_Hans(string) [optional] 中文描述en_US(string) 英文描述
icon_small(string) [optional] 供应商小 ICON,存储在对应供应商实现目录下的_assets目录,中英文策略同labelzh_Hans(string) [optional] 中文 ICONen_US(string) 英文 ICON
icon_large(string) [optional] 供应商大 ICON,存储在对应供应商实现目录下的 _assets 目录,中英文策略同 labelzh_Hans(string) [optional] 中文 ICONen_US(string) 英文 ICON
background(string) [optional] 背景颜色色值,例:#FFFFFF,为空则展示前端默认色值。help(object) [optional] 帮助信息title(object) 帮助标题,i18nzh_Hans(string) [optional] 中文标题en_US(string) 英文标题
url(object) 帮助链接,i18nzh_Hans(string) [optional] 中文链接en_US(string) 英文链接
supported_model_types(array[ModelType]) 支持的模型类型configurate_methods(array[ConfigurateMethod]) 配置方式provider_credential_schema(ProviderCredentialSchema) 供应商凭据规格model_credential_schema(ModelCredentialSchema) 模型凭据规格