第3章:模型提供商配置与多模态接入
1. 项目背景小李是公司新来的 AI 开发工程师终于把 Dify 部署好了兴冲冲地打开控制台准备创建第一个 App。结果卡在了第一步——模型提供商页面空空如也系统提示“请先配置模型提供商”。小李一脸茫然“我知道要用 GPT-4但我该填什么那个 API Key 从哪里拿Model Type 里 LLM、Text Embedding、Rerank、Speech2Text、TTS、Moderation 都是啥意思”这还没完。小李的 Leader 告诉他考虑到数据安全公司采购了一批部署在本地服务器上的开源模型通过 Ollama 部署的 Qwen2.5 和 BGE-M3要求 Dify 也要接入这些模型。小李打开 Ollama 的配置页面又是一堆陌生参数“Base URL 填什么http://localhost:11434还是http://host.docker.internal:11434Model Name 是填qwen2.5还是完整路径”更要命的是公司在 OpenAI 上申请了 5 个 API Key每个 Key 有独立的每分钟速率限制RPM500和每日额度限制。小李需要配置负载均衡——当某个 Key 的额度耗尽或被限流时自动切换到下一个可用 Key。模型提供商配置是 Dify 的发动机钥匙——没有它整个平台就是个空壳。而且不同于直接调 OpenAI APIDify 在模型之上加了一层抽象Provider → Model Type → Model Instance。理解这层抽象你才能应对多模型切换、本地模型接入、多 Key 负载均衡等真实需求。本章将带你从一个 Key 走天下进化到多 Provider 多模型智能路由。2. 项目设计小胖对着屏幕挠头“大师救命我就想用个 GPT这个模型提供商页面怎么有一堆选项——LLM、Text Embedding、Rerank……这是啥意思为啥不能像 GPT 官网那样直接选模型就行”大师“GPT 官网只做一件事——对话所以它只需要一个 LLM 模型。但 Dify 是一个平台它要支撑知识库需要 Embedding 模型把文本转成向量、要提升检索效果需要 Rerank 模型对结果重排序、要语音输入输出需要 TTS 和 Speech2Text、要做内容安全需要 Moderation 模型。所以 Dify 把模型按’任务类型’分成了六大类。”小白在白板上快速画表格所以这个分类体系是Model Type用途典型模型LLM对话/文本生成GPT-4, Claude, QwenText Embedding文本向量化text-embedding-3-small, BGE-M3Rerank检索结果重排序Cohere Rerank, BGE-RerankerSpeech2Text语音转文字WhisperTTS文字转语音OpenAI TTS, Edge TTSModeration内容审核OpenAI Moderation那 Provider 又是什么概念大师“Provider 就是模型供应商。OpenAI 是一个 Provider它旗下有 GPT-4、GPT-3.5、text-embedding-3-small 等多个模型。Anthropic 是另一个 Provider提供 Claude 系列。同一个模型类型可以对接多个 Provider——比如你要做文本生成可以同时接入 OpenAI 的 GPT-4 和 Anthropic 的 Claude 3。”小胖“哦那 Model Instance 呢我看到代码里有个 ModelManager 类。”大师“Model Instance 是’租户 Provider 模型’的组合体。比如说你们公司是租户 A配置了一个 OpenAI 的 GPT-4这就产生了一个 Model Instance。隔壁部门是租户 B他们也配了 OpenAI 的 GPT-4用了不同的 API Key这就是另一个 Instance。Dify 通过 ModelManager 来管理这些 Instance 的生命周期。”技术映射Dify 的模型抽象层次Provider供应商→ ModelType任务类型→ Model具体模型→ ModelInstance租户 凭据的运行时实例。小白“那多 Key 负载均衡是怎么实现的我看到 OpenAI 的配置里可以填多个 API Key。”大师“好问题这是 Dify 模型管理里最精巧的部分。假设你配了 3 个 OpenAI KeyDify 用什么机制来分配请求呢第一层Round Robin 轮询——每个请求依次选择下一个 Key。第二层冷却机制Cooldown——如果某个 Key 返回了 429限流或 401认证失败Dify 会在 Redis 里给这个 Key 打一个 TTL 标记比如冷却 60 秒轮询时跳过它。”小胖“用 Redis 做冷却标记为什么要用 Redis不能直接存在 Python 变量里”大师“因为 Dify 可能有多个 API Worker 进程它们不共享内存。Redis 作为共享存储所有 Worker 都能读写同一个冷却标记。这就像公司门口有一个打卡机Redis所有员工Worker都能看到谁今天请假了冷却。”技术映射多进程架构中的共享状态必须依赖外部存储Redis/Zookeeper/etcd不能使用进程内变量。小白“那本地模型怎么接比如我们用 Ollama 部署了一个 Qwen2.5。”大师“Dify 通过插件系统支持本地模型。Ollama 是官方支持的插件之一。配置四要素Base URLOllama 服务的地址Docker 容器内要用http://host.docker.internal:11434、Model NameOllama 里的模型名如qwen2.5、Model TypeLLM 或 Embedding、Completion ModeCompletion 或 Chat。配置完点保存Dify 会自动拉取 Ollama 的模型列表。”小胖“host.docker.internal是啥直接填localhost不行吗”大师“关键区别你的 Dify 跑在 Docker 容器里localhost指向容器内部不是你的宿主机。host.docker.internal是 Docker 提供的特殊 DNS 名专门用于容器访问宿主机上的服务。如果你在 Linux 上部署这个域名可能不生效需要改用172.17.0.1Docker 默认网桥地址或者把 Ollama 也放到 Docker 里然后通过服务名访问。”技术映射Docker 网络隔离导致容器内的localhost不等于宿主机的localhost跨网络通信需要选择正确的网络地址。3. 项目实战环境准备条件说明Dify 已部署第 2 章完成docker ps确认所有服务 runningOpenAI API Key从 https://platform.openai.com/api-keys 获取Ollama可选从 https://ollama.com 下载安装拉取一个模型分步实现步骤1配置 OpenAI 作为 LLM Provider目标让 Dify 能调用 GPT 模型登录 Dify 控制台http://localhost右上角头像 →设置→模型供应商→ 找到OpenAI→ 点击设置填入配置API Key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx Organization ID: 可选企业用户填写点击保存系统会自动加载可用模型列表可用模型 - gpt-4o (LLM) - gpt-4o-mini (LLM) - gpt-3.5-turbo (LLM) - text-embedding-3-small (Text Embedding) - text-embedding-3-large (Text Embedding) - whisper-1 (Speech2Text) - tts-1 (TTS) - tts-1-hd (TTS)常见坑保存后提示API Key 无效检查 Key 是否包含空格/换行检查 OpenAI 账户是否有余额模型列表为空检查网络是否能访问api.openai.comDify 不内置代理企业内网需要配置 HTTP_PROXY步骤2配置多 Key 负载均衡目标实现 Key 级别的故障转移在 OpenAI 设置页面点击添加凭据填入第二个 API Key凭据 1:API Key:sk-key1-xxxxxxxxxxxx凭据 2:API Key:sk-key2-xxxxxxxxxxxx凭据 3:API Key:sk-key3-xxxxxxxxxxxx保存后Dify 会自动启用 Round Robin 负载均衡。你可以通过以下方式验证负载均衡是否生效# 验证脚本连续调用 10 次观察使用了哪个 Keyimportrequestsforiinrange(10):resprequests.post(http://localhost/console/api/workspaces/current/models/check-model-config,headers{Authorization:Bearer 你的 console token},json{provider:openai,model:gpt-3.5-turbo,model_type:llm})# 正常返回 200 说明 Key 可用print(f请求{i1}: HTTP{resp.status_code})冷却机制的验证方式故意填入一个无效的 Key 作为凭据 2发起 5 次调用观察前几次调用会失败轮到无效 Key之后系统会自动跳过冷却中的 Key只使用有效的 Key步骤3接入 Ollama 本地模型目标使用本地部署的开源模型首先确保 Ollama 已安装并运行# 安装 OllamaWindows 从官网下载安装包# 拉取模型ollama pull qwen2.5:7b ollama pull bge-m3# 验证 Ollama 可用curlhttp://localhost:11434/api/tags# 预期输出{models:[{name:qwen2.5:7b},{name:bge-m3}]}然后在 Dify 控制台中配置设置→模型供应商→Ollama→设置填入配置Base URL: http://host.docker.internal:11434 Windows/macOS 用 host.docker.internal Linux 用 http://172.17.0.1:11434 或 Ollama 容器的服务名 模型类型勾选LLM 和 Text Embedding点击添加模型LLM 模型 Model Name: qwen2.5:7b Model Type: LLM Completion Mode: Chat Embedding 模型 Model Name: bge-m3 Model Type: Text Embedding Dimension: 1024点击测试验证连通性。常见坑“Connection refused”确认 Ollama 监听的是0.0.0.0:11434而不是127.0.0.1:11434。修改方式设置环境变量OLLAMA_HOST0.0.0.0“Model not found”Model Name 要填 Ollama 中ollama list显示的完整名称包括 tag如qwen2.5:7bCORS 错误Dify API 容器 → Ollama 是服务端调用不存在浏览器 CORS 问题。如果报了 CORS说明你在用浏览器直接调 Ollama改用后端 API 即可步骤4验证多 Provider 切换目标在一个 App 中动态切换模型创建一个 Chat App首页 →创建应用→Chat→ 填写名称进入 App 编辑页右上角模型选择器可以看到所有已配置的模型选择不同的模型在右侧预览窗口测试回复# 通过 API 验证模型切换curl-XPOST http://localhost/v1/chat-messages\-HAuthorization: Bearer app-xxxxxxxx\-HContent-Type: application/json\-d{ query: 你好请用一句话介绍你自己, user: test-user, response_mode: blocking }# 对比回复在 Dify 控制台中切换模型观察回复风格差异# GPT-4o 的回复 vs Qwen2.5 的回复 vs Claude 的回复测试验证# 测试 1验证 API Key 正常工作curlhttps://api.openai.com/v1/models\-HAuthorization: Bearer sk-xxxxxxxxxxxx# 预期返回模型列表 JSONHTTP 200# 测试 2验证 Dify 的模型连通性curlhttp://localhost/console/api/workspaces/current/models/check-model-config\-HAuthorization: Bearer 你的 console session\-HContent-Type: application/json\-d{provider:openai,model:gpt-3.5-turbo,model_type:llm}# 预期{result: success}# 测试 3验证 Ollama 本地模型可用dockerexecdocker-api-1curlhttp://host.docker.internal:11434/api/tags# 预期返回 Ollama 已安装的模型列表4. 项目总结优点与缺点维度优点缺点模型抽象统一的 Provider → ModelType → Model 三层抽象屏蔽 API 差异部分 Provider 的独有参数如 Claude 的 max_tokens需要额外适配负载均衡原生支持多凭据轮询 Redis 自动冷却无需额外组件冷却策略较简单固定 TTL不支持更智能的令牌桶/滑窗限流本地模型通过插件机制支持 Ollama/vLLM/Xinference 等 10 本地推理框架本地模型配置步骤稍多新手容易在 Docker 网络上踩坑Provider 生态支持 100 模型供应商含 PartNet 生态部分小众 Provider 的文档和测试覆盖不足成本可视实时统计每个 App 的 Token 消耗和成本缺少预算预警和硬限制功能需手动监控适用场景场景推荐方案初创团队快速验证一个 OpenAI Key 足以先用 GPT-3.5验证通过后切 GPT-4企业多部门共享多 Key 负载均衡 按租户隔离 Provider 配置数据敏感场景全部使用本地模型Ollama BGE-M3数据不出服务器多模型 A/B 测试同时接入 GPT/Claude/Qwen对比效果选最优高并发生产环境5 个 Key 组成池配合冷却机制应对限流不适用场景需要模型训练和微调Dify 是推理平台不是训练平台对模型调用延迟有极致要求 100ms本地部署也无法保证因为 LLM 本身推理就需要时间注意事项API Key 安全绝对不要把 Key 提交到 Git 仓库Dify 数据库中存储的 Key 是加密的使用 SECRET_KEY 加密但仍需严格控制数据库访问权限配额管理OpenAI 的免费 Key 有严格的 RPM 限制生产环境建议使用预付费账号模型兼容性不是所有 Provider 的所有 Model Type 都可用比如 Ollama 不提供 Rerank 能力需要额外接入 Cohere 等 Provider网络打通Docker 容器访问外网可能需要配置 HTTP_PROXY 环境变量常见踩坑经验坑Ollama 配置成功但调用超时→ 根因host.docker.internal在 Linux 上不是默认支持的。解决使用docker run启动 Ollama 容器然后 Dify 中用 Ollama 服务名访问如http://ollama:11434坑OpenAI 报 429 Too Many Requests→ 根因单 Key RPM 超限。解决增加 Key 数量Dify 冷却机制会在 60 秒后自动恢复该 Key或升级 OpenAI 套餐提高 RPM 限制坑本地 Embedding 模型 Dimension 不匹配→ 根因配置的向量维度如 768与实际模型输出维度如 1024不一致导致向量数据库写入失败。解决查阅模型文档填写正确维度思考题进阶题Dify 的模型冷却机制在默认 60 秒 TTL 内如果所有 Key 都冷却了怎么办请设计一个改进方案确保至少有一个 Key 始终可用。进阶题如果你需要在 Dify 中对接一个自定义的、非标准的 LLM API不是 OpenAI 兼容接口你会如何扩展提示考虑 Dify 的插件机制和自定义 Provider

相关新闻

【2013-10-16】设计模式学习笔记:工厂模式

【2013-10-16】设计模式学习笔记:工厂模式

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2013-10-16 | 标题:设计模式学习笔记:工厂模式 | 分类: 编程 / 设计模式 / java &…

2026/6/25 19:00:54阅读更多 →
终极高效Photoshop图层批量导出方案:开源脚本实现3倍速自动化工作流

终极高效Photoshop图层批量导出方案:开源脚本实现3倍速自动化工作流

终极高效Photoshop图层批量导出方案:开源脚本实现3倍速自动化工作流 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Adobe. …

2026/6/25 18:55:52阅读更多 →
【Python进阶】Type Hinting 的“外挂”:一文读懂 Annotated 与 Reducer

【Python进阶】Type Hinting 的“外挂”:一文读懂 Annotated 与 Reducer

此文章专门用来解释 Annotated 以及它在 LangGraph/LangChain 状态定义中的核心作用。【Python进阶】Type Hinting 的“外挂”:一文读懂 Annotated 与 Reducer 在 Python 的类型提示(Type Hints)世界里,我们习惯了写 x: int 或 na…

2026/6/25 18:55:52阅读更多 →
直击VivaTech 2026:远景发布“Mission Gobi”,用AI驯服戈壁风光,为算力“解渴”

直击VivaTech 2026:远景发布“Mission Gobi”,用AI驯服戈壁风光,为算力“解渴”

当大模型厂商为GPU“一卡难求”而焦虑时,一个更根本的瓶颈正在浮现——电力。在巴黎VivaTech 2026现场,远景科技集团亮出了一张雄心勃勃的“技术牌”:Mission Gobi计划。其核心目标,是利用自研的AI电力系统,将全球太阳…

2026/6/25 20:11:13阅读更多 →
Android应用抓包实战:绕过反代理与SSL证书绑定检测

Android应用抓包实战:绕过反代理与SSL证书绑定检测

1. 项目概述:当APP安全机制成为“拦路虎”在移动应用安全测试或逆向分析的过程中,我们常常会遇到一个令人头疼的局面:当你兴致勃勃地打开抓包工具,准备一窥APP的网络通信时,却发现应用要么直接闪退,要么弹出…

2026/6/25 20:11:13阅读更多 →
告别iTunes臃肿:如何在Windows上快速安装苹果设备驱动

告别iTunes臃肿:如何在Windows上快速安装苹果设备驱动

告别iTunes臃肿:如何在Windows上快速安装苹果设备驱动 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mir…

2026/6/25 20:11:13阅读更多 →
HDMI数据的接收发送实验(十五)

HDMI数据的接收发送实验(十五)

一、概况 在数据传输过程中,时钟或数据会在传输过程中发生偏移,所以用了PLL的时钟动态相移配置,这样就可以实现时钟与数据的对齐,接下来讲述怎样配置PLL时钟来实现动态相移。 二、IP核配置 步骤1:打开VIVADO的clocking…

2026/6/25 20:11:13阅读更多 →
捕蚊灯真的有用吗?室内灭蚊器哪个牌子好?2026精选高性价比灭蚊器汇总分享!任你选!

捕蚊灯真的有用吗?室内灭蚊器哪个牌子好?2026精选高性价比灭蚊器汇总分享!任你选!

​灭蚊器哪个牌子好?当心!不专业灭蚊器比蚊子更“要命”全球多地拉响基孔肯雅热疫情警报——这种由伊蚊传播的病毒性疾病,已在南美、东南亚等地造成大规模感染,患者突发高热、关节剧痛,严重者症状可持续数月之久。世界…

2026/6/25 20:11:13阅读更多 →
Prompt Injection攻击原理与三层纵深防御实战

Prompt Injection攻击原理与三层纵深防御实战

1. 项目概述:当大模型“听错话”时,谁在替你担风险?Prompt Injection(提示词注入)这个词,现在听起来可能还带着点技术圈的陌生感,但它的实际危害,已经不亚于十年前第一次听说SQL注入…

2026/6/25 20:06:12阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/25 9:39:54阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/25 2:52:24阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/25 9:01:34阅读更多 →
面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

上半年跳槽,面了十几家公司。说句实话,不是能力不行,是面试现场太容易崩了。 明明准备了一周,面试官换个问法脑子就一片白。面完之后那个懊悔——其实我会的。 后来开始试市面上的AI面试辅助工具。前前后后装了5款,踩…

2026/6/25 11:52:11阅读更多 →
Claude Code 提示词设计:从塑造“人格”到建立“状态机”

Claude Code 提示词设计:从塑造“人格”到建立“状态机”

当前 AI Agent 设计的核心痛点在于:大模型不缺写代码的能力,缺的是克制力、边界感和验证逻辑。Prompt 不再是用来塑造“人格”的,而是用来建立“状态机(State Machine)”和“行为门禁(Guardrails&#xff0…

2026/6/25 11:52:11阅读更多 →
MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MONKEYCODE 教程系列 MonkeyCode教程及推广系列 MC-037 自定义 Skill 开发:创建你的AI能力模块 >官网链接注册更放心哦https://monkeycode-ai.com/?ic019e0aed-c823-783c-b08a-4f030f891e4e 系列: 不爱土豆唯爱马铃薯 MonkeyCode 教程系列 字数: 约 1400 字…

2026/6/25 11:52:11阅读更多 →