为什么选择Dify
Dify是2025-2026年增长最快的开源LLM应用开发平台,GitHub Star数突破12万。它将Prompt Engineering、RAG检索增强、Agent工具编排和可视化工作流整合为统一平台,让团队无需从零编写代码即可构建生产级AI应用。相比LangChain自建方案,Dify的可视化工作流构建器将开发周期从数周缩短到数小时;相比闭源的GPTs和Coze,Dify支持私有化部署和完全的数据自主权。
环境准备与Docker Compose部署
Dify官方推荐使用Docker Compose一键部署。以下是经过生产验证的配置:
# docker-compose.yml
version: '3.8'
services:
api:
image: langgenius/dify-api:0.15.3
restart: always
environment:
- MODE=api
- LOG_LEVEL=INFO
- SECRET_KEY=${SECRET_KEY:-sk-your-random-secret-key-here}
- CONSOLE_WEB_URL=https://dify.yourdomain.com
- DB_USERNAME=postgres
- DB_PASSWORD=${DB_PASSWORD:-dify2026}
- DB_HOST=db
- DB_PORT=5432
- DB_DATABASE=dify
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=${REDIS_PASSWORD:-dify2026}
- STORAGE_TYPE=s3
- S3_ENDPOINT=https://s3.amazonaws.com
- S3_BUCKET_NAME=dify-files
- S3_ACCESS_KEY=${S3_ACCESS_KEY}
- S3_SECRET_KEY=${S3_SECRET_KEY}
- VECTOR_TYPE=qdrant
- QDRANT_URL=http://qdrant:6333
volumes:
- ./volumes/app/storage:/app/api/storage
depends_on:
- db
- redis
- qdrant
worker:
image: langgenius/dify-api:0.15.3
restart: always
environment:
- MODE=worker
- LOG_LEVEL=INFO
- SECRET_KEY=${SECRET_KEY:-sk-your-random-secret-key-here}
- DB_USERNAME=postgres
- DB_PASSWORD=${DB_PASSWORD:-dify2026}
- DB_HOST=db
- DB_PORT=5432
- DB_DATABASE=dify
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=${REDIS_PASSWORD:-dify2026}
- VECTOR_TYPE=qdrant
- QDRANT_URL=http://qdrant:6333
depends_on:
- db
- redis
web:
image: langgenius/dify-web:0.15.3
restart: always
environment:
- CONSOLE_API_URL=https://dify-api.yourdomain.com
- APP_API_URL=https://dify-api.yourdomain.com
db:
image: postgres:16-alpine
restart: always
environment:
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DB_PASSWORD:-dify2026}
POSTGRES_DB: dify
volumes:
- ./volumes/db/data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
restart: always
command: redis-server --requirepass ${REDIS_PASSWORD:-dify2026}
volumes:
- ./volumes/redis/data:/data
qdrant:
image: qdrant/qdrant:v1.12.1
restart: always
volumes:
- ./volumes/qdrant/data:/qdrant/storage
ports:
- "6333:6333"
nginx:
image: nginx:alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certs:/etc/nginx/certs
depends_on:
- api
- web
启动命令:
# 生成随机密钥
export SECRET_KEY=$(openssl rand -base64 42)
export DB_PASSWORD=$(openssl rand -base64 24)
# 启动全部服务
docker compose up -d
# 检查服务状态
docker compose ps
# 查看API日志
docker compose logs -f api --tail=100
部署完成后访问 https://dify.yourdomain.com,首次访问会引导创建管理员账号。
多模型供应商接入
Dify支持数十种模型供应商,通过「设置 → 模型供应商」页面配置:
# 通过API配置模型供应商(以OpenAI Compatible为例)
import requests
API_BASE = "https://dify-api.yourdomain.com/v1"
# 获取当前模型列表
headers = {"Authorization": "Bearer {admin_api_key}"}
models = requests.get(f"{API_BASE}/workspaces/current/models/model-types/llm",
headers=headers)
print(models.json())
推荐的多模型配置策略:
- 主力模型:GPT-4o / Claude 3.5 Sonnet 用于复杂推理
- 轻量模型:Qwen2.5-7B / DeepSeek-V3 用于简单对话和分类
- Embedding模型:text-embedding-3-small / BGE-M3 用于知识库向量化
- Reranker模型:BGE-Reranker-v2 用于检索结果重排序
知识库与RAG配置
Dify内置了完整的RAG管道。创建知识库时的关键配置:
- 分段策略:选择「自动分段」或「自定义分段」,推荐chunk size 500-800 tokens,overlap 50-100 tokens
- 索引方式:经济模式用关键词索引,高质量模式用高质量索引(需配置Embedding模型)
- 检索模式:混合检索(向量+关键词)效果最佳,配合Reranker可将召回精度提升15-20%
在应用中引用知识库时,可以调整检索参数:
{
"knowledge_retrieval": {
"query_variable": "user_input",
"dataset_ids": ["ds-xxxx-xxxx"],
"retrieval_mode": "hybrid_search",
"top_k": 5,
"score_threshold_enabled": true,
"score_threshold": 0.5,
"reranking_model": {
"provider": "bge",
"model": "bge-reranker-v2-m3"
},
"reranking_enable": true
}
}
Agent工作流实战
Dify的工作流编排是最强大的功能之一。以「智能客服+工单系统」为例:
- 开始节点:接收用户输入
{{user_input}} - 知识库检索:先在产品文档知识库中搜索
- 条件分支:判断检索结果置信度
- 高置信度 → 直接LLM生成回答
- 低置信度 → 调用Agent工具(查询CRM系统、搜索内部Wiki)
- LLM节点:整合所有信息生成回答
- 工具调用:如果用户需要创建工单,调用HTTP请求节点写入Jira
# 通过API调用已发布的Dify应用
import requests
def chat_with_dify(query: str, conversation_id: str = ""):
response = requests.post(
"https://dify-api.yourdomain.com/v1/chat-messages",
headers={
"Authorization": "Bearer app-your-app-api-key",
"Content-Type": "application/json"
},
json={
"inputs": {},
"query": query,
"response_mode": "streaming",
"conversation_id": conversation_id,
"user": "user-001"
},
stream=True
)
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('data: '):
import json
event = json.loads(line[6:])
if event.get('event') == 'agent_thought':
print(f"[思考] {event.get('thought', '')}")
elif event.get('event') == 'message':
print(event.get('answer', ''), end='', flush=True)
# 使用示例
chat_with_dify("我们的退货政策是什么?超过30天还能退吗?")
生产环境优化
关键优化措施:
- Nginx配置:启用gzip压缩,设置WebSocket支持SSE流式输出,配置SSL/TLS
- 数据库:PostgreSQL启用
pgvector扩展,配置连接池(pgbouncer) - 缓存:Redis设置合理的
maxmemory-policy为allkeys-lru - 监控:接入Prometheus + Grafana监控API延迟、Token消耗和错误率
- 备份:定时备份PostgreSQL数据和Qdrant向量数据
# 生产环境数据库备份脚本
#!/bin/bash
BACKUP_DIR="/data/backups/dify/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# PostgreSQL备份
docker exec dify-db-1 pg_dump -U postgres dify | gzip > $BACKUP_DIR/dify_db.sql.gz
# Qdrant向量数据备份
docker exec dify-qdrant-1 tar czf /tmp/qdrant_backup.tar.gz /qdrant/storage
docker cp dify-qdrant-1:/tmp/qdrant_backup.tar.gz $BACKUP_DIR/
# 保留最近30天备份
find /data/backups/dify/ -maxdepth 1 -mtime +30 -exec rm -rf {} \;
通过以上步骤,你已经拥有了一个生产就绪的企业级AI工作流平台。Dify的可视化编排能力极大降低了LLM应用的开发门槛,而完善的API和多模型支持则保证了平台的灵活性和可扩展性。