把 Dify 接上聚合 API 端点:配置过程和三个实际用法
背景
Dify 本身不带模型,靠接入外部 API 跑起来。官方支持 OpenAI、Anthropic、Google 这些主流 Provider,填 Key 就能用,入门很方便。
但实际用下来有几个麻烦:国内直连这些端点基本不稳定;项目里同时用几个模型的话,要管好几套 Key、好几套配额;每次想换个模型测测效果,得去对应 Provider 的控制台折腾一圈。
后来了解到 Dify 的 OpenAI-API-compatible 通道可以接任何兼容 OpenAI 协议的端点,不限于官方 Provider。这就意味着可以用一个聚合端点把多家模型收进来,Dify 里只配一次,Key 也只管一个。本文记录用 ai.tikhub.io 做这件事的完整过程,其他兼容端点配法一样。
第一步:先确认端点能通
在 Dify 里配之前,先单独测一下端点,这步省不了——出问题的时候不知道是端点的问题还是 Dify 配置的问题,排查很费时间。
curl https://ai.tikhub.io/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "ping"}]
}'
返回正常的 JSON 响应就可以继续。如果报 401,检查 Key;报 404,检查 URL 末尾有没有多余的 /。
第二步:在 Dify 里配置模型
Dify 通过 OpenAI-API-compatible 通道接入任何兼容 OpenAI 协议的端点。
路径:设置 → 模型供应商 → 找到「OpenAI-API-compatible」→ 添加模型
每个模型单独添加一条记录,字段填法如下:
| 字段 | 填写内容 |
|---|---|
| 模型名称 | gpt-4o(或其他模型 ID,直接用官方名) |
| API Key | 你的 TikHub API Key |
| API endpoint URL | https://ai.tikhub.io/v1 |
| 模型类型 | LLM |
| 上下文长度 | 按模型填,GPT-4o 填 128000,Claude Sonnet 填 200000 |
几个常用模型的配置参考:
gpt-4o 上下文 128000 适合通用任务
gpt-4o-mini 上下文 128000 适合高频低成本任务
claude-sonnet-4-20250514 上下文 200000 适合代码、长文
gemini-2.5-pro 上下文 1000000 适合超长文档
上下文长度如果不填或者填小了,Dify 在构造 prompt 时会过早截断历史消息,长对话容易出问题。建议每个模型都按实际值填。
填完之后点「测试」,能收到响应就配置成功了。
第三步:设置默认模型
配好之后在 设置 → 模型供应商 → 系统模型设置 里指定默认模型。
建议按用途分开设置:
- 推理模型:
gpt-4o或claude-sonnet-4-20250514 - Embedding 模型:
text-embedding-3-small(同样走 OpenAI-API-compatible 通道添加,模型类型选 Text Embedding) - 重排模型:可选,RAG 场景下开启能提升检索质量
Embedding 模型容易漏配——如果你要用知识库功能,这个必须单独加,不加的话知识库索引会报错。
三个实际用法
用法一:搭一个多模型对比的 Chatflow
调试提示词的时候经常需要对比不同模型的输出。在 Dify 的 Chatflow 里可以并行跑多个 LLM 节点,最后汇总结果:
[用户输入]
↓
[并行分支]
├── LLM 节点 A(模型:gpt-4o)
├── LLM 节点 B(模型:claude-sonnet-4-20250514)
└── LLM 节点 C(模型:gemini-2.5-pro)
↓
[模板合并节点]
↓
[输出对比结果]
合并节点里用模板把三个输出拼在一起:
## GPT-4o
{{node_a.output}}
## Claude Sonnet
{{node_b.output}}
## Gemini 2.5 Pro
{{node_c.output}}
这个用法在迭代系统提示词时很实用,不用来回切模型手动对比。
用法二:RAG 知识库问答
RAG 场景需要两个模型配合:Embedding 模型负责向量化,LLM 负责生成回答。
先通过 API 测试 Embedding 接口:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["YOUR_API_KEY"],
base_url="https://ai.tikhub.io/v1"
)
resp = client.embeddings.create(
model="text-embedding-3-small",
input="测试文本"
)
print(f"向量维度:{len(resp.data[0].embedding)}") # 应该输出 1536
确认 Embedding 接口正常后,在 Dify 知识库里:
- 新建知识库,上传文档
- 索引方式选「高质量」,Embedding 模型选刚才配好的
text-embedding-3-small - 在 Chatflow 里添加「知识检索」节点,连接到 LLM 节点
知识检索节点的 prompt 模板参考:
根据以下参考资料回答用户问题。如果参考资料中没有相关信息,直接说不知道,不要编造。
参考资料:
{{context}}
用户问题:{{query}}
用法三:通过 Dify API 在外部程序里调用工作流
Dify 发布应用后会提供一个 API,可以在外部程序里直接调用,适合把 Dify 搭的工作流集成到自己的项目里。
# call_dify_workflow.py
import os
import requests
DIFY_API_KEY = os.environ["DIFY_APP_API_KEY"] # 从 Dify 应用的 API 页面获取
DIFY_BASE_URL = "https://api.dify.ai/v1" # 自部署的话换成自己的地址
def run_workflow(inputs: dict, user_id: str = "user-001") -> str:
"""调用 Dify 工作流并返回结果"""
resp = requests.post(
f"{DIFY_BASE_URL}/workflows/run",
headers={
"Authorization": f"Bearer {DIFY_API_KEY}",
"Content-Type": "application/json"
},
json={
"inputs": inputs,
"response_mode": "blocking",
"user": user_id
}
)
resp.raise_for_status()
data = resp.json()
return data["data"]["outputs"]
def chat_with_app(query: str, conversation_id: str = "") -> dict:
"""调用 Dify 聊天应用"""
resp = requests.post(
f"{DIFY_BASE_URL}/chat-messages",
headers={
"Authorization": f"Bearer {DIFY_API_KEY}",
"Content-Type": "application/json"
},
json={
"query": query,
"conversation_id": conversation_id, # 传入可续接上下文
"response_mode": "blocking",
"user": "user-001"
}
)
resp.raise_for_status()
data = resp.json()
return {
"answer": data["answer"],
"conversation_id": data["conversation_id"] # 保存下来下次继续对话
}
if __name__ == "__main__":
# 调用工作流示例
result = run_workflow({"article": "你的文章内容..."})
print(result)
# 调用聊天应用示例(多轮对话)
r1 = chat_with_app("用 Python 写一个快排")
print(r1["answer"])
r2 = chat_with_app("刚才的代码加上单元测试", r1["conversation_id"])
print(r2["answer"])
conversation_id 传入上次返回的值就能续接上下文,不传则开启新对话。
注意事项
API endpoint URL 末尾不要加 /:正确是 https://ai.tikhub.io/v1,加了斜杠部分版本的 Dify 会拼接出错误的请求路径。
Embedding 模型要单独配:用知识库功能必须在 OpenAI-API-compatible 通道里单独添加一条 Text Embedding 类型的记录,不配的话知识库建索引会直接报错,这个坑很多人第一次上手都踩。
上下文长度填实际值:尤其是 Claude 和 Gemini 这类大上下文窗口的模型,如果填了默认的 4096,长文档的 RAG 效果会很差。
模型名称用官方 ID:直接填 gpt-4o、claude-sonnet-4-20250514 这种官方格式,中转层自己处理路由,不需要加前缀。
整体来说 Dify 接自定义端点的配置量不大,主要就是 OpenAI-API-compatible 通道,把需要的模型逐个加进去。配好之后在 Dify 里切换模型和在代码里改一个参数一样简单。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)