Dify 是一个开源的 LLM 应用开发平台,它将 Prompt 工程、RAG 检索增强生成、Agent 智能体、工作流编排、模型管理等能力整合到一个可视化界面中,让开发者和非技术人员都能快速构建生产级 AI 应用。
Dify 的名字来源于 "Define + Modify",旨在让 AI 应用的定义和迭代变得简单。项目由 LangGenius 团队维护,在 GitHub 上拥有超过 90,000 Stars,是目前最热门的开源 AI 应用开发框架之一。
| 项目信息 | 详情 |
|---|---|
| 开发团队 | LangGenius(原 Dify.AI) |
| GitHub Stars | 90,000+ |
| 官方网站 | dify.ai |
| 开源协议 | Apache License 2.0 |
| 技术栈 | Python(后端)/ TypeScript + React(前端) |
| 支持模型 | OpenAI / Anthropic / Azure / 通义 / 文心 / Ollama / 100+ 模型 |
| 部署方式 | Docker Compose / 源码 / Dify Cloud |
| 对比维度 | Dify | LangChain | Flowise | FastGPT | Coze |
|---|---|---|---|---|---|
| 开源 | Apache 2.0 | MIT | Apache 2.0 | Apache 2.0 | 闭源 SaaS |
| 可视化 | 完整 GUI | 纯代码(需 LangSmith) | 拖拽式 GUI | 完整 GUI | 完整 GUI |
| RAG 能力 | 内置完整 RAG 流水线 | 需手动编排 | 基础支持 | 内置 RAG | 基础知识库 |
| 工作流 | 可视化工作流引擎 | LCEL 链式编排 | 拖拽工作流 | 简单工作流 | 可视化工作流 |
| Agent 智能体 | Function Call / ReAct | 最灵活的 Agent 框架 | 基础 Agent | 有限支持 | 内置 Agent |
| 模型支持 | 100+ 模型统一接入 | 极广 | 通过 LangChain | 主流模型 | 字节系模型为主 |
| 自托管 | Docker 一键部署 | 自行部署 | Docker 部署 | Docker 部署 | 仅 SaaS |
| 学习曲线 | 低(可视化) | 高(需编程能力) | 低 | 低 | 低 |
| 适用场景 | 全场景 AI 应用开发 | 高度定制化 AI 应用 | 快速原型 | 知识库问答 | 轻量 Bot 开发 |
# 克隆 Dify 源码 git clone https://github.com/langgenius/dify.git cd dify/docker # 复制环境变量文件 cp .env.example .env # 启动所有服务 docker compose up -d启动后访问
http://localhost/install 完成初始化设置(创建管理员账号)。
SECRET_KEY 和数据库密码,配置 HTTPS 反向代理(Nginx/Caddy),建议使用外部 PostgreSQL 和 Redis。# 后端(Python) cd api cp .env.example .env pip install -r requirements.txt flask db upgrade flask run --host 0.0.0.0 --port 5001 # 前端(React) cd web cp .env.example .env.local npm install npm run build npm run start依赖要求:
{{变量名}} 语法动态插入用户输入或上下文信息
Dify 的工作流引擎是其核心差异化能力之一,通过可视化拖拽方式编排复杂的 AI 处理流程。以下是 10 个典型工作流场景:
# Webhook 调用示例
curl -X POST https://dify.yourdomain.com/v1/workflows/run \
-H "Authorization: Bearer app-xxxxx" \
-H "Content-Type: application/json" \
-d '{"inputs": {"feedback": "产品体验很差..."}}'
# Cron 定时调用示例(每天早上 8 点执行)
0 8 * * * curl -X POST https://dify.example.com/v1/workflows/run \
-H "Authorization: Bearer app-xxxxx" \
-H "Content-Type: application/json" \
-d '{"inputs": {"date": "$(date +\%Y-\%m-\%d)"}}'
RAG(Retrieval-Augmented Generation)是 Dify 最核心的能力之一,允许 AI 基于你的私有数据回答问题,而不是只依赖模型的预训练知识。
| 模型 | 维度 | 多语言 | 适用场景 |
|---|---|---|---|
| text-embedding-3-large | 3072 | 优秀 | 通用场景(推荐) |
| text-embedding-3-small | 1536 | 良好 | 控制成本 |
| bge-large-zh-v1.5 | 1024 | 中文优秀 | 中文为主场景 |
| m3e-base | 768 | 中文良好 | 本地部署免费 |
| nomic-embed-text | 768 | 英文为主 | Ollama 本地部署 |
# 发送消息(流式响应)
curl -X POST 'https://api.dify.ai/v1/chat-messages' \
-H 'Authorization: Bearer app-xxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"inputs": {},
"query": "如何部署 Dify?",
"response_mode": "streaming",
"conversation_id": "",
"user": "user-123"
}'
Completion 类应用 API:
# 文本生成
curl -X POST 'https://api.dify.ai/v1/completion-messages' \
-H 'Authorization: Bearer app-xxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"inputs": {"topic": "AI 应用开发趋势"},
"response_mode": "blocking",
"user": "user-123"
}'
Workflow API:
# 执行工作流
curl -X POST 'https://api.dify.ai/v1/workflows/run' \
-H 'Authorization: Bearer app-xxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"inputs": {"data": "要处理的内容"},
"response_mode": "streaming",
"user": "user-123"
}'
<iframe src="https://udify.app/chatbot/xxxxxxxx" style="width: 100%; height: 100%; min-height: 700px" frameborder="0" allow="microphone"> </iframe>JS Widget 嵌入(聊天气泡):
<script>
window.difyChatbotConfig = {
token: 'xxxxxxxx',
baseUrl: 'https://api.dify.ai'
}
</script>
<script
src="https://udify.app/embed.min.js"
id="xxxxxxxx"
defer>
</script>
pip install dify-client
npm install dify-client
sudo lsof -i :80 或 sudo netstat -tlnp | grep :80
docker-compose.yaml 中 nginx 服务的端口映射:
# 将 80:80 改为其他端口 ports: - "8080:80"
docker compose 而非 docker-compose):
docker compose version(需要 v2.0+)
sudo apt-get update sudo apt-get install docker-compose-plugin
docker compose ps(状态应该都是 running)
docker compose logs api
docker compose logs web
.env 文件已正确复制(cp .env.example .env)
docker compose ps db
docker compose restart api
.env 中数据库配置是否与 docker-compose.yaml 一致
docker compose down -v && docker compose up -d(注意 -v 会删除数据)
docker compose ps redis
.env 中 REDIS_HOST=redis(Docker 网络中用服务名)
docker compose logs redis
df -h
.env 中设置 VECTOR_STORE=qdrant)
docker compose down weaviate && docker volume rm docker_weaviate_data && docker compose up -d
docker system prune -a
docker image prune -a
du -sh /var/lib/docker/
docker stats
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
/etc/docker/daemon.json:
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}
sudo systemctl restart docker
docker compose down,然后备份 volumes 目录和 .env 文件
git pull origin main
.env.example 是否有新增配置项
docker compose up -d(会自动执行数据库迁移)
docker compose down -v 升级,-v 参数会删除所有数据卷!sk- 开头,复制时没有多余空格
.env 中设置 HTTP_PROXY 和 HTTPS_PROXY
http://host.docker.internal:11434(Docker Desktop)
http://192.168.x.x:11434
OLLAMA_HOST=0.0.0.0
--network host 或在 docker-compose 中配置网络
https://你的资源名.openai.azure.com/
2024-02-01
qwen-max、qwen-plus)
sk-ant- 开头
nvidia-smi(应显示 GPU 型号和显存)
ollama pull llama3:8b-q4_0
--gpu-memory-utilization 0.9 最大化显存利用
https://api.deepseek.com/v1
deepseek-chat 或 deepseek-reasoner
.env 中修改 UPLOAD_FILE_SIZE_LIMIT
client_max_body_size 配置是否足够大
# nginx.conf client_max_body_size 50m;
marker、pdf2text、unstructured 等
docker compose ps weaviate(或 qdrant、milvus)
.env 中 VECTOR_STORE 配置和对应的连接参数正确
docker compose logs weaviate
docker compose restart weaviate
docker compose ps worker
docker compose logs worker
docker compose restart worker
compact 操作
VECTOR_STORE=pgvector 并配置 pgvector 扩展
response_mode: streaming)
.env 中调整 WORKFLOW_MAX_EXECUTION_TIME 参数
{{#node_id.output_key#}}
json、math、datetime、re 等标准库
requests、pandas 等第三方库(使用 HTTP 请求节点替代 requests)
docker-compose.yaml 中配置允许的依赖
host.docker.internal
contains 而不是 equals
app- 开头),不是模型的 API Key
Authorization: Bearer app-xxxxxxxx
proxy_buffering off; proxy_cache off; proxy_set_header X-Accel-Buffering no;
response_mode 设置为 "streaming"
conversation_id:首次调用返回的 conversation_id 需要在后续请求中传入
.env 中配置 WEB_API_CORS_ALLOW_ORIGINS=*(或指定你的域名)
add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; add_header Access-Control-Allow-Headers "Authorization, Content-Type";
# 上传文件示例 curl -X POST 'https://api.dify.ai/v1/files/upload' \ -H 'Authorization: Bearer app-xxxxx' \ -F 'file=@/path/to/document.pdf' \ -F 'user=user-123'
.env 中设置 SERVER_WORKER_AMOUNT=4(根据 CPU 核数调整)
docker compose scale worker=3 扩展
worker_connections 和连接超时设置
operationId 和 description
description 字段非常重要,Agent 根据描述决定何时调用
server {
listen 443 ssl;
server_name dify.yourdomain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_buffering off;
}
}
.env 中所有 URL 为 https:// 开头
# 备份 docker compose exec db pg_dump -U postgres dify > dify_backup.sql # 恢复 docker compose exec -T db psql -U postgres dify < dify_backup.sql
docker_weaviate_data 等)
volumes/app/storage 目录
docker compose logs -f api 实时查看 API 日志
.env 中配置 LangFuse,获得详细的 LLM 调用链追踪
# .env LangFuse 配置 LANGFUSE_PUBLIC_KEY=pk-xxxxx LANGFUSE_SECRET_KEY=sk-xxxxx LANGFUSE_HOST=https://cloud.langfuse.com