部署完 Dify,很多人兴致勃勃打开浏览器准备直接创建应用,结果蹦出来的不是应用列表,而是一个初始化向导。填管理员账号、确认工作空间信息、等初始化跑完,进入后台之后第一件事还是配置模型供应商。不少新手就是卡在这一步:不接模型,Dify 就是个空壳,什么对话应用、知识库应用都跑不起来。这篇系列第三篇,我专门把“初始化与模型供应商配置”拆开讲清楚:初始化到底初始化了什么,模型供应商该怎么选、怎么配,以及配置过程中最容易踩的坑。内容适合已经完成部署、正准备让 Dify 真正跑起来的同学,也适合那些已经配完但时不时遇到模型报错的人对照排查。
1. 第一次打开 Dify 时,我看到的不是应用列表而是初始化向导
1.1 初始化向导会向你索要什么
第一次访问 Dify 后台,系统会进入初始化页面,核心任务有两个:创建管理员账号,以及确认工作空间的基础信息。
管理员账号部分要求填写管理员邮箱和登录密码。这里的邮箱不只是登录用,系统通知、密码找回邮件都会发到这个地址。如果你的部署环境没有额外配置邮件服务,这个邮箱实际上收不到任何信件,所以密码一旦遗忘,重置流程会很麻烦。我的建议是:第一次设置的密码直接存入团队密码管理器,或者用自己熟悉的密码规则生成一个高强度的,不要为了图省事用和公司邮箱一样的密码。
工作空间名称在这里也要确认。Dify 支持一个实例下划分多个工作空间,每个工作空间的应用、知识库、成员相互隔离。初始化时创建的是默认工作空间,后续团队协作时会发现,这个名称会显示在左上角以及成员创建应用时的默认归属中。名称随意但不建议用太泛的词,比如“测试”“新建项目”,因为后期工作空间一多,分不清哪个是哪个。
1.2 初始化阶段里那些“看起来不重要”的设置
除了页面上直接显示的字段,初始化阶段还有一些隐藏配置会影响后续体验。
第一个是邮件邀请。初始化完成后,管理员可以在成员管理里邀请其他用户加入工作空间。如果部署时没有配置好邮件服务,邀请邮件发不出去,成员只能靠管理员手动添加账号。很多人一开始不在意,等需要拉同事进来协作时才回头折腾邮件服务,属于可以提前避开的小麻烦。
第二个隐藏项是安全密钥。如果你是通过容器镜像部署的,启动前没有显式指定密钥,Dify 会生成一个随机值并在首次运行时写入持久化存储。问题在于,容器一旦重建、数据卷做了重置,这个随机值可能变化,导致用户的登录会话、加密后的 API 凭证全部失效。最典型的场景:某天你更新了镜像版本,重启容器,第二天打开后台发现所有模型供应商的凭证都没了,需要重新填写。这不是模型服务商的问题,而是初始化前就没把密钥固化下来。所以我建议把所有实例级环境变量在第一次部署时就确定好,尤其是与安全相关的几项。
1.3 初始化完成后想重置怎么办
很多人会问:初始化时填错管理员邮箱,或者想换一个工作空间名称,能不能重新初始化?
答案是否定的。Dify 没有界面上的一键重置按钮。想回到初始化前的状态,只能先停止相关容器,然后清除持久化数据卷,再重新启动。这个操作的副作用是毁灭性的:所有应用、知识库、成员、模型凭证,全部被清空。所以“重置初始化”在真实使用中很少发生,更常见的退路是备份恢复。
如果你刚装好、还没往里填任何业务数据,那清库重来无所谓;如果已经配好了模型供应商、建了几个应用,就别动这个念头,老老实实在设置里改名称、改邮箱即可。
提示:初始化阶段创建的账号是平台最高权限管理员,后续所有成员、API 凭证、模型供应商都由它统一管理。权限很大,密码别用弱口令,也别和私人账号混着用。
2. 模型供应商配置为什么被叫作“注入灵魂”
2.1 Dify 自己不产生模型能力,它只做编排
很多人第一次打开 Dify 的设置页会疑惑:为什么一个“应用开发平台”要专门搞一个模型供应商管理模块?这得从 Dify 的定位说起。
Dify 本身不训练模型、不托管模型、不提供大模型推理能力。它做的事情是编排:把模型能力、提示词、用户界面、工具调用、知识库检索组合成一个可交付的应用。模型供应商配置,本质上就是告诉 Dify 该去哪里调用模型、用哪个 API 凭证、能调用哪些模型。
我习惯用一个餐厅比喻来解释:Dify 是饭店,模型是后厨师傅,模型供应商配置相当于HR把师傅请进来并签好劳务合同。合同没签,餐厅菜单再多、装修再漂亮,也出不了菜。你在 Dify 里写好提示词、搭好知识库,没有可用的模型,整个应用就是一张“不能兑现的菜单”。
所以项目里常说的“注入灵魂”,翻译成技术语言就是:把外部模型服务通过供应商配置接入 Dify,让应用具备真正的推理与对话能力。
2.2 不同模型在 Dify 里的角色:不只对话这一种
一个完整应用,尤其是带知识库或者带 Agent 能力的应用,可能同时用到不止一种模型。
| 模型角色 | 实际用途 | 不配置会发生什么 |
|---|---|---|
| 系统推理模型(Reasoning Model) | 对话生成、文本创作、Agent 工具选择与参数解析 | 对话应用无法回答,简单来说应用直接瘫痪 |
| 嵌入模型(Embedding Model) | 把文档按语义切分成向量,写入向量数据库 | 知识库无法索引文档,检索结果为空 |
| 重排序模型(Rerank Model) | 对多路召回结果做二次排序,提升准确性 | 混合检索时相关内容排序不理想,但通常不报错 |
系统推理模型是最核心的,它负责所有“你说一句、它回一句”的逻辑。Agent 应用里,大模型还要承担“决定调用哪个工具、提取哪些参数”的职责,所以模型能力直接决定 Agent 的智商上限。
嵌入模型很多人会忽略,直到配置知识库时才发现少了它。文档上传后需要先切块、再通过嵌入模型转成向量,没有嵌入能力,文档根本进不了向量库。Rerank模型则更进阶一些,在小体量知识库上效果差异不明显,但检索量一上来,它的价值立刻显现。
2.3 模型来源的三条路线
接入 Dify 的模型服务,来源大致有三类。
第一种是直接接入云端模型服务商的 API 凭证。这种方式最省事,服务商提供现成的密钥和接口地址,你只需要在 Dify 里选择对应的供应商类型,填入凭证就算接好。优点是模型迭代快、开箱即用;缺点是数据会经过第三方服务,对数据敏感的场景要考虑合规与隐私要求。
第二种是通过兼容 OpenAI API 格式的自建网关接入自部署模型。很多团队会在自己的 GPU 机器上部署模型服务,再用一个统一网关暴露接口。这种方式的好处是数据不出内网,模型可以反复调优,但需要自己保障显存、并发和排队策略。
第三种是接入本地推理框架提供的服务。 некоторых团队会直接暴露本地进程的接口给 Dify,这种方式响应快、链路短,但稳定性和并发能力需要自己负责。
三条路线没有绝对优劣。我的经验是:先看数据要求,再看成本预算,最后看团队有没有能力运维模型服务。都不冲突的话,优先云端 API,十分钟不到就能跑通第一版应用。
3. 从“新建模型供应商”到“测试通过”的完整实操
3.1 配置前需要准备的三个参数
打开模型供应商页面之前,你至少要把三样东西准备好。
第一是 API Key,有时还包括 Secret Key。这是模型服务商颁发给你的身份凭证,注意区分哪些字段是“用户标识”,哪些是“密钥本身”。有些服务商还会要求填 Organization ID 或 Project ID,这些都是为了在多租户下区分调用来源,按服务商文档照填即可。
第二是 Base URL,即模型服务的接口基础地址。云端服务商通常直接提供;自建网关的话,Base URL 就是你给 Dify 暴露的那个地址。这里必须先确认一件事:地址是否包含了版本路径。同一套服务,有的地址根路径就能访问,有的必须补/v1,接错只能等报错。
第三是模型 ID 列表。同一个供应商下可能有很多模型,Dify 要求填写的不是模型中文名,而是服务商那边真正使用的模型标识符,通常是一串类似model-a-001的代号。这个字符串必须一字不差,大小写、连字符都不能错。
3.2 以“OpenAI API 兼容”为例的接入全步骤
Dify 左侧导航找到“设置”,进入“模型供应商”,这里能看到它内置的一大排供应商类型。如果你要接入的模型服务商不在内置列表里,也别急着放弃,Dify 保留了通用接入方式,也就是名为 OpenAI-API-compatible 的那一项。任何实现了类似/chat/completions接口的服务,理论上都能以这种方式接入。
操作步骤其实很短:
- 进入“模型供应商”页面,点击“新建供应商”。
- 选择 OpenAI-API-compatible 类型。
- 填写 Base URL,也就是你模型服务的实际地址。
- 填写 API Key。
- 在模型列表区域,点击“添加模型”,填写模型类型和模型 ID。
- 保存。
需要注意,选择不同的供应商类型时,Dify 会自动决定是否在 Base URL 后面补/v1。换成兼容协议自己填地址时,Dify 通常不会帮你猜路径,你在上游服务配置的根路径是什么,就填什么。
很多自建网关还支持多个 Key 轮换,或者需要额外填写请求头里自定义的鉴权字段。遇到这种情况,先看 Dify 该类型的表单里是否有对应选项,没有的话,要么在网关侧把鉴权改成标准 Bearer 形式,要么让网关给 Dify 单独生成一个可直接使用的 Key。
3.3 界面“测试”之外,自己动手验证上游
配置完成后,Dify 在模型条目右侧提供了“测试”按钮,点击会发起一次真实调用。结果成功并不代表万事大吉,因为测试通常只验证了连通性和凭证有效性,模型在完整提示词场景下的表现,还要靠真实应用跑起来才知道。
我的习惯是,在界面上测试之外,再用命令行直接打一次 Base URL,彻底把问题边界划清楚。比如:
curl https://your-endpoint.example.com/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "your-model-id", "messages": [{"role": "user", "content": "ping"}]}'如果这个请求返回了正常的响应体,说明上游服务本身没问题,接下来再去 Dify 里判断是不是模型 ID、供应商类型或路径配置有误。如果这里都连不通,就别在 Dify 界面里反复试了,先解决上游。
4. 配置模型时我踩过的三个坑,以及排查链路
4.1 Base URL 少了一个/v1,日志反复报 404
这个坑非常典型。第一次接入自建模型服务时,我填 Base URL 直接写了根地址,比如https://model.internal.example.com,结果 Dify 里的测试按钮一直报错,日志里连续出现 404。
排查之后发现,那个模型服务对外暴露的完整接口是https://model.internal.example.com/v1/chat/completions,如果 Base URL 少了/v1,Dify 发出的请求就会落到https://model.internal.example.com/chat/completions,上游自然返回 404。
这类问题不会每次都一样,有的服务本身根路径就能访问,有的必须带版本前缀。所以填写 Base URL 前,先用浏览器或命令行确认一个完整可用的接口地址,再决定 Base URL 填到哪一级。宁可多测试一次,也不要靠猜。
4.2 模型 ID 对不上:界面配置成功,应用启动后报错
模型 ID 这类配置的诡异之处在于:填错也能保存成功,因为 Dify 不会在保存时去校验每个模型 ID 是否真实存在。真正的报错发生在应用调用时,错误信息通常类似“模型不存在”或“未知模型”。
我还遇到过另一个情况:某个模型服务商更新了模型版本,老 ID 被下线,而 Dify 里还留着旧 ID,应用突然不可用。这种问题不存在什么“标准解法”,只能回到模型服务商的控制台,确认当前可用的模型列表,再到 Dify 里同步更新。
我的建议是:在建完供应商之后,顺手把新增的模型全点一遍“测试”。虽然慢一点,但能提前过滤掉八成的 ID 拼写问题。
4.3 Embedding 和 Rerank 没配:知识库应用像“失忆”一样
对话应用配好之后,很多人会急着去创建知识库,结果上传文档后一直在“索引构建”或直接报“嵌入失败”。原因往往是:系统中没有配置任何嵌入模型。
嵌入模型和系统推理模型是两码事。推理模型管生成,嵌入模型管向量化。知识库要把文档转成向量才能被检索,这一步必须有嵌入模型参与。只配了推理模型,文档照样进不了知识库。
Rerank 模型则相反,不配通常不报错,只是检索排序效果平庸。如果你的知识库在多个数据源上做了混合检索,检索结果里经常混着不相关内容,这时候配一个重排序模型,质量提升会很直观。怕选错的话,先在测试页里拿几段真实文档跑一下效果,再落到正式配置上。
4.4 一套顺手的排查顺序
模型报错时最容易犯的错误是在 Dify 界面里反复点“测试”,浪费大量时间。我自己总结了一条固定排查链路,每次照着走,定位速度快很多。
| 现象 | 常见原因 | 先查什么 |
|---|---|---|
| 连接超时 | 网络路径不通、防火墙拦截、地址本身不可达 | 用 curl 直接请求 Base URL |
| 401 错误 | API Key 错误、密钥过期、请求头格式不对 | 核对服务商控制台里的 Key 状态 |
| 404 错误 | Base URL 路径少了版本前缀 | 检查完整接口地址,确认 Base URL 层级 |
| 模型不存在 | 模型 ID 拼写错误、上游模型下线 | 到服务商控制台核对可用模型列表 |
| 索引失败 | 嵌入模型未配置或额度不足 | 确认 Dify 中是否已配 Embedding 模型 |
执行的顺序是:先确认上游服务可用,再检查 Dify 里的配置,最后看应用编排层有没有单独指定其他模型。大多数模型配置问题,都能在这一条线上找到答案。
注意:修改 Base URL 或模型 ID 后,部分应用会话可能仍使用旧的连接信息,建议改完配置后新建一个会话测试,避免被浏览器缓存或者旧会话误导。
5. 配置完成后,还有几件容易被忽略的事
5.1 把模型设为“系统默认模型”到底意味着什么
一个模型配好之后,还要在供应商页面的模型条目标签上,把它设为默认。Dify 里这一步的位置不太好找:进入模型供应商,找到对应供应商,点击模型行右侧的按钮,选择“设为默认”。
设为默认之后,新建应用、Agent 配置、知识库索引的初始选项都会自动落到这个模型上,不需要每个应用手选一遍。尤其在一个实例下有成百上千个应用时,默认模型的粒度直接影响团队使用体验。
这里有个细节:默认模型是分“用途”的。推理模型有推理模型的默认,嵌入模型有嵌入模型的默认,Rerank 同样。只设了一个推理模型作为默认,不代表知识库那边会自动出现嵌入模型,两者是独立的。
5.2 在应用编排里按场景切换模型
默认模型解决的是“下限”,但不等于每个应用都必须用同一个模型。进入具体的应用编排页面,右上角可以切换当前应用使用的模型,这里的选择优先级高于系统默认。
我的习惯是:简单分类、意图识别这类任务,用响应快、便宜的小模型;复杂写作、长文档分析、多轮 Agent 对话,用能力更强的大模型。这样既不牺牲体验,也不会让成本失控。
Agent 应用要特别注意:一个 Agent 可能同时涉及主模型、工具调用参数解析模型,不同角色的模型可以不一样。如果你只看到一个模型选择框,先确认是不是没展开更多设置。
5.3 别让模型配额变成事后才知道的账单
模型凭证接入 Dify 后,调用的消耗全部记在模型服务商的账户上。Dify 界面能看到一部分用量统计,但真正的费用账单、配额限制、告警阈值,都需要到服务商控制台去设置。
团队规模稍大时,我会建议给不同项目分配独立的 API Key,在 Dify 里建多个供应商或分组。好处很直接:某个项目跑偏导致消费飙升,从账单上能立刻定位到是哪个 Key 的问题,不会一锅粥。
另外,Dify 本身对凭证做了加密存储,但平台管理员权限足够大,仍然可能接触到敏感配置。合理分配成员角色,不给所有人“管理员”权限,是模型凭证安全里不可跳过的一环。
最后分享一点个人习惯:每次接手一个新环境,我会先用 curl 把 Base URL 打一遍,再进 Dify 里配模型;配完之后顺手把“默认模型”和一个最小对话应用都测一轮,确认没有问题了才交给团队。这套动作看着多,实际上十分钟内能完成,但能过滤掉后续九成以上的模型报错。初始化与模型供应商配置这一步理顺了,后面的应用编排才真正跑得起来,Dify 也就从“部署好的平台”变成了“能交付应用的系统”。