本文档由 AI 自动翻译。如有任何不准确之处,请参考 英文原版。
简介
本文档是通过模型插件将 AI 模型集成到 Dify 时所需实现的接口和数据结构的技术参考。快速决策:我需要实现哪个方法?
此外,每个供应商都要实现
validate_provider_credentials(供应商级鉴权);如果模型支持用户自行配置,还需为每种模型类型实现 validate_credentials。
供应商实现
了解如何为不同的 AI 服务供应商实现模型供应商类
模型类型
五种受支持模型类型的实现细节:LLM、Embedding、Rerank、Speech2Text 和 Text2Speech
数据结构
模型 API 中所用全部数据结构的完整参考
错误处理
错误映射与异常处理的规范指南
模型供应商
每个模型供应商都必须继承__base.model_provider.ModelProvider 基类,并实现凭据验证接口。
供应商凭据验证
在供应商 YAML 配置中
provider_credential_schema 下定义的凭据信息,通常为 api_key、organization_id 等字段。模型
Dify 支持五种不同的模型类型,每种都有各自的接口。所有模型类型都共享以下通用要求。通用接口
无论类型如何,每个模型实现都必须实现以下两个基础方法:1. 模型凭据验证
要验证的具体模型标识符(例如 “gpt-4”、“claude-3-opus”)
在供应商配置中定义的凭据信息
2. 错误映射
可用的错误类型
可用的错误类型
LLM 实现
要实现大语言模型供应商,请继承__base.large_language_model.LargeLanguageModel 基类,并实现以下方法:
1. 模型调用
这个核心方法同时处理对语言模型的流式和非流式 API 调用。参数
参数
模型标识符(例如 “gpt-4”、“claude-3”)
API 的认证凭据
Dify 标准格式的消息列表:
- 对于
completion模型:包含单个UserPromptMessage。 - 对于
chat模型:按需包含SystemPromptMessage、UserPromptMessage、AssistantPromptMessage和ToolPromptMessage。
在模型 YAML 配置中定义的模型专属参数(temperature、top_p 等)
用于函数调用能力的工具定义
遇到时会终止模型生成的停止序列
是否返回流式响应
用于 API 监控的用户标识符
返回值
返回值
2. Token 计数
如果模型不提供分词器,可使用基类的
_get_num_tokens_by_gpt2(text) 方法得到合理的近似值。3. 自定义模型 Schema(可选)
此方法仅对支持自定义模型的供应商是必需的。它让自定义模型可以从基础模型继承参数规则。
TextEmbedding 实现
文本嵌入模型将文本转换为可捕获语义的高维向量,适用于检索、相似度搜索和分类等场景。
__base.text_embedding_model.TextEmbeddingModel 基类:
1. 核心嵌入方法
参数
参数
返回值
返回值
包含以下内容的结构化响应:
model:用于嵌入的模型。embeddings:嵌入向量,顺序与输入文本一致。usage:关于 token 用量和成本的元数据。
2. Token 计数方法
Rerank 实现
重排序模型在初次检索之后,根据候选文档与查询的相关性对其重新排序,从而提升搜索质量。
__base.rerank_model.RerankModel 基类:
参数
参数
返回值
返回值
包含以下内容的结构化响应:
model:用于重排序的模型。docs:包含索引、文本和分数的RerankDocument对象列表。
Speech2Text 实现
语音转文字模型将音频文件中的语音转换为书面文本,可用于转录服务、语音命令和无障碍功能等场景。
__base.speech2text_model.Speech2TextModel 基类:
参数
参数
返回值
返回值
从音频文件转录得到的文本
Text2Speech 实现
文本转语音模型将书面文本转换为自然流畅的语音,可用于语音助手、屏幕阅读器和音频内容生成等场景。
__base.text2speech_model.Text2SpeechModel 基类:
参数
参数
Moderation 实现
内容审核模型分析内容中可能存在的有害、不当或不安全材料,帮助维护平台安全和内容政策。
__base.moderation_model.ModerationModel 基类:
参数
参数
返回值
返回值
表示内容安全性的布尔值:
False:内容安全。True:内容包含有害材料。
实体
PromptMessageRole
会话中消息的角色。PromptMessageContentType
消息内容的类型:纯文本或图片。PromptMessageContent
消息内容的基类,仅用于类型声明,请勿直接实例化。TextPromptMessageContent 和 ImagePromptMessageContent。
TextPromptMessageContent
content 列表。
ImagePromptMessageContent
content 列表。data 接受图片 URL 或 base64 编码的图片字符串。
PromptMessage
所有角色专属消息的基类,仅用于类型声明,请勿直接实例化。UserPromptMessage
表示一条用户消息。AssistantPromptMessage
表示一条模型回复,通常用于 few-shot 示例或聊天历史输入。tools 时,tool_calls 保存模型返回的工具调用。
SystemPromptMessage
表示一条系统消息,通常用于为模型设置系统指令。ToolPromptMessage
表示一条工具消息,将工具的执行结果回传给模型,用于下一步规划。content 字段传入工具的执行结果。