Skip to main content
这里介绍供应商和各模型类型需要实现的接口方法和参数说明。在开发模型插件前,您可能需要首先阅读模型设计规则和模型插件介绍。

模型供应商

继承 __base.model_provider.ModelProvider 基类,实现以下接口:
  • credentials (object) 凭据信息
凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 定义,传入如:api_key 等。验证失败请抛出 errors.validate.CredentialsValidateFailedError 错误。注:预定义模型需完整实现该接口,自定义模型供应商只需要如下简单实现即可:

模型

模型分为 5 种不同的模型类型,不同模型类型继承的基类不同,需要实现的方法也不同。

通用接口

所有模型均需要统一实现下面 2 个方法:
  • 模型凭据校验
与供应商凭据校验类似,这里针对单个模型进行校验。
参数:
  • model (string) 模型名称
  • credentials (object) 凭据信息
凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 或 model_credential_schema 定义,传入如:api_key 等。验证失败请抛出 errors.validate.CredentialsValidateFailedError 错误。
  • 调用异常错误映射表
当模型调用异常时需要映射到 Runtime 指定的 InvokeError 类型,方便 Dify 针对不同错误做不同后续处理。Runtime Errors:
  • InvokeConnectionError 调用连接错误
  • InvokeServerUnavailableError 调用服务方不可用
  • InvokeRateLimitError 调用达到限额
  • InvokeAuthorizationError 调用鉴权失败
  • InvokeBadRequestError 调用传参有误
也可以直接抛出对应 Erros,并做如下定义,这样在之后的调用中可以直接抛出InvokeConnectionError等异常。

LLM

继承 __base.large_language_model.LargeLanguageModel 基类,实现以下接口:
  • LLM 调用
实现 LLM 调用的核心方法,可同时支持流式和同步返回。
  • 参数:
    • model (string) 模型名称
    • credentials (object) 凭据信息
凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 或 model_credential_schema 定义,传入如:api_key 等。 若模型为 Completion 类型,则列表只需要传入一个 UserPromptMessage 元素即可;若模型为 Chat 类型,需要根据消息不同传入 SystemPromptMessage, UserPromptMessage, AssistantPromptMessage, ToolPromptMessage 元素列表
  • model_parameters (object) 模型参数模型参数由模型 YAML 配置的 parameter_rules 定义。
  • tools (array[PromptMessageTool]) [optional] 工具列表,等同于 function calling 中的 function。即传入 tool calling 的工具列表。
  • stop (array[string]) [optional] 停止序列模型返回将在停止序列定义的字符串之前停止输出。
  • stream (bool) 是否流式输出,默认 True 流式输出返回 Generator[LLMResultChunk],非流式输出返回 LLMResult。
  • user (string) [optional] 用户的唯一标识符可以帮助供应商监控和检测滥用行为。
  • 返回
流式输出返回 Generator[LLMResultChunk],非流式输出返回 LLMResult。
  • 预计算输入 tokens
若模型未提供预计算 tokens 接口,可直接返回 0。
参数说明见上述 LLM 调用。该接口需要根据对应model选择合适的tokenizer进行计算,如果对应模型没有提供tokenizer,可以使用AIModel基类中的_get_num_tokens_by_gpt2(text: str)方法进行计算。
  • 获取自定义模型规则 [可选]
当供应商支持增加自定义 LLM 时,可实现此方法让自定义模型可获取模型规则,默认返回 None。 对于 OpenAI 供应商下的大部分微调模型,可以通过其微调模型名称获取到其基类模型,如gpt-3.5-turbo-1106,然后返回基类模型的预定义参数规则,参考 OpenAI 的具体实现。

TextEmbedding

继承 __base.text_embedding_model.TextEmbeddingModel 基类,实现以下接口:
  • Embedding 调用
  • 参数:
  • model (string) 模型名称
  • credentials (object) 凭据信息
凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 或 model_credential_schema 定义,传入如:api_key 等。
  • texts (array[string]) 文本列表,可批量处理
  • user (string) [optional] 用户的唯一标识符 可以帮助供应商监控和检测滥用行为。
  • 返回:
TextEmbeddingResult 实体。
  • 预计算 tokens
参数说明见上述 Embedding 调用。 同上述 LargeLanguageModel,该接口需要根据对应 model 选择合适的 tokenizer 进行计算,如果对应模型没有提供 tokenizer,可以使用AIModel基类中的_get_num_tokens_by_gpt2(text: str)方法进行计算。

Rerank

继承 __base.rerank_model.RerankModel 基类,实现以下接口:
  • rerank 调用
  • 参数:
  • model (string) 模型名称
  • credentials (object) 凭据信息 凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 或 model_credential_schema 定义,传入如:api_key 等。
  • query (string) 查询请求内容
  • docs (array[string]) 需要重排的分段列表
  • score_threshold (float) [optional] Score 阈值
  • top_n (int) [optional] 取前 n 个分段
  • user (string) [optional] 用户的唯一标识符 可以帮助供应商监控和检测滥用行为。
  • 返回:
RerankResult 实体。

Speech2text

继承 __base.speech2text_model.Speech2TextModel 基类,实现以下接口:
  • Invoke 调用
  • 参数:
  • model (string) 模型名称
  • credentials (object) 凭据信息 凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 或 model_credential_schema 定义,传入如:api_key 等。
  • file (File) 文件流
  • user (string) [optional] 用户的唯一标识符 可以帮助供应商监控和检测滥用行为。
  • 返回:
语音转换后的字符串。

Text2speech

继承 __base.text2speech_model.Text2SpeechModel 基类,实现以下接口:
  • Invoke 调用
  • 参数:
  • model (string) 模型名称
  • credentials (object) 凭据信息 凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 或 model_credential_schema 定义,传入如:api_key 等。
  • content_text (string) 需要转换的文本内容
  • streaming (bool) 是否进行流式输出
  • user (string) [optional] 用户的唯一标识符 可以帮助供应商监控和检测滥用行为。
  • 返回:
文本转换后的语音流。

Moderation

继承 __base.moderation_model.ModerationModel 基类,实现以下接口:
  • Invoke 调用
  • 参数:
  • model (string) 模型名称
  • credentials (object) 凭据信息 凭据信息的参数由供应商 YAML 配置文件的 provider_credential_schema 或 model_credential_schema 定义,传入如:api_key 等。
  • text (string) 文本内容
  • user (string) [optional] 用户的唯一标识符 可以帮助供应商监控和检测滥用行为。
  • 返回:
False 代表传入的文本安全,True 则反之。

实体

PromptMessageRole

消息角色

PromptMessageContentType

消息内容类型,分为纯文本和图片。

PromptMessageContent

消息内容基类,仅作为参数声明用,不可初始化。
当前支持文本和图片两种类型,可支持同时传入文本和多图。 需要分别初始化 TextPromptMessageContent 和 ImagePromptMessageContent 传入。

TextPromptMessageContent

若传入图文,其中文字需要构造此实体作为 content 列表中的一部分。

ImagePromptMessageContent

若传入图文,其中图片需要构造此实体作为 content 列表中的一部分 data 可以为 url 或者图片 base64 加密后的字符串。

PromptMessage

所有 Role 消息体的基类,仅作为参数声明用,不可初始化。

UserPromptMessage

UserMessage 消息体,代表用户消息。

AssistantPromptMessage

代表模型返回消息,通常用于 few-shots 或聊天历史传入。
其中 tool_calls 为调用模型传入 tools 后,由模型返回的 tool call 列表。

SystemPromptMessage

代表系统消息,通常用于设定给模型的系统指令。

ToolPromptMessage

代表工具消息,用于工具执行后将结果交给模型进行下一步计划。
基类的 content 传入工具执行结果。

PromptMessageTool


LLMResult

LLMResultChunkDelta

流式返回中每个迭代内部 delta 实体

LLMResultChunk

流式返回中每个迭代实体

LLMUsage


TextEmbeddingResult

EmbeddingUsage


RerankResult

RerankDocument

相关资源