香港服务器部署Dify:可视化AI工作流编排平台 + 接入Ollama本地模型完整教程
搭建 AI 应用不再需要写大量代码——Dify 是目前最受欢迎的开源 AI 应用开发平台,通过可视化工作流编排,将 LLM、知识库、工具调用组合成完整的 AI 应用。在香港服务器上自托管 Dify,可以同时接入 Ollama 本地模型(无 API 费用)和 Claude/GPT-4(在线模型),打造完全私有的企业 AI 平台。
一、Dify 核心功能
- Chat 应用:多轮对话,支持知识库检索增强
- 工作流(Workflow):可视化节点编排,LLM + 条件判断 + HTTP 调用 + 代码执行
- RAG 知识库:上传 PDF/Word/网页,自动向量化,问答时检索相关段落
- Agent:工具调用(搜索、计算器、代码执行),自主完成复杂任务
- API 发布:一键将应用发布为 REST API,集成到现有系统
- 多模型支持:Ollama、OpenAI、Anthropic、Google、Azure 等 20+ 模型提供商
二、服务器要求
| 规模 | 配置 | 说明 |
|---|---|---|
| 个人/小团队(仅在线模型) | 2核4G | 不跑本地 LLM |
| 中等规模(本地模型 7B) | 8核16G | Dify + Ollama 共用 |
| 企业(本地模型 14B+) | GPU 服务器 | GPU 跑 Ollama,CPU 跑 Dify |
三、Docker Compose 部署 Dify
<code"># 克隆官方仓库 git clone https://github.com/langgenius/dify.git cd dify/docker # 复制环境变量模板 cp .env.example .env # 编辑关键配置 cat > .env << 'EOF' # 必须修改的配置 SECRET_KEY=sk-$(openssl rand -hex 32) # 生成随机密钥 # 数据库(使用内置 PostgreSQL 即可) DB_USERNAME=postgres DB_PASSWORD=dify_db_pass_2026 DB_HOST=db DB_PORT=5432 DB_DATABASE=dify # Redis REDIS_HOST=redis REDIS_PORT=6379 # 存储(本地文件系统,也可以换成 S3/R2) STORAGE_TYPE=local # 向量数据库(Weaviate 内置,也可以换成 Qdrant/Milvus) VECTOR_STORE=weaviate # 访问域名 CONSOLE_API_URL=https://dify.yourdomain.com CONSOLE_WEB_URL=https://dify.yourdomain.com SERVICE_API_URL=https://dify.yourdomain.com APP_WEB_URL=https://dify.yourdomain.com # Nginx 监听 EXPOSE_NGINX_PORT=80 EXPOSE_NGINX_SSL_PORT=443 EOF # 启动所有服务 docker compose up -d # 查看启动状态(约需 2~3 分钟完成初始化) docker compose ps docker compose logs -f api | grep -E "running|error"
四、Nginx 反向代理(外部 HTTPS 访问)
<code"># Dify 自带 Nginx,但建议用外部 Nginx 统一管理 SSL
# 修改 dify/docker/docker-compose.yaml 中的 nginx 服务,
# 改为只监听内网端口:
# ports:
# - "127.0.0.1:8080:80"
# /etc/nginx/sites-available/dify.yourdomain.com
server {
listen 443 ssl http2;
server_name dify.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/dify.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dify.yourdomain.com/privkey.pem;
client_max_body_size 100M; # 允许上传大文档
proxy_read_timeout 300s; # AI 处理可能需要较长时间
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# SSE(流式输出)
proxy_buffering off;
proxy_cache off;
proxy_http_version 1.1;
}
}五、接入 Ollama 本地模型
<code"># 前提:同一台服务器已安装 Ollama(参考第六阶段文章01) # 并已下载模型:ollama pull qwen2.5:7b # 在 Dify 管理后台配置 Ollama: # 设置 → 模型供应商 → 添加模型供应商 → Ollama # # 配置项: # - 模型名称:qwen2.5:7b # - 基础 URL:http://host.docker.internal:11434 # (如果 Dify 在 Docker 中,Ollama 在宿主机,使用 host.docker.internal) # (如果 Ollama 也在 Docker 同一网络,使用 ollama:11434) # - 上下文长度:32768(Qwen2.5 支持 32K) # - 最大 tokens:4096 # Docker Compose 中让 Dify 能访问宿主机 Ollama: # 在 docker-compose.yaml 中为 api 和 worker 服务添加: # extra_hosts: # - "host.docker.internal:host-gateway"
六、构建 RAG 知识库问答应用
<code"> 操作路径:知识库 → 创建知识库 → 上传文档 支持的文档格式: PDF / Word (.docx) / Markdown / TXT / Excel / CSV HTML(网页内容)/ Notion 导出 / 语雀导出 分块策略选择: - 自动分块:适合大多数场景 - 自定义分块:按标题/段落,适合结构化文档 - 父子分块:小段检索 + 大段上下文,答案质量最高 向量化模型选择: - 使用 Ollama:nomic-embed-text(免费,需提前下载) - 使用 OpenAI:text-embedding-3-small($0.02/1M tokens) 创建应用: 知识库 → 新建应用 → Chat 应用 → 添加知识库 配置系统提示词: "你是公司的智能助手,只根据提供的知识库内容回答问题。 如果知识库中没有相关信息,请如实说明,不要编造。"
七、构建 AI 工作流(客服自动回复示例)
<code">
工作流节点编排(可视化拖拽):
[开始] → 接收用户问题
│
▼
[知识库检索] → 从FAQ知识库检索相关内容
│
▼
[条件判断] → 检索相关度是否 > 0.7?
│
是↓ 否↓
[LLM节点] [LLM节点]
根据检索内容生成答案 告知用户转人工客服
│ │
└──────────┬──────────┘
▼
[回复用户]
│
▼
[HTTP请求节点]
将对话记录写入 CRM 系统
八、发布为 API 并集成到业务系统
<code">import requests
# Dify 应用 API Key(在应用 → API → 创建 API 密钥)
API_KEY = "app-xxxxxxxxxxxxxxxx"
DIFY_API = "https://dify.yourdomain.com/v1"
def ask_knowledge_base(question: str, user_id: str = "user-001") -> str:
"""调用 Dify 知识库问答 API"""
response = requests.post(
f"{DIFY_API}/chat-messages",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
json={
"inputs": {},
"query": question,
"response_mode": "blocking", # 等待完整回复
"user": user_id,
"conversation_id": "" # 空=新会话,填ID=继续对话
},
timeout=60
)
result = response.json()
return result.get("answer", "抱歉,暂时无法回答。")
# 流式输出(打字机效果)
def ask_streaming(question: str):
response = requests.post(
f"{DIFY_API}/chat-messages",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"query": question, "response_mode": "streaming", "user": "u1"},
stream=True
)
for line in response.iter_lines():
if line and line.startswith(b"data: "):
import json
data = json.loads(line[6:])
if data.get("event") == "message":
print(data.get("answer", ""), end="", flush=True)
九、多租户应用(团队成员管理)
<code"> Dify 支持多成员协作: 工作区 → 成员 → 邀请成员 权限角色: - Owner:完全控制 - Admin:管理应用和知识库 - Editor:创建和编辑应用 - Viewer:只能使用应用 邀请方式: 1. 发送邮件邀请(需配置 SMTP) 2. 生成邀请链接(有效期24小时) 多工作区: - 不同业务线可以创建独立工作区 - 知识库和应用相互隔离
十、总结
Dify 将 AI 应用开发的门槛从「会写代码」降低到「会拖拽」,让产品经理、运营人员也能构建实用的 AI 工作流。在香港服务器自托管的核心优势:同时接入本地 Ollama 模型(零 API 费用)和在线模型(高质量)、数据不出境、团队无限用户无额外费用。对于已有香港服务器的团队,部署 Dify 几乎是零成本的 AI 能力升级。