Dify OpenAI 兼容 API 配置方法
简答:Dify 接入 OpenAI 兼容 API,先确认服务商给出的 Base URL、API Key 和真实模型 ID,再在 Dify 的 OpenAI-API-compatible 模型供应商中添加 LLM。最容易出错的是 Base URL:如果完整地址是 <code>https://example.com/v1/chat/completions</code>,通常先填写 <code>https://example.com/v1</code>,不要把 <code>/chat/completions</code> 一起填入。本文只讲“Dify 作为客户端调用外部模型”,不讲把 Dify 应用暴露成 OpenAI 兼容 API。
定义:OpenAI 兼容 API 是采用相近认证方式、请求结构或端点命名的模型接口,但不同服务对 Chat Completions、Responses、流式输出、工具调用和视觉输入的支持范围可能不同。
先试这一步:用最小请求确认接口真的可用
配置 Dify 前,先在能访问模型服务的机器上验证四项信息:Base URL、API Key、模型 ID和聊天端点。不要一开始测试 Agent、工具调用、图片或结构化输出;先用一条普通文本消息确认基础调用。
curl --fail-with-body --silent --show-error \
--connect-timeout 10 --max-time 60 \
https://example.com/v1/chat/completions \
-H 'Authorization: Bearer REPLACE_WITH_API_KEY' \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"model": "REPLACE_WITH_MODEL_ID",
"messages": [
{"role": "user", "content": "只回复:连接成功"}
],
"stream": false
}
JSON上面的域名、密钥和模型名都是占位符。成功不能只看 HTTP 200:Chat Completions 常见响应会在 choices[0].message.content 中返回文本,但兼容服务可能存在响应字段差异,因此应同时检查响应是否为 JSON、是否出现错误字段,以及是否有可读的助手内容。LM Studio、Ollama、vLLM 和 llama.cpp 的官方文档都提供了类似的 /v1/chat/completions 接口示例,但具体模型 ID仍应以各自接口实际返回或服务文档为准。LM Studio 官方兼容端点说明、Ollama 官方兼容接口说明、vLLM 官方在线服务说明、llama.cpp 官方服务端说明。
| 结果 | 说明 | 下一步 |
|---|---|---|
| 返回 JSON 且有助手文本 | Key、路径和模型 ID 基本匹配 | 进入 Dify 添加模型 |
| 401 或 403 | 认证或权限问题 | 核对 Key、项目权限和模型权限 |
| 404 | 路径层级或模型 ID可能错误 | 检查 /v1 是否重复或遗漏 |
| 返回 HTML、网关页面或空响应 | 不一定是模型接口响应 | 记录状态码和脱敏后的响应体 |
Dify 中逐字段配置 OpenAI 兼容模型
在 Dify 中安装或启用模型插件后,选择名称为 OpenAI-API-compatible 的模型供应商,添加一个 LLM 模型。不同 Dify 部署形态、工作区权限和插件版本的菜单位置可能不同;不要只按截图找入口,应以“插件已安装、模型供应商可见、配置字段能保存”为判断标准。Dify 官方插件仓库的清单显示,该模型插件由 langgenius 维护,并包含 OpenAI 兼容模型供应商配置。查看 Dify 官方插件清单。
| 字段 | 建议填写 | 核验方法 |
|---|---|---|
| 模型类型 | LLM | 聊天模型不要误选 Embedding 或 Rerank |
| 模型名称 | 服务端真实模型 ID | 优先查看模型服务的模型列表或启动日志 |
| 显示名称 | 可读的自定义标签,可留空 | 它只是 Dify 界面名称,不等于请求中的模型 ID |
| API Key | 服务端要求的密钥 | 不要把完整 Key 放入截图、日志或公开仓库 |
| API Base URL | 通常填写域名加版本路径,例如 https://example.com/v1 | 不要直接填写 /chat/completions,除非插件字段明确要求完整端点 |
| 对话类型 | 优先选择 Chat | 只有服务端明确提供传统 Completion 格式时才选 Completion |
| API 类型 | 默认先选 Chat Completions API | 只有确认服务端和插件版本都支持时才尝试 Responses API |
| 上下文长度 | 填写服务端和模型确认的值 | 不要为了绕过报错随意夸大 |
| 最大输出 token | 先使用保守值 | 确认请求成功后再调整 token 参数 |
Dify 官方字段文件当前列出了 LLM、Rerank、文本嵌入、语音转文本和文本转语音等模型类型;本文只讨论 LLM。该文件还列出 API Base URL、模型上下文长度、API 类型、token 参数名、流式用量、视觉、结构化输出等配置项。由于这些字段会随插件代码变化,发布前应以Dify 官方 Provider 字段定义和你工作区实际安装版本为准。相关字段页面同时说明,max_tokens 与 max_completion_tokens 不能在不了解上游要求时随意互换;流式用量字段也可能被某些接口拒绝。github.com
LM Studio、Ollama、vLLM、SGLang、llama.cpp 怎么填
下面的表格只列官方资料能够核验的配置差异。对于 SGLang,Dify 的官方字段说明把它列为支持流式 usage 的 OpenAI 兼容服务示例,但没有在本文中推断其所有参数都与其他服务相同。云端聚合 API 也不能因为标注“OpenAI 兼容”就默认支持 Responses、工具调用或视觉输入,仍需以该服务的端点文档和实测响应为准。
| 服务类型 | Base URL 形态 | 模型 ID 来源 | 首次接入注意点 |
|---|---|---|---|
| LM Studio | http://localhost:1234/v1 | LM Studio 当前加载模型的标识 | 官方列出 /v1/models、/v1/chat/completions、/v1/responses 和 Embeddings 等端点;先确认本机服务已启动 |
| Ollama 本地服务 | http://localhost:11434/v1/ | 本地模型名称,例如带标签的模型名 | 官方示例中 OpenAI 客户端要求提供 API Key 字段,但本地兼容接口示例注明该值会被忽略;Dify 仍应按字段要求填写占位值或服务要求的 Key |
| vLLM | 通常是部署地址加 /v1 | 启动服务时暴露的模型名 | Chat Completions 需要文本生成模型和可用的 chat template;工具调用等能力不能仅凭端点名称推断 |
| SGLang | 以服务启动参数和文档给出的 OpenAI 兼容地址为准 | 服务实际暴露的模型名 | 若流式 usage 被拒绝,在 Dify 中关闭“流式中包含用量”后再测 |
| llama.cpp | 官方示例为服务地址加 /v1 | /v1/models 返回的模型信息或启动配置 | Chat Completions 依赖可用的 chat template;Responses API 由服务端转换为 Chat Completions 请求 |
| 云端聚合 API | 严格按该服务文档填写 | 服务端模型列表、控制台或接口返回值 | 逐项确认认证头、路径、模型 ID、流式、工具调用和限速规则 |
LM Studio 官方示例把本地 Base URL写为 http://localhost:1234/v1;Ollama 官方示例使用 http://localhost:11434/v1/,并展示了 Chat Completions 与 Responses 调用;vLLM 官方文档列出 Chat Completions、Responses 和 Embeddings 等接口;llama.cpp 官方服务端文档列出 Chat Completions、Responses 和 Embeddings 路由。LM Studio Base URL 与端点、Ollama Base URL 与模型调用、vLLM API 支持范围、llama.cpp API 路由。github.com
云端版、自部署版和插件版本如何判断差异
不要把某一张 Dify 截图当作所有环境的固定界面。云端版通常由平台控制插件运行环境;自部署版还会受到 Dify 版本、插件安装方式、Runner 架构、网络出口和工作区权限影响。实际配置时按以下顺序判断:
- 打开当前工作区的插件管理页面,确认 OpenAI-API-compatible 插件是否已安装、启用,并记录页面显示的插件版本。
- 进入模型供应商设置,确认是否能看到
API Base URL、模型类型和 API 类型等字段;字段不存在时,不要按旧教程强行填写。 - 对照插件清单和 Provider 字段定义,确认当前版本是否包含 Responses、token 参数名、流式 usage、结构化输出等选项。
- 如果自部署环境无法安装插件或保存后供应商不出现,先检查插件 Runner、工作区管理员权限和 Dify 到模型服务的网络连通性。
- 无论云端还是自部署,最终都用外部 curl 与 Dify 的最小文本调用分别验证;外部成功、Dify 失败时,比较实际请求地址、请求体、流式设置和 token 字段。
本文核验时间为 2026 年 10 月 31 日。插件仓库的主分支和你当前环境可能不同,因此版本号、字段名称和菜单位置以当前工作区实际显示为准。Dify 官方插件仓库还提供了另一个“把 Dify 应用暴露为 OpenAI 兼容接口”的扩展,两者方向相反:模型供应商插件是 Dify 调用外部模型,兼容接口扩展则是外部客户端调用 Dify 应用。查看 Dify 官方兼容接口扩展说明。
按错误现象完成排错闭环
| 错误或现象 | 先检查 | 处理方式 |
|---|---|---|
| 401 | Key 是否完整、是否有空格、Authorization 格式是否正确 | 重新用最小 curl 验证,确认 Dify 保存的是当前工作区使用的 Key |
| 403 | 账号、项目、模型权限或来源限制 | 到上游控制台核对权限,不要只更换模型名 |
| 404 | Base URL 是否重复包含 /v1 或已包含完整路径 | 把 Base URL 与最终请求地址逐段拼接检查 |
| 400 | 不支持的参数、token 字段、工具或响应格式 | 关闭工具、视觉、结构化输出和扩展参数,只保留普通文本 |
| 429 | 限速、并发或账户额度 | 降低并发,按上游规则退避,不要在两层同时无限重试 |
| 超时 | 网络出口、模型加载、上游排队和 Dify 超时设置 | 先用短提示词和非流式请求测试,再逐项增加复杂度 |
| 模型不存在 | 模型显示名与真实模型 ID是否混淆 | 使用服务端实际识别的模型字符串 |
| 流式中断或 usage 为空 | 服务端是否支持流式 usage | 先关闭流式;若普通响应成功,再确认是否接受 stream_options |
Dify 官方字段定义说明,流式 usage 配置会请求 stream_options: {include_usage: true};部分 OpenAI 兼容服务只有在显式请求时才返回用量,如果接口拒绝该字段,应关闭此选项。排错日志只保留脱敏后的请求地址、状态码、响应体片段、模型类型和 API 类型,不要公开完整 Key 或 Authorization 请求头。查看流式 usage 字段说明。github.com
完成配置后的验收清单
- 外部最小请求返回可读取的助手文本。
- Dify 中已安装并启用 OpenAI-API-compatible 模型插件。
- 模型类型选择为 LLM,模型 ID与服务端真实名称一致。
- Base URL 与最终请求路径拼接后没有重复的
/v1或/chat/completions。 - API 类型、对话类型和上游接口实际支持范围一致。
- 在 LLM 节点、Chatflow、工作流或 Agent 中明确选择了刚添加的模型。
- 先通过普通短文本,再单独测试流式、工具、视觉和结构化输出。
- 日志和工单中没有暴露 API Key、Authorization 头或敏感用户输入。
如果 curl 成功而 Dify 失败,优先比较实际请求地址、模型字段、请求体、流式开关和 token 参数名;如果 curl 本身失败,则先修复上游接口,不要继续反复修改 Dify 界面字段。
常见问题
Dify 的 OpenAI 兼容 API Base URL 到底要不要加 /v1?
没有对所有服务都成立的固定答案。如果完整聊天地址是 https://example.com/v1/chat/completions,通常把 https://example.com/v1 填入 Base URL,再由插件补上聊天路径。若出现 404,检查 /v1 是否重复、遗漏,或 Base URL 是否误填了完整的 /chat/completions。
Dify 中的模型显示名称和模型 ID有什么区别?
显示名称主要用于界面识别,可以自定义;模型 ID会进入实际请求,必须使用服务端能识别的字符串。遇到模型不存在时,应以模型列表、启动参数或服务商文档中的真实 ID为准。
为什么已经能调用 Chat Completions,还不能使用工具或视觉?
OpenAI 兼容通常只说明部分请求格式相近,不代表所有能力都实现。聊天、流式、工具调用、视觉和结构化输出应分别验证;先用普通短文本成功,再一次只开启一个高级能力。
Dify 配置后返回 400,最先应该关闭哪些选项?
先关闭工具调用、视觉输入、结构化输出、扩展思考和非必要额外参数,保留 LLM、Chat、普通文本消息和非流式请求。基础请求成功后,再逐项启用并记录是哪一个字段触发错误。
Ollama、LM Studio 或本地 llama.cpp 没有真正的 API Key,Dify 怎么填?
应按 Dify 字段要求填写一个占位值或本地服务要求的值,同时以本地服务官方文档为准。Ollama 官方 OpenAI 兼容示例注明本地接口示例中的 Key 会被忽略;这不代表所有本地服务或远程网关都允许空 Key。
Dify 的 OpenAI-API-compatible 模型插件和把 Dify 应用变成兼容 API 是同一个功能吗?
不是。前者让 Dify 作为客户端调用外部模型;后者让外部客户端调用 Dify 应用。本文只覆盖前者,即在 Dify 中配置外部 OpenAI 兼容模型。
相关阅读
参考资料
- Dify 官方 OpenAI-API-compatible Provider 字段定义
- Dify 官方 OpenAI-API-compatible 插件清单
- Dify 官方 OpenAI 兼容接口扩展说明
- LM Studio 官方 OpenAI 兼容端点说明(lmstudio.ai)
- Ollama 官方 OpenAI 兼容接口说明
- llama.cpp 官方服务端与 OpenAI 兼容 API 说明
- docs.vllm.ai(docs.vllm.ai)