Skip to main content
⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考英文原版

简介

本文档详细介绍了实现 Dify 模型插件所需的接口和数据结构。它作为开发者将 AI 模型与 Dify 平台集成的技术参考。
在深入阅读此 API 参考之前,我们建议先阅读模型设计规则模型插件介绍以获得概念上的理解。

提供商实现

了解如何为不同的 AI 服务提供商实现模型提供商类

模型类型

五种支持的模型类型的实现细节:LLM、Embedding、Rerank、Speech2Text 和 Text2Speech

数据结构

模型 API 中使用的所有数据结构的综合参考

错误处理

正确的错误映射和异常处理指南

模型提供商

每个模型提供商必须继承 __base.model_provider.ModelProvider 基类并实现凭据验证接口。

提供商凭据验证

dict
在提供商的 YAML 配置中 provider_credential_schema 下定义的凭据信息。 通常包括 api_keyorganization_id 等字段。
如果验证失败,您的实现必须抛出 CredentialsValidateFailedError 异常。这确保了在 Dify UI 中正确的错误处理。
对于预定义的模型提供商,您应该实现一个彻底的验证方法来验证凭据是否能与您的 API 一起工作。对于自定义模型提供商(每个模型都有自己的凭据),简化的实现就足够了。

模型

Dify 支持五种不同的模型类型,每种都需要实现特定的接口。然而,所有模型类型都有一些共同的要求。

通用接口

每个模型实现,无论类型如何,都必须实现这两个基本方法:

1. 模型凭据验证

string
required
要验证的特定模型标识符(例如,“gpt-4”、“claude-3-opus”)
dict
required
在提供商配置中定义的凭据信息

2. 错误映射

class
网络连接失败、超时
class
服务提供商宕机或不可用
class
达到速率限制或配额限制
class
认证或权限问题
class
无效的参数或请求
您也可以在代码中直接抛出这些标准化的错误类型,而不是依赖错误映射。这种方法让您对错误消息有更多的控制。

LLM 实现

要实现大型语言模型提供商,请继承 __base.large_language_model.LargeLanguageModel 基类并实现以下方法:

1. 模型调用

此核心方法处理对语言模型的流式和非流式 API 调用。
string
required
模型标识符(例如,“gpt-4”、“claude-3”)
dict
required
API 的认证凭据
list[PromptMessage]
required
Dify 标准化格式的消息列表:
  • 对于 completion 模型:包含单个 UserPromptMessage
  • 对于 chat 模型:根据需要包含 SystemPromptMessageUserPromptMessageAssistantPromptMessageToolPromptMessage
dict
required
模型特定参数(temperature、top_p 等),在模型的 YAML 配置中定义
list[PromptMessageTool]
函数调用能力的工具定义
list[string]
遇到时将停止模型生成的停止序列
boolean
default:true
是否返回流式响应
string
用于 API 监控的用户标识符
Generator[LLMResultChunk, None, None]
一个生成器,在响应块可用时逐个产出
LLMResult
包含完整生成文本的完整响应对象
我们建议为流式和非流式调用实现单独的辅助方法,以保持代码的组织性和可维护性。

2. 令牌计数

如果模型不提供分词器,您可以使用基类的 _get_num_tokens_by_gpt2(text) 方法进行合理的近似估算。

3. 自定义模型 Schema(可选)

此方法仅对支持自定义模型的提供商是必需的。它允许自定义模型从基础模型继承参数规则。

TextEmbedding 实现

文本嵌入模型将文本转换为捕获语义含义的高维向量,这对于检索、相似性搜索和分类非常有用。
要实现文本嵌入提供商,请继承 __base.text_embedding_model.TextEmbeddingModel 基类:

1. 核心嵌入方法

string
required
嵌入模型标识符
dict
required
嵌入服务的认证凭据
list[string]
required
要嵌入的文本输入列表
string
用于 API 监控的用户标识符
object
required
包含以下内容的结构化响应:
  • model:用于嵌入的模型
  • embeddings:与输入文本对应的嵌入向量列表
  • usage:关于令牌使用和成本的元数据

2. 令牌计数方法

对于嵌入模型,准确的令牌计数对于成本估算很重要,但对功能不是关键的。_get_num_tokens_by_gpt2 方法为大多数模型提供了合理的近似值。

Rerank 实现

重排序模型通过根据与查询的相关性重新排列一组候选文档来帮助提高搜索质量,通常在初始检索阶段之后进行。
要实现重排序提供商,请继承 __base.rerank_model.RerankModel 基类:
string
required
重排序模型标识符
dict
required
API 的认证凭据
string
required
搜索查询文本
list[string]
required
要重排序的文档文本列表
float
用于过滤结果的可选最小分数阈值
int
返回结果数量的可选限制
string
用于 API 监控的用户标识符
object
required
包含以下内容的结构化响应:
  • model:用于重排序的模型
  • docs:包含索引、文本和分数的 RerankDocument 对象列表
重排序可能计算成本较高,特别是对于大型文档集。为大型文档集合实现批处理以避免超时或过度资源消耗。

Speech2Text 实现

语音转文本模型将音频文件中的口语转换为书面文本,支持转录服务、语音命令和无障碍功能等应用。
要实现语音转文本提供商,请继承 __base.speech2text_model.Speech2TextModel 基类:
string
required
语音转文本模型标识符
dict
required
API 的认证凭据
IO[bytes]
required
包含要转录的音频的二进制文件对象
string
用于 API 监控的用户标识符
string
required
从音频文件转录的文本
音频格式检测对于正确处理不同文件类型很重要。考虑实现一个辅助方法来从文件头检测格式,如示例所示。
一些语音转文本 API 有文件大小限制。如有必要,考虑为大型音频文件实现分块处理。

Text2Speech 实现

文本转语音模型将书面文本转换为自然发音的语音,支持语音助手、屏幕阅读器和音频内容生成等应用。
要实现文本转语音提供商,请继承 __base.text2speech_model.Text2SpeechModel 基类:
string
required
文本转语音模型标识符
dict
required
API 的认证凭据
string
required
要转换为语音的文本内容
boolean
required
是返回流式音频还是完整文件
string
用于 API 监控的用户标识符
Generator[bytes, None, None]
一个生成器,在音频块可用时逐个产出
bytes
作为字节的完整音频数据
大多数文本转语音 API 要求您在指定模型的同时指定语音。考虑在 Dify 的模型标识符和提供商的语音选项之间实现映射。
长文本输入可能需要分块以获得更好的语音合成质量。考虑实现文本预处理来正确处理标点符号、数字和特殊字符。

Moderation 实现

内容审核模型分析内容中潜在的有害、不当或不安全的材料,帮助维护平台安全和内容政策。
要实现内容审核提供商,请继承 __base.moderation_model.ModerationModel 基类:
string
required
内容审核模型标识符
dict
required
API 的认证凭据
string
required
要分析的文本内容
string
用于 API 监控的用户标识符
boolean
required
表示内容安全性的布尔值:
  • False:内容是安全的
  • True:内容包含有害材料
内容审核通常用作安全机制。在实现解决方案时,请考虑漏报(让有害内容通过)与误报(阻止安全内容)的影响。
许多内容审核 API 提供详细的类别分数而不仅仅是二进制结果。如果您的应用需要,考虑扩展此实现以返回关于特定有害内容类别的更详细信息。

实体

PromptMessageRole

消息角色

PromptMessageContentType

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

PromptMessageContent

消息内容基类,仅用于参数声明,不能初始化。
目前支持两种类型:文本和图片,并且可以同时支持文本和多张图片。 您需要分别初始化 TextPromptMessageContentImagePromptMessageContent

TextPromptMessageContent

当传入文本和图片时,文本需要构造成此实体作为 content 列表的一部分。

ImagePromptMessageContent

当传入文本和图片时,图片需要构造成此实体作为 content 列表的一部分。 data 可以是 url 或图片的 base64 编码字符串。

PromptMessage

所有角色消息体的基类,仅用于参数声明,不能初始化。

UserPromptMessage

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

AssistantPromptMessage

表示模型响应消息,通常用于 few-shots 或聊天历史输入。
这里的 tool_calls 是在向模型传入 tools 后模型返回的 tool call 列表。

SystemPromptMessage

表示系统消息,通常用于为模型设置系统指令。

ToolPromptMessage

表示工具消息,用于在工具执行后将结果传递给模型以进行下一步规划。
基类的 content 传入工具执行结果。

PromptMessageTool


LLMResult

LLMResultChunkDelta

流式响应中每次迭代的 Delta 实体

LLMResultChunk

流式响应中的迭代实体

LLMUsage


TextEmbeddingResult

EmbeddingUsage


RerankResult

RerankDocument

相关资源


Edit this page | Report an issue