Dify-17: 扩展模型提供方
本文档介绍如何向 Dify 平台添加新的模型提供方,涵盖模型提供方架构、需实现的接口以及在系统中注册新提供方的方法。
模型提供方系统概述
Dify 的模型提供方系统支持与 OpenAI、Azure OpenAI、Anthropic 等多种 AI 模型提供方的交互。该系统设计为可扩展,允许开发者添加对新模型提供方的支持,主要功能包括:
- 不同模型类型的统一交互接口
- 支持系统管理和用户自定义凭证
- 模型调用的负载均衡能力
- 凭证加密与缓存处理
模型提供方架构
模型提供方系统由多个组件协同工作,为模型操作提供统一接口:
模型提供方系统架构
关键组件
- ModelInstance
封装模型及其提供方配置,处理模型调用、令牌计数和负载均衡等交互逻辑。 - ProviderManager
管理模型提供方(系统内置和自定义),处理配置、凭证和配额管理。 - ProviderConfiguration
包含提供方的所有配置细节,包括系统配置、自定义配置、可用模型和凭证。 - 模型类型类
表示不同 AI 模型类型(如大语言模型、文本嵌入模型),提供特定操作接口。
实现新模型提供方
若要向 Dify 添加新模型提供方,需为支持的模型类型实现特定接口。
提供方实现结构
实现步骤
- 创建提供方实现文件
- 在
core/model_runtime/model_providers/
下为新提供方创建目录 - 为支持的每个模型类型创建实现文件
- 在
- 实现必需接口
- 大语言模型:继承
LargeLanguageModel
- 文本嵌入模型:继承
TextEmbeddingModel
- 其他模型类型:继承对应基类
- 大语言模型:继承
- 注册提供方
- 将新提供方添加到提供方工厂(Provider Factory)
大语言模型必需方法
实现大语言模型提供方时,需实现以下关键方法:
方法名 | 描述 |
---|---|
invoke | 使用给定提示和参数调用大语言模型 |
get_num_tokens | 计算给定提示消息的令牌数量 |
get_price | 返回给定令牌数量的定价信息 |
凭证管理
模型提供方需要不同的认证凭证,需为新提供方定义凭证模式(Credential Schema)。
示例凭证模式实现
提供方认证与配置
凭证处理流程
Dify 通过以下方式安全处理凭证:
- 存储前加密敏感凭证
- 在 UI 中掩码凭证值
- 缓存解密凭证以提升性能
配置类型
- 系统配置(System Configuration):由 Dify 管理,包含系统定义的配额和凭证
- 自定义配置(Custom Configuration):用户提供的提供方或特定模型凭证
负载均衡
在高可用性场景中,Dify 支持跨多个模型配置的负载均衡,包含错误重试和冷却机制:
回调与监控
Dify 提供回调系统用于监控模型交互,新提供方需在以下阶段触发回调:
- 模型调用前
- 接收流式结果块时
- 成功完成后
- 错误发生时
示例:LoggingCallback
类演示如何通过回调实现调试和监控。
测试新提供方
集成前需全面测试以下关键功能:
- 认证:确保凭证正确处理和验证
- 模型调用:测试文本生成、对话等基础操作
- 令牌计数:验证令牌计数准确性
- 错误处理:测试各种错误场景的应对逻辑
- 定价计算:确保定价信息正确计算
集成示例
以下流程展示提供方如何集成到 Dify 应用:
托管配置
Dify 支持托管和自定义提供方。托管提供方由系统管理凭证和配额,需通过 HostingConfiguration
定义以下内容:
- 提供方特定设置
- 配额限制和类型
- 模型限制
结论
通过扩展新的模型提供方,可将更多 AI 服务和能力集成到 Dify。遵循本指南中的接口实现和模式,可确保新提供方与平台无缝集成。
注意事项:
- 安全处理凭证,避免敏感信息泄露
- 实现完善的错误处理逻辑
- 在生产环境部署前进行充分测试
通过以上步骤,开发者能够灵活扩展 Dify 的模型生态,满足多样化的 AI 应用需求。