Dify 配置 OpenAI 兼容模型 API:Base URL、模型名与报错排查
简答:Dify 配置 OpenAI 兼容模型 API,建议先用 API Base URL 加 API Key 请求 /v1/models,确认真实模型 ID 和权限,再在“集成 > 模型供应商”安装或启用 OpenAI-API-compatible 供应商。Base URL 填 API 根地址,不填 /chat/completions;LLM 通常选择 Chat Completions,只有服务端明确支持时再选 Responses。
定义:OpenAI 兼容模型 API,是使用近似 OpenAI 请求格式的服务接口,通常通过 API Base URL、API Key、模型 ID 和 Chat Completions 或 Responses 等协议接入 Dify。
先做接口自检:确认 Base URL、Key 和真实模型名
本文是 onomeo.cyou 的第三方接入指南,不代表 Dify 或任一 API 服务商的官方文档。配置前准备四项信息:API Base URL、API Key、接口返回的真实模型 ID,以及该模型支持的调用协议。
OpenAI 的模型列表接口返回模型的 id,这个 ID 才是可以放进 API 请求中的模型标识。兼容服务通常也沿用类似接口,因此不要直接把网页显示名称、套餐名称或自定义备注当作请求模型名。可先参考模型列表接口文档确认返回结构。
curl --fail-with-body --max-time 20 "$API_BASE_URL/models" \
-H "Authorization: Bearer $API_KEY"上面的示例假设 API_BASE_URL 已经包含正确的版本路径,例如 https://example.com/v1。如果服务商要求在根地址后拼接 /v1,应按其文档设置;不要为了“保险”重复拼接。
- 返回 200:检查 JSON 中的
data[].id,记录要在 Dify 中填写的模型 ID。 - 返回 401:优先核对 API Key、Bearer 头和 Key 所属账户。
- 返回 403:检查 Key 是否有访问该项目、模型或接口的权限。
- 返回 404:检查 Base URL 是否已经包含或缺少
/v1,并确认请求路径实际存在。 - 超时:先用同一地址执行较短的
/models请求,再判断是网络、服务端响应还是模型调用耗时。
如果兼容服务没有提供 /models,公开示例只展示了部分服务的接口行为,不能据此推断所有服务都支持该路径;此时应到服务商文档核对模型列表接口,或使用其明确给出的模型 ID。
在 Dify 中安装并配置 OpenAI-API-compatible 供应商
Dify 官方文档将入口描述为“集成 > 模型供应商”,并说明工作空间所有者和管理员可以管理供应商密钥。对不在内置列表中的服务,应先安装对应供应商,再填写自己的 API 密钥和其他必要信息。具体入口可查看Dify 模型供应商文档。
- 进入 Dify 工作空间的集成 > 模型供应商。
- 搜索并安装或启用OpenAI-API-compatible供应商。
- 选择添加自定义模型,先选择模型类型
LLM。 - 在“模型名称”中填写接口返回的真实模型 ID。
- “模型显示名称”只用于 Dify 界面展示,可以填写便于识别的名称;不确定时可与真实模型 ID 保持一致。
- 在 API Key 中填写供应商密钥,在 API Base URL 中填写接口根地址。
- 选择对话类型、API 类型、上下文长度和最大输出 token 等字段,然后保存凭据。
官方兼容插件配置文件列出了模型名称、显示名称、API Key 和 API Base URL 等字段,并将 LLM、Rerank、文本向量、语音转文字和文字转语音作为不同模型类型处理。字段和默认值应以当前插件配置为准,可查看OpenAI-API-compatible 供应商配置文件。
| 字段 | 怎么填 | 核对重点 |
|---|---|---|
| 模型类型 | 聊天模型一般选 LLM | Embedding、Rerank、语音模型不要混用 LLM 配置 |
| 模型名称 | 填写接口返回的真实 ID | 不要只填显示名称或产品别名 |
| 模型显示名称 | 填写界面中容易识别的名称 | 它与请求中的模型 ID 可以不同 |
| API Key | 填写供应商密钥 | 不要放进 URL 查询参数或提交到前端代码 |
| API Base URL | 填写 API 根地址 | 不要填写完整的 /chat/completions 路径 |
| 对话类型 | 按服务端协议选择 Chat 或 Completion | 大多数聊天接口优先核对 Chat Completions |
| 上下文长度 | 按模型或服务商文档填写 | 未核实时不要自行宣称具体上限 |
Base URL、/v1 和最终请求地址怎么判断
API Base URL 与最终接口地址不是一回事。假设 Base URL 是 https://api.example.com/v1,常见的 Chat Completions 请求地址会在其后追加 /chat/completions;Base URL 不应直接填写到这个完整路径,除非该插件字段明确要求完整端点。
官方兼容插件的示例将 API Base URL 写成类似 https://api.openai.com/v1,并将其作为独立字段。配置时应先确认插件是否负责追加版本路径,再决定是否填写 /v1。可以用下面的判断表排查:
| 现象 | 可能填写方式 | 处理动作 |
|---|---|---|
请求变成 /v1/v1/models | 插件自动追加版本路径,但 Base URL 也手动加了 /v1 | 查看插件说明,尝试去掉重复的版本路径 |
请求变成 /chat/completions/chat/completions | Base URL 填了完整接口路径 | 退回 API 根地址或包含 /v1 的 Base URL |
/models 能通,聊天请求 404 | 模型接口和聊天接口的路径规则不同 | 核对服务商的 Chat Completions 路径以及插件拼接规则 |
| 保存时提示地址无效 | 协议、域名、路径或末尾斜杠不符合插件预期 | 复制服务商文档中的 Base URL,再逐步删减路径测试 |
官方 OpenAI 插件 README 说明,其 API base 可以带或不带末尾 /v1,但这条规则属于该插件的配置说明,不能直接套用到所有兼容服务。对于 OpenAI 官方插件,可参考Dify OpenAI 插件配置说明;对于通用兼容插件,应优先以其当前字段定义和服务商文档为准。
Chat Completions、Responses API 和 token 参数怎么选
OpenAI-API-compatible 插件当前配置中提供 Chat Completions 和 Responses 两种 API 类型,默认值是 Chat Completions;同时提供 auto、max_tokens 和 max_completion_tokens 三种 token 参数选择。相关字段可以在官方插件供应商配置文件中核对。
| 配置项 | 适用判断 | 排错动作 |
|---|---|---|
| Chat Completions | 服务商公开文档只提供 /chat/completions,或兼容接口明确要求该协议 | 确认消息格式、流式格式和工具调用能力 |
| Responses | 服务商明确支持 /responses,并说明请求字段与返回事件 | 不要仅因为模型名称相同就直接切换协议 |
| token 参数为 Auto | 插件可以根据模型或配置自动判断 | 若服务端提示参数不支持,再显式选择对应字段 |
max_tokens | 服务端文档要求传统 token 参数名 | 用最小请求验证是否接受该字段 |
max_completion_tokens | 服务端或接口协议明确要求该字段 | 不要与不支持它的网关混用 |
如果接口返回“参数不支持”,先把模型配置切换到严格兼容模式,关闭未确认的扩展设置,再检查 token 参数名、用户标识参数和流式用量选项。兼容插件配置文件说明,严格模式与扩展模式会影响额外参数;部分网关还可能拒绝顶层 user 参数。找不到服务端支持声明时,应把该项视为未核实,不要凭经验强行开启。
保存后怎么验证:从最小聊天到 Dify 工作流
- 先验证供应商凭据:保存 API Key 和 Base URL 后,观察 Dify 的供应商验证结果。失败时不要马上修改模型能力,先回到地址和 Key。
- 再添加一个 LLM:只填写真实模型 ID、API Key、Base URL、对话类型和上下文长度,其余扩展能力先保持默认。
- 执行最小聊天:使用一条简单文本,不启用工具、联网、结构化输出、图片和复杂系统提示。
- 再验证流式:若非流式成功、流式失败,检查服务端是否支持 SSE,以及是否能返回结束事件和用量字段。
- 最后放进工作流:先用一个开始节点、LLM 节点和结束节点验证,再逐项加入知识库、工具、Agent 或结构化输出。
兼容插件的配置文件包含流式用量选项。它说明某些兼容服务只有在请求中显式要求 stream_options: {include_usage: true} 时才返回流式用量;如果端点拒绝该字段,可以关闭该选项。这个设置只应在服务端行为已经确认后调整。
如果你使用的是自建 vLLM、LM Studio、Ollama 网关或第三方聚合服务,差异通常集中在 Base URL 是否包含 /v1、是否提供 /models、模型 ID 写法、Chat Completions 支持范围、流式格式以及是否接受额外参数。不要把一个服务的端点规则直接复制给另一个服务。
Dify 常见错误对照表
| 错误或现象 | 优先检查 | 下一步 |
|---|---|---|
| 401 Unauthorized | API Key 是否正确、是否带 Bearer、Key 是否被撤销 | 用同一 Key 单独请求 /models,确认不是 Dify 表单输入问题 |
| 403 Forbidden | 账户、项目、组织或模型权限 | 查看服务商控制台和 Key 的访问范围 |
| 404 Not Found | Base URL、/v1、最终接口路径 | 记录 Dify 实际请求路径,排除重复或缺少路径 |
| 模型不存在 | 模型名称不是接口返回的真实 ID,或 Key 无权访问 | 重新获取模型列表并复制 data[].id |
| 429 Too Many Requests | 服务商速率限制、并发或配额 | 降低并发,等待服务端给出的重试时间,并检查用量限制 |
| 参数不支持 | max_tokens、max_completion_tokens、user 或扩展参数 | 切换严格模式,逐项关闭未确认的可选参数 |
| 连接超时 | 域名解析、网络路径、服务端响应时间和 Dify 部署环境 | 从部署 Dify 的同一环境请求 /models,区分网络与模型处理耗时 |
| 流式中断 | SSE 支持、代理缓冲、结束事件、include_usage 设置 | 先关闭流式或用最小提示测试,再检查服务端流格式 |
/v1/v1 | 插件和 Base URL 是否都添加了版本路径 | 只保留一处版本路径,并重新保存凭据 |
排错时建议保留三份信息:Dify 中填写的 Base URL、脱敏后的请求路径、服务端返回的状态码和错误正文。不要在日志、截图或 URL 中暴露完整 API Key。
API Key、Dify 应用 Key 与供应商密钥不是一回事
配置模型供应商时填写的是上游 API 服务的供应商密钥,用于让 Dify 调用模型。Dify 应用自身的 API Key 则用于外部客户端调用 Dify 应用,两者作用方向不同,不能互相替代。
- 供应商 API Key:填写在模型供应商或自定义模型凭据中。
- Dify 应用 API Key:用于调用已经发布的 Dify 应用接口。
- 模型 ID:决定请求发送给哪个模型,不能用 Key 或显示名称代替。
Dify 官方文档还说明,供应商密钥在工作空间范围内生效,并可能由自己的供应商账户承担调用费用;因此生产环境应限制管理员权限,区分开发与生产凭据,并定期轮换密钥。
参考资料
- Dify Docs:模型供应商
- Dify 官方插件:OpenAI-API-compatible 供应商配置文件
- Dify 官方插件:OpenAI-API-compatible README
- Dify 官方插件:OpenAI 配置说明
- OpenAI API Reference:List models
常见问题
Dify 的 API Base URL 到底要不要带 /v1?
没有适用于所有服务的统一答案。应先看兼容服务和 Dify 插件如何拼接路径:如果 Base URL 已包含 /v1,最终请求不应再次出现 /v1;如果插件会自动追加版本路径,则应按插件要求填写根地址。出现 /v1/v1 时,优先检查是否重复填写。
模型名称可以填写模型显示名称吗?
通常不建议这样做。模型显示名称主要用于界面展示,模型名称应填写接口返回的真实模型 ID。先请求模型列表,复制返回 JSON 中的 data[].id,再添加到 Dify。若服务没有模型列表接口,应以服务商公开文档给出的模型标识为准。
Dify 保存模型时提示 404,应该先改模型名还是 Base URL?
先检查 Base URL 和最终请求路径,再检查模型名。404 可能来自缺少或重复的 /v1、误填完整接口路径,也可能来自服务端没有对应端点。建议先用同一 Key 请求 /models,再核对 Dify 实际调用的 Chat Completions 或 Responses 路径。
Chat Completions 和 Responses API 应该怎么选?
如果服务商文档只提供 /chat/completions,选择 Chat Completions;只有在服务端明确支持 /responses 且字段和返回格式与插件兼容时,才选择 Responses。不能仅凭模型名称相同就判断两种协议可以互换。
为什么 Dify 流式调用成功,但用量统计不准确或流式中断?
先确认服务端是否支持 SSE 和结束事件,再检查流式用量设置。官方兼容插件说明,部分服务端只有在请求包含 stream_options.include_usage 时才返回 usage;如果端点拒绝该字段,可以关闭流式用量选项,并先用最小请求验证完整输出。
自建 vLLM、LM Studio 或 Ollama 网关都能直接套用同一配置吗?
不能直接假设完全相同。它们可能在 /v1 路径、模型 ID、/models 支持、流式格式、工具调用和额外参数上存在差异。应分别核对网关文档,再用 /models 和最小聊天请求完成两步验证。
相关阅读
参考资料
- Dify Docs:模型供应商(docs.dify.ai)
- Dify 官方插件:OpenAI-API-compatible 供应商配置文件