Dify开源项目详解:LLM应用开发平台部署教程与RAG工作流实战指南
一、项目概述
Dify 是一款开源的 LLM 应用开发平台,集成了 Backend-as-a-Service 和 LLMOps 理念,覆盖了构建生成式 AI 原生应用所需的核心技术栈,包括内置的 RAG 引擎。通过 Dify,用户可以基于任何 LLM(包括商业模型 GPT、Claude,以及开源模型 Llama、Qwen 等)自托管类似 Assistants API 和 GPTs 的能力。
项目已支持超过 100,000 个基于 Dify 构建的应用,在 GitHub 上获得 87K+ Stars,是当前最受欢迎的 AI 应用开发平台之一。Dify 的核心理念是降低 AI 应用开发门槛,让开发者无需关注 LangChain 等底层库的复杂实现,通过可视化的方式快速构建和迭代 AI 应用。
- GitHub 地址:https://github.com/langgenius/dify
- 官方网站:https://dify.ai
- 开源协议:Apache 2.0 + 额外限制(见 LICENSE)
- 开发语言:TypeScript(前端)+ Python(后端)
- 核心定位:开源 LLM 应用开发平台,支持 RAG、Agent、工作流编排
1.1 核心特性
| 特性 | 说明 |
|---|---|
| 模型支持 | 支持 OpenAI GPT、Claude、Llama、Qwen 等主流商业和开源模型 |
| Prompt IDE | 可视化 Prompt 编排,团队协作 |
| RAG 引擎 | 支持 PDF、TXT 等文档上传,向量检索 |
| Agent | 基于 Function Calling 的 Agent 框架,支持 Google 搜索等插件 |
| 工作流 | 可视化编排 AI 工作流 |
| 日志分析 | 监控和分析应用日志,持续优化 |
| API 部署 | 一键将应用部署为 API 服务 |
1.2 与同类产品对比
| 特性 | Dify | Assistants API | LangChain |
|---|---|---|---|
| 编程方式 | API 导向 | API 导向 | Python 代码导向 |
| 生态系统 | 开源 | 闭源商业 | 开源 |
| RAG 引擎 | 内置支持 | 支持 | 不支持 |
| Prompt IDE | 内置可视化 | 内置 | 无 |
| LLM 支持 | 丰富多样 | 仅 GPT | 丰富多样 |
| 本地部署 | 支持 | 不支持 | 不适用 |
二、系统要求
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 4 核+ |
| 内存 | 4 GB | 8 GB+ |
| 磁盘 | 20 GB | 50 GB+ |
| Docker | 20.10+ | 最新版本 |
| Docker Compose | 2.0+ | 最新版本 |
三、快速部署:Docker Compose
3.1 一键部署
# 克隆仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker
# 启动所有服务
docker compose up -d
3.2 访问 Dify
启动后,访问 http://localhost(或服务器 IP)进入初始化页面。
首次访问时需要:
- 设置管理员账户和密码
- 完成初始化
3.3 Docker Compose 配置文件说明
# docker-compose.yaml 核心服务
services:
# 前端服务
frontend:
image: langgenius/dify-web:latest
ports:
- "3000:3000"
# 后端 API 服务
api:
image: langgenius/dify-api:latest
environment:
- SECRET_KEY=your-secret-key
- INIT_PASSWORD=your-init-password
ports:
- "5001:5001"
# Worker 服务(处理异步任务)
worker:
image: langgenius/dify-api:latest
# 向量数据库(Weaviate)
weaviate:
image: semitechnologies/weaviate:latest
# 知识库数据库(PostgreSQL + pgvector)
db:
image: postgres:15-alpine
# Redis 缓存
redis:
image: redis:7-alpine
四、基础配置
4.1 配置 API 密钥
- 进入 设置 → 模型供应商
- 选择要使用的模型(如 OpenAI)
- 填入 API Key
4.2 环境变量配置
# .env 配置文件示例
SECRET_KEY=your-secret-key-here
INIT_PASSWORD=admin123456
# OpenAI 配置
OPENAI_API_KEY=sk-xxxxx
# 数据库配置
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=dify
# Redis 配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# 向量数据库
WEAVIATE_ENDPOINT=http://localhost:8080
WEAVIATE_API_KEY=
4.3 HTTPS 配置
使用 Nginx 反向代理:
server {
listen 443 ssl;
server_name dify.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
五、创建第一个应用
5.1 创建应用
-
点击 创建应用
-
选择应用类型:
- 聊天助手:对话式应用
- 文本生成应用:文本补全、翻译等
- Agent:可执行工具调用的智能代理
- 工作流:可视化编排的自动化流程
-
填写应用名称和描述
-
点击创建
5.2 配置 Prompt
在 编排 页面:
# Role
你是一个专业的技术写作助手。
# Instructions
- 用简洁清晰的语言解释技术概念
- 使用适当的例子来帮助理解
- 保持回答结构化,使用列表和小标题
# Tone
专业、友好、易懂
5.3 添加知识库
- 进入 知识库 页面
- 点击 创建知识库
- 上传文档(支持 PDF、TXT、Markdown 等)
- 等待文档向量化完成
- 在应用中添加知识库检索节点
5.4 调试与发布
- 在右侧 调试 面板测试 Prompt
- 调整参数直到满意
- 点击 发布 将应用上线
六、RAG 引擎使用
6.1 什么是 RAG
RAG(检索增强生成)通过从外部知识库检索相关信息,结合大语言模型生成更准确、更具事实依据的回答。
6.2 创建知识库
# 上传文档到知识库
# 支持格式:PDF、TXT、Markdown、DOCX、HTML
6.3 配置检索设置
| 参数 | 说明 |
|---|---|
| 检索模式 | 向量检索 / 全文检索 / 混合检索 |
| Top K | 返回最相关的 K 个结果 |
| 相似度阈值 | 过滤低相似度结果 |
| Rerank | 启用重排序提升准确性 |
6.4 在应用中使用知识库
在 Prompt 中引用知识库:
你是一个客服助手。当用户询问产品问题时,
请从知识库中检索相关信息来回答。
# Context
{{context}}
七、Agent 功能
7.1 创建 Agent
- 创建应用时选择 Agent 类型
- 配置 Agent 的工具集
- 设置系统 Prompt
7.2 内置工具
| 工具 | 功能 |
|---|---|
| Google 搜索 | 联网搜索最新信息 |
| Wikipedia | 百科查询 |
| Web 抓取 | 获取网页内容 |
| 计算器 | 数学计算 |
| Dall-E | 图像生成 |
7.3 自定义工具
通过 MCP(Model Context Protocol)集成自定义工具:
{
"name": "my_tool",
"description": "我的自定义工具",
"url": "https://api.example.com/tool",
"method": "POST",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string"}
}
}
}
八、工作流编排
8.1 工作流节点类型
| 节点 | 说明 |
|---|---|
| LLM 节点 | 调用大语言模型 |
| 知识检索 | 从知识库检索内容 |
| 条件分支 | 根据条件分流 |
| 代码执行 | 执行 Python 代码 |
| HTTP 请求 | 发起 API 调用 |
| 模板渲染 | 模板字符串处理 |
| 变量赋值 | 修改变量值 |
8.2 工作流示例:自动摘要
[接收输入] → [提取关键信息] → [生成摘要] → [返回结果]
8.3 工作流 YAML 配置
nodes:
- id: start
type: custom
next: llm_node
- id: llm_node
type: llm
model: gpt-4
prompt: "请总结以下内容:{{input}}"
next: end
- id: end
type: finish
九、API 集成
9.1 获取 API 密钥
- 进入 设置 → API
- 点击 创建密钥
- 复制生成的 API Key
9.2 调用 Chat API
curl -X POST http://localhost:5001/v1/chat-messages \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {},
"query": "What is Dify?",
"response_mode": "blocking",
"conversation_id": ""
}'
9.3 Python SDK
from dify_client import Dify
client = Dify(api_key="your-api-key")
response = client.chat_message(
query="What is Dify?",
user="user-123"
)
print(response.content)
十、常见问题与解决方案
10.1 知识库检索不准确
解决方案:
- 调整 Top K 值,增加检索结果数量
- 启用混合检索模式
- 启用 Rerank 重排序
- 检查文档质量和分段是否合理
10.2 应用响应慢
解决方案:
- 使用更快的模型(如 GPT-4o 代替 GPT-4)
- 减少上下文长度
- 启用流式响应
- 检查服务器资源是否充足
10.3 Docker 容器启动失败
解决方案:
# 查看日志
docker compose logs -f
# 检查端口占用
netstat -tulpn | grep -E "3000|5001|5432|6379|8080"
# 重置数据库
docker compose down -v
docker compose up -d
10.4 模型调用失败
解决方案:
- 检查 API Key 是否正确
- 确认网络可以访问模型服务商
- 检查账户余额或配额
10.5 数据安全问题
解决方案:
- 所有数据默认存储在本地
- 配置 HTTPS 加密传输
- 定期备份数据库
- 使用强密码和 API 密钥
十一、生产环境部署
11.1 使用 Nginx + HTTPS
server {
listen 443 ssl http2;
server_name dify.yourdomain.com;
ssl_certificate /etc/ssl/certs/yourdomain.crt;
ssl_certificate_key /etc/ssl/private/yourdomain.key;
client_max_body_size 100M;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
11.2 使用负载均衡
upstream dify_backend {
server 127.0.0.1:5001;
server 127.0.0.1:5002;
keepalive 32;
}
server {
location /api {
proxy_pass http://dify_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
11.3 数据库备份
# 备份 PostgreSQL
pg_dump -U postgres -d dify > backup_$(date +%Y%m%d).sql
# 备份知识库文件
tar -czf knowledge_base_$(date +%Y%m%d).tar.gz ./knowledge
十二、社区与生态
| 资源 | 地址 |
|---|---|
| GitHub | https://github.com/langgenius/dify |
| 官网 | https://dify.ai |
| 文档 | https://docs.dify.ai |
| Discord | https://discord.gg/FngNHpbcY7 |
| https://twitter.com/dify_ai | |
| Docker Hub | https://hub.docker.com/u/langgenius |
总结
Dify 是一款极具创新性的开源 LLM 应用开发平台,它通过可视化的方式大幅降低了 AI 应用开发的门槛。无论是构建智能客服、知识库问答系统、AI 工作流自动化,还是开发复杂的 Agent 应用,Dify 都能提供一站式的解决方案。
它的核心优势在于:
- 模型中立:支持多种商业和开源模型,不被单一供应商绑定
- 开源透明:代码完全开放,可本地部署,数据安全可控
- 功能完整:内置 RAG、Agent、工作流等核心功能
- 易于使用:无需编写代码,通过可视化界面即可构建应用
- API 完善:一键将应用部署为 API,方便集成
对于希望快速构建 AI 应用、实现私有化部署的企业和个人开发者来说,Dify 是一个非常值得推荐的选择。
立即体验:执行
git clone https://github.com/langgenius/dify.git && cd dify/docker && docker compose up -d,然后访问http://localhost开始使用。