Dify 接入 AnyRouter OpenAI 兼容 API:Base URL、模型与排错教程
简答:可以接入,但不要直接猜模型名或把完整接口路径填进 Base URL。先用 AnyRouter 页面公开的 OpenAI 兼容地址和 API Key 验证 `/models`、`/chat/completions`,再在 Dify 的 OpenAI-API-compatible 模型供应商中填写 API Base URL、模型名称和模型类型;截至 2026 年 11 月 4 日,AnyRouter 的具体模型权限、Embedding、Rerank 和 Responses 能力仍应以账号实际返回为准。
定义:OpenAI 兼容 API 是采用相近请求结构和认证方式的接口,通常使用 Bearer API Key、模型 ID以及 `/chat/completions` 等端点,但兼容不代表所有参数、模型类型和高级能力完全一致。
30 秒速查卡:先确认这几个字段
本文是面向开发者的独立配置指南,不代表 AnyRouter 官方页面。AnyRouter 公开页面显示其提供 OpenAI 兼容接口,示例请求使用 https://anyrouter.cfd/api/v1/chat/completions,页面底部的 API 状态入口显示基础地址为 https://anyrouter.cfd/api/v1。配置时仍建议以你登录后控制台或当前文档显示的地址为准。
| 字段 | 建议填写 | 核验方法 |
|---|---|---|
| 模型供应商 | OpenAI-API-compatible | 在 Dify 插件或模型供应商中安装、打开兼容插件 |
| API Base URL | https://anyrouter.cfd/api/v1,需按当前页面核对 | 不要填写完整的 /chat/completions 路径 |
| API Key | 从你的 AnyRouter 控制台创建的 Key | 只放在密码字段或环境变量中,不写入前端代码 |
| Model Name | 以模型目录或 /models 返回的 ID 为准 | 不要把显示名称当作模型 ID |
| Completion Mode | 优先选择 Chat | 只有接口明确支持 Responses 时才切换 |
AnyRouter 公开页面将其接口描述为 OpenAI 兼容,并展示了带有 /api/v1 的聊天请求示例;该页面同时列出了模型目录,因此模型名称应以当前可用目录和你的 Key 权限为准,而不是照抄第三方教程。查看 AnyRouter 当前公开接口示例
先用 curl 验证 API,再打开 Dify
先排除 Key、网络和模型权限问题。下面的命令从环境变量读取凭证,不会把密钥硬编码进脚本。若你的控制台给出的 Base URL 不同,请替换环境变量值。
export ANYROUTER_BASE_URL="https://anyrouter.cfd/api/v1"
export ANYROUTER_API_KEY="请替换为你的 API Key"
curl --fail-with-body --silent --show-error \
"$ANYROUTER_BASE_URL/models" \
-H "Authorization: Bearer $ANYROUTER_API_KEY"如果返回 JSON 模型列表,从其中复制真实的 id,不要复制页面上的中文显示名称。若 /models 不可用,不要据此断定服务不可用:可以直接用你已确认的模型 ID发起最小聊天请求。
export ANYROUTER_MODEL="请替换为接口返回的模型 ID"
curl --fail-with-body --silent --show-error \
"$ANYROUTER_BASE_URL/chat/completions" \
-H "Authorization: Bearer $ANYROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d "$(python - <<'PY'
import json
import os
print(json.dumps({
"model": os.environ["ANYROUTER_MODEL"],
"messages": [{"role": "user", "content": "请只回复:连接成功"}],
"stream": False
}))
PY
)"请求路径和请求体是 OpenAI 兼容接口的常见形式,但 AnyRouter 对具体模型、参数和权限的支持仍需以实际响应核对。公开页面提供了同类聊天请求示例,可作为路径格式的参考。核对公开请求示例
在 Dify 中安装并配置 OpenAI-API-compatible
Dify 官方插件仓库中的 OpenAI-API-compatible 插件支持自定义模型配置,字段包括模型类型、模型名称、API Key 和 API Base URL;当前仓库说明还列出了 LLM、Rerank、Text Embedding、语音转文字和文字转语音等模型类型,但某个网关是否真的支持这些类型,必须分别测试,不能因为插件提供字段就直接推断 AnyRouter 全部支持。查看 Dify 官方兼容插件说明
- 登录 Dify,进入插件或模型供应商管理页面。
- 搜索并安装名称类似
OpenAI-API-compatible的官方兼容模型插件。插件版本和界面名称可能随 Dify 版本变化,以当前界面为准。 - 新建一个 LLM 模型,模型名称填写前面 curl 返回的完整
id。 - API Key 填入你的 Key;API Base URL 填基础地址,不要附加
/chat/completions。 - Completion Mode 先选 Chat Completions。Dify 官方兼容插件的配置文件同时提供 Chat Completions 和 Responses 选项,但是否可用取决于目标接口和模型,不应默认互换。查看官方字段定义
- 上下文长度和最大输出 Token 先使用服务端与模型目录能够确认的值;没有核实的数据不要随意填写很大的数字。
- 保存并执行连接测试。连接测试成功只说明凭证和基础调用可用,不等于视觉、工具调用、结构化输出或知识库能力都可用。
Dify 官方插件的模型字段名称是“Model Name”,API 地址字段是“API Base URL”;插件仓库还提供了兼容模式、Token 参数名、函数调用和流式用量等选项。若服务端拒绝额外参数,优先使用严格兼容模式,并逐项关闭未经确认的扩展能力。核对当前插件字段和默认值
Dify 字段怎么填:按调用场景区分
| Dify 配置项 | 聊天模型建议 | 知识库或高级能力注意事项 |
|---|---|---|
| Type | LLM | Embedding、Rerank 要单独添加对应模型,不要把聊天模型直接当向量模型 |
| Model Name | 填写接口返回的完整模型 ID | 显示名称可以自定义,但请求使用的 ID不能随意改写 |
| API Key | 填写服务端 Key | 不要提交到浏览器前端、公开仓库或工作流输出 |
| API Base URL | 填写基础 URL,通常以 /v1 结尾 | 若插件会自动补版本路径,需防止出现 /v1/v1 |
| API Type | 先选 Chat Completions | Responses 只有在服务端和当前插件都明确支持时再测试 |
| Function Calling | 默认先关闭或选择不支持 | Agent 和工具调用要单独用真实工具请求验证 |
| Vision | 只有模型目录和接口都明确支持时开启 | 纯文本成功不代表图片输入可用 |
知识库场景至少需要聊天模型和 Embedding 模型。聊天模型测试成功但知识库失败,常见原因不是聊天配置本身,而是没有添加可用的 Text Embedding 模型、Embedding 端点路径不同,或者服务端不提供该模型类型。Dify 官方兼容插件明确把 LLM、Rerank 和 Text Embedding 作为不同模型类型处理,因此应分别验证。查看支持的模型类型字段
用最小工作流验证 Dify,而不是直接测试完整 Agent
- 新建一个 Chatflow 或 Workflow,只放一个开始节点、一个 LLM 节点和一个结束节点。
- 在 LLM 节点选择刚刚添加的模型,输入固定文本,例如“请只输出连接成功”。
- 先关闭知识库、工具调用、图片输入、结构化输出和复杂变量。
- 执行一次非流式或最简单的流式请求,确认能返回文本。
- 再逐项打开流式输出、工具调用、图片输入或知识库,每次只增加一个变量。
这样可以把问题分成“Dify 到接口的基础调用失败”和“某项高级能力不兼容”。Dify 官方插件仓库说明该兼容插件支持流式、视觉、工具调用等相关配置,但配置项存在不代表每个模型或网关都支持,实际能力必须以请求响应为准。查看插件能力说明
商业推荐:如果你需要把多个 OpenAI 兼容模型统一接入 Dify,可在完成接口核验后,再根据自己的模型、额度和安全要求评估犀速-AI的兼容 API 接入方案。
常见报错:按现象分流排查
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
| 401 Unauthorized | Key 是否复制完整、Bearer 是否由 Dify 自动添加、Key 是否已失效 | 用同一个 Key 重跑 curl;不要在 Key 前再手写 Bearer,除非字段明确要求完整授权头 |
| 400 参数错误 | 模型是否支持当前参数、是否发送了不兼容的 user、tools 或 stream_options | 切换严格兼容模式,关闭工具调用和扩展参数后重试 |
| 404 Not Found | Base URL 是否包含完整接口路径,是否出现 /v1/v1 | 回到 curl 检查最终请求 URL;Dify 中只填插件要求的 Base URL |
| 模型不存在 | 模型 ID 是否为接口返回的完整字符串,Key 是否有该模型权限 | 重新请求 /models 或从当前模型目录复制 ID |
| 429 Too Many Requests | 服务端限速、并发或账户额度 | 降低并发和请求频率,查看响应头或控制台用量;不要把 429 自动解释为 Dify 配置错误 |
| 超时或流式中断 | 网络链路、模型响应时间、SSE 解析和 Dify 超时设置 | 先关闭流式做一次短文本非流式测试,再逐步恢复流式和长上下文 |
| 聊天成功、知识库失败 | Embedding 或 Rerank 是否单独配置 | 分别验证对应模型类型和端点,不要复用聊天模型 |
| Agent 工具调用失败 | 模型是否支持函数调用,插件是否启用对应选项 | 先用普通 LLM 节点验证,再用单个工具测试;能力未核实就保持关闭 |
Dify 官方插件字段中明确提供了 API 类型、Token 参数名、用户标识支持、流式用量和函数调用等选项;这些字段反映的是插件适配能力,不是 AnyRouter 对每个模型的保证。遇到报错时,应以 Dify 请求日志和接口原始响应为准。查看相关兼容选项
Dify 云服务、自托管版和插件版本的差异
Dify 云服务与自托管版的菜单位置、插件安装权限、插件版本和网络出口可能不同。云服务通常由平台管理运行环境;自托管版还要检查容器是否能访问接口、环境变量是否覆盖配置、插件运行器是否正常。不要只根据别人截图判断字段一定存在。
截至 2026 年 11 月 4 日,Dify 官方插件仓库仍在持续维护,仓库中的兼容插件清单和字段定义可能继续变化。安装前记录 Dify 版本、插件版本、模型 ID、Base URL 和测试响应;升级后若出现新错误,先对照当前仓库的 manifest 与 provider 配置,不要把旧教程中的字段当成永久规则。查看插件清单版本
如果你的目标只是让一个 LLM 节点返回文本,建议保持配置最小化;如果目标是知识库、Agent、视觉或结构化输出,则应把每项能力视为独立测试任务。AnyRouter 当前公开模型页展示了模型、访问方式和部分能力信息,但页面信息会变化,具体可用性仍以当前账号接口响应为准。查看当前公开模型目录
常见问题
Dify 接入时 Base URL 要不要填写 /chat/completions?
通常不要。Dify 的 API Base URL 应填写基础地址,接口路径由插件拼接。AnyRouter 公开聊天示例使用带 /api/v1 的基础路径,因此可先核对当前控制台是否要求 https://anyrouter.cfd/api/v1;如果出现 404,重点检查是否把完整接口路径填入,或是否生成了 /v1/v1。
模型名称应该填写什么?
填写接口返回的完整模型 ID,而不是模型列表中的中文名称、品牌名称或自定义显示名称。可以先请求 /models;如果该路径不可用,就从当前模型目录复制 ID,再用最小 chat completion 请求验证。
Dify 的 Chat Completions 和 Responses 可以互换吗?
不能默认互换。Dify 官方兼容插件提供两种 API Type,但具体服务和模型可能只实现其中一种。先用 Chat Completions 完成普通文本测试,只有服务端明确提供 Responses 且插件版本支持时再切换。
聊天模型能直接用于 Dify 知识库吗?
不能直接这样推断。知识库通常需要单独的 Text Embedding 模型,部分场景还需要 Rerank 模型。聊天成功只能证明 LLM 调用可用,Embedding 和 Rerank 要分别添加、分别测试。
为什么 curl 成功,Dify 仍然提示 400?
常见原因是 Dify 发送了 curl 没有发送的参数,例如 tools、user、stream_options、视觉内容或不同的 Token 参数。先切换严格兼容模式、关闭工具和扩展选项,用短文本 LLM 节点重试,再逐项恢复能力。
Dify 中出现 401 或 404,先查什么?
401 先查 Key 是否有效、字段是否填错以及是否重复添加 Bearer;404 先查 Base URL、接口路径和 /v1 是否重复。用同一个 Key 和同一个模型 ID运行 curl,可以先判断问题来自接口本身还是 Dify 配置。