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

简介

本文档是通过模型插件将 AI 模型集成到 Dify 时所需实现的接口和数据结构的技术参考。
在深入阅读本 API 参考之前,建议先阅读 模型设计规则 了解概念模型,并参考 创建新模型供应商 获取分步演示。

快速决策:我需要实现哪个方法?

此外,每个供应商都要实现 validate_provider_credentials(供应商级鉴权);如果模型支持用户自行配置,还需为每种模型类型实现 validate_credentials

供应商实现

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

模型类型

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

数据结构

模型 API 中所用全部数据结构的完整参考

错误处理

错误映射与异常处理的规范指南

模型供应商

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

供应商凭据验证

credentials
dict
在供应商 YAML 配置中 provider_credential_schema 下定义的凭据信息,通常为 api_keyorganization_id 等字段。
验证失败时,你的实现必须抛出 CredentialsValidateFailedError 异常,以确保在 Dify UI 中正确处理错误。
对于预定义模型供应商,应实现完整的验证方法,对照你的 API 校验凭据。对于自定义模型供应商(每个模型各有自己的凭据),简化的实现即可。

模型

Dify 支持五种不同的模型类型,每种都有各自的接口。所有模型类型都共享以下通用要求。

通用接口

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

1. 模型凭据验证

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

2. 错误映射

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

LLM 实现

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

1. 模型调用

这个核心方法同时处理对语言模型的流式和非流式 API 调用。
model
string
required
模型标识符(例如 “gpt-4”、“claude-3”)
credentials
dict
required
API 的认证凭据
prompt_messages
list[PromptMessage]
required
Dify 标准格式的消息列表:
  • 对于 completion 模型:包含单个 UserPromptMessage
  • 对于 chat 模型:按需包含 SystemPromptMessageUserPromptMessageAssistantPromptMessageToolPromptMessage
model_parameters
dict
required
在模型 YAML 配置中定义的模型专属参数(temperature、top_p 等)
tools
list[PromptMessageTool]
用于函数调用能力的工具定义
stop
list[string]
遇到时会终止模型生成的停止序列
stream
boolean
default:true
是否返回流式响应
user
string
用于 API 监控的用户标识符
stream=True
Generator[LLMResultChunk, None, None]
一个生成器,在响应分块可用时逐个产出
stream=False
LLMResult
包含完整生成文本的完整响应对象
建议为流式和非流式调用分别实现辅助方法,让代码保持清晰、易于维护。

2. Token 计数

如果模型不提供分词器,可使用基类的 _get_num_tokens_by_gpt2(text) 方法得到合理的近似值。

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

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

TextEmbedding 实现

文本嵌入模型将文本转换为可捕获语义的高维向量,适用于检索、相似度搜索和分类等场景。
要实现文本嵌入供应商,请继承 __base.text_embedding_model.TextEmbeddingModel 基类:

1. 核心嵌入方法

model
string
required
嵌入模型标识符
credentials
dict
required
嵌入服务的认证凭据
texts
list[string]
required
要嵌入的文本输入列表
user
string
用于 API 监控的用户标识符
TextEmbeddingResult
object
required
包含以下内容的结构化响应:
  • model:用于嵌入的模型。
  • embeddings:嵌入向量,顺序与输入文本一致。
  • usage:关于 token 用量和成本的元数据。

2. Token 计数方法

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

Rerank 实现

重排序模型在初次检索之后,根据候选文档与查询的相关性对其重新排序,从而提升搜索质量。
要实现重排序供应商,请继承 __base.rerank_model.RerankModel 基类:
model
string
required
重排序模型标识符
credentials
dict
required
API 的认证凭据
query
string
required
搜索查询文本
docs
list[string]
required
要重排序的文档文本列表
score_threshold
float
文档进入结果所需达到的最低分数
top_n
int
返回结果的最大数量
user
string
用于 API 监控的用户标识符
RerankResult
object
required
包含以下内容的结构化响应:
  • model:用于重排序的模型。
  • docs:包含索引、文本和分数的 RerankDocument 对象列表。
重排序的计算开销可能很大,尤其是文档集较大时。对大型文档集合实现批处理,以免超时或消耗过多资源。

Speech2Text 实现

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

Text2Speech 实现

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

Moderation 实现

内容审核模型分析内容中可能存在的有害、不当或不安全材料,帮助维护平台安全和内容政策。
要实现内容审核供应商,请继承 __base.moderation_model.ModerationModel 基类:
model
string
required
内容审核模型标识符
credentials
dict
required
API 的认证凭据
text
string
required
要分析的文本内容
user
string
用于 API 监控的用户标识符
result
boolean
required
表示内容安全性的布尔值:
  • False:内容安全。
  • True:内容包含有害材料。
内容审核常被用作安全机制。实现方案时,请权衡漏报(放过有害内容)与误报(拦截安全内容)的影响。
许多内容审核 API 提供详细的分类分数,而不仅是二元结果。如果你的应用有需要,可扩展此实现,返回有关具体有害内容类别的更详细信息。

实体

PromptMessageRole

会话中消息的角色。

PromptMessageContentType

消息内容的类型:纯文本或图片。

PromptMessageContent

消息内容的基类,仅用于类型声明,请勿直接实例化。
内容目前支持文本和图片两种类型,单条消息可将文本与多张图片组合在一起。请实例化 TextPromptMessageContentImagePromptMessageContent

TextPromptMessageContent

当消息同时包含文本和图片时,将文本包装为此实体并加入 content 列表。

ImagePromptMessageContent

当消息同时包含文本和图片时,将每张图片包装为此实体并加入 content 列表。data 接受图片 URL 或 base64 编码的图片字符串。

PromptMessage

所有角色专属消息的基类,仅用于类型声明,请勿直接实例化。

UserPromptMessage

表示一条用户消息。

AssistantPromptMessage

表示一条模型回复,通常用于 few-shot 示例或聊天历史输入。
当请求包含 tools 时,tool_calls 保存模型返回的工具调用。

SystemPromptMessage

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

ToolPromptMessage

表示一条工具消息,将工具的执行结果回传给模型,用于下一步规划。
通过继承而来的 content 字段传入工具的执行结果。

PromptMessageTool

LLMResult

LLMResultChunkDelta

流式响应中每个分块内的增量 delta。

LLMResultChunk

流式响应中的单个分块。

LLMUsage

TextEmbeddingResult

EmbeddingUsage

RerankResult

RerankDocument

相关资源

Last modified on June 24, 2026