news 2026/6/10 22:32:19

Dify 实战教程:从零部署到构建 AI 应用全流程详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dify 实战教程:从零部署到构建 AI 应用全流程详解

本文面向有一定开发基础的读者,涵盖 Dify 的核心概念、Docker 部署、知识库配置、Workflow 搭建,以及通过 API 接入自己系统的完整流程。


一、Dify 是什么?

Dify 是一个开源的 LLM 应用开发平台,定位是让开发者快速构建、部署、运营基于大语言模型的 AI 应用,而不需要从头搭建推理、向量检索、对话管理等基础设施。

核心能力

能力说明
多模型支持OpenAI、Claude、通义千问、文心一言、本地 Ollama 等
知识库 RAG上传文档,自动向量化,支持语义检索
Workflow可视化编排 AI 流程,支持分支、循环、代码节点
Agent工具调用、多步推理
API 开放每个应用自动生成 REST API,方便对接业务系统

和 LangChain、FastGPT 的区别

  • LangChain:代码框架,灵活但需要大量手写代码

  • FastGPT:偏向知识库问答场景,功能相对收敛

  • Dify:介于两者之间,可视化 + 可编程,适合团队协作和快速落地


二、Docker 部署(推荐方式)

环境要求

  • Docker 20.10+

  • Docker Compose 2.x+

  • 内存建议 4GB 以上

部署步骤

1. 克隆仓库

git clone https://github.com/langgenius/dify.git cd dify/docker

2. 复制配置文件

cp .env.example .env

3. 修改关键配置

打开.env文件,必须修改以下内容:

# 必须替换,用于 JWT 签名和加密 SECRET_KEY=your-random-secret-key-here ​ # 生成方法: # openssl rand -base64 42

其他常用配置:

# Token 过期时间 ACCESS_TOKEN_EXPIRE_MINUTES=60 REFRESH_TOKEN_EXPIRE_DAYS=30 ​ # 如果需要外网访问,配置这些 CONSOLE_WEB_URL=http://你的服务器IP SERVICE_API_URL=http://你的服务器IP

4. 启动服务

docker compose up -d

5. 验证部署

docker ps

正常情况下应该看到以下容器全部 Up:

docker-nginx-1 # 反向代理,监听 80/443 docker-api-1 # 后端 API docker-web-1 # 前端 docker-worker-1 # 异步任务 docker-db-postgres-1 # 数据库(PostgreSQL) docker-redis-1 # 缓存 docker-weaviate-1 # 向量数据库 docker-sandbox-1 # 代码执行沙箱 docker-plugin_daemon-1 # 插件服务

6. 访问控制台

浏览器打开:http://服务器IP

首次访问需要创建管理员账号。


三、配置模型

部署完成后,第一件事是配置 LLM 模型。

步骤

  1. 右上角头像 →设置

  2. 左侧模型供应商

  3. 选择对应厂商,填入 API Key

常用模型配置示例

OpenAI:

API Key: sk-xxxxxxxx Base URL: https://api.openai.com/v1(或中转地址)

Ollama(本地模型):

Base URL: http://host.docker.internal:11434

注意:Docker 内访问宿主机用host.docker.internal而不是localhost

通义千问:

API Key: 阿里云控制台申请

四、知识库配置详解

知识库是 Dify 的核心功能之一,基于 RAG(检索增强生成)实现文档问答。

创建知识库

  1. 顶部导航 →知识库

  2. 创建知识库→ 上传文档(支持 PDF、Word、TXT、Markdown 等)

  3. 配置分段规则

分段策略选择

通用分段

检索和召回用同一个块,适合大多数场景。

关键参数:

分段标识符:\n\n(以空行为分割点) 最大长度:1024 characters 重叠长度:50 characters(防止语义在段边界被截断)
父子分段(推荐用于长文档)

核心思路:子块负责检索(精准),父块负责召回(完整)

用户提问 → 向量匹配子块(小而精准)→ 返回对应父块给 LLM(大而完整)

适用场景:

  • 文档有清晰的章节层级

  • 问题需要综合多个小点来回答

  • 文档篇幅较长(>5000 字)

检索设置

模式说明适用
向量检索语义相似度匹配通用问答
全文检索关键词精确匹配查找专有名词
混合检索两者结合推荐默认使用

五、创建应用

Dify 支持四种应用类型:

类型说明
聊天助手单轮或多轮对话,最简单
Agent可调用工具,多步推理
Chatflow可视化编排的对话流程
Workflow批处理流程,无对话界面

以 Chatflow 为例

1. 新建 Chatflow

工作室 → 创建应用 → Chatflow

2. 基本节点构成

[开始] → [知识检索] → [LLM] → [回复]

3. 知识检索节点配置

  • 选择已创建的知识库

  • 检索模式:混合检索

  • Top K:3(返回最相关的3段)

  • Score 阈值:0.5(低于此相似度的结果不采用)

4. LLM 节点配置

System Prompt 示例:

你是一个专业的客服助手。 请根据以下检索到的知识库内容回答用户问题: ​ {{#context#}} ​ 如果知识库中没有相关信息,请如实告知用户,不要编造答案。

5. 发布应用

右上角发布→ 选择发布方式:

  • 嵌入网站(iframe / 脚本)

  • 独立页面

  • API 调用


六、API 接入

每个 Dify 应用都会自动生成 REST API,方便接入自己的业务系统。

获取 API Key

  1. 进入对应应用

  2. 左侧菜单 →访问 API

  3. 右上角API Key→ 创建密钥

Chatflow API 调用示例

发送消息(流式响应):

import requests import json ​ url = "http://你的服务器IP/v1/chat-messages" headers = { "Authorization": "Bearer app-xxxxxxxxxxxxxxxx", "Content-Type": "application/json" } ​ payload = { "inputs": {}, "query": "你好,请问如何申请退款?", "response_mode": "streaming", # 流式输出 "conversation_id": "", # 首次为空,后续传上一次的 id "user": "user-001" } ​ response = requests.post(url, headers=headers, json=payload, stream=True) ​ for line in response.iter_lines(): if line: line = line.decode('utf-8') if line.startswith('data: '): data = json.loads(line[6:]) if data.get('event') == 'message': print(data.get('answer', ''), end='', flush=True)

非流式响应:

payload["response_mode"] = "blocking" response = requests.post(url, headers=headers, json=payload) result = response.json() print(result['answer'])

Workflow API 调用示例

url = "http://你的服务器IP/v1/workflows/run" headers = { "Authorization": "Bearer app-xxxxxxxxxxxxxxxx", "Content-Type": "application/json" } ​ payload = { "inputs": { "customer_name": "张三", "issue_type": "退款" }, "response_mode": "blocking", "user": "user-001" } ​ response = requests.post(url, headers=headers, json=payload) result = response.json() print(result['data']['outputs'])

常用 API 接口汇总

接口方法说明
/v1/chat-messagesPOST发送对话消息
/v1/conversationsGET获取会话列表
/v1/conversations/:id/messagesGET获取历史消息
/v1/workflows/runPOST执行工作流
/v1/files/uploadPOST上传文件

七、Workflow 进阶:常用节点

代码节点

支持 Python / JavaScript,可以做数据处理:

def main(inputs: dict) -> dict: name = inputs.get("name", "") score = inputs.get("score", 0) level = "优秀" if score >= 90 else "良好" if score >= 70 else "待提升" return { "result": f"{name} 的评级为:{level}({score}分)" }

HTTP 请求节点

直接在工作流中调用外部 API:

方法:POST URL:https://api.example.com/notify Header:Authorization: Bearer {{token}} Body:{"user_id": "{{user_id}}", "message": "{{message}}"}

条件分支节点

根据变量值走不同流程:

IF score >= 90 → 发送优秀通知 ELSE IF score >= 60 → 发送合格通知 ELSE → 发送预警通知

迭代节点

对列表中的每个元素执行相同操作,类似 for 循环。


八、常见问题排查

容器启动失败

# 查看具体报错 docker logs docker-api-1 ​ # 重启单个服务 docker compose restart api

知识库检索效果差

  • 检查分段是否合理,避免一段内容过于杂乱

  • 调低 Score 阈值(如从 0.5 降到 0.3)

  • 尝试换用混合检索模式

  • 检查 Embedding 模型是否支持中文

API 返回 401

{"code": "unauthorized", "message": "Unauthorized."}

→ 检查 Authorization Header 格式:Bearer app-你的key,注意Bearer后有空格

模型调用失败

# 查看 API 日志 docker logs docker-api-1 --tail 100

常见原因:API Key 错误、网络无法访问模型服务商、余额不足


九、生产环境建议

事项建议
SECRET_KEY必须替换默认值,使用openssl rand -base64 42生成
HTTPS配置 SSL 证书,避免明文传输 API Key
数据备份定期备份 PostgreSQL 数据和上传的文件
资源监控向量数据库(Weaviate)比较吃内存,建议监控
版本升级升级前对比.env.example的变更,备份数据库

十、总结

Dify 的核心价值在于把 LLM 应用的通用基础设施都帮你搭好了,开发者只需要专注在业务逻辑本身:

你负责:业务流程设计 + Prompt 调优 + API 接入 Dify 负责:模型调度 + 向量检索 + 对话管理 + 流式输出 + 插件生态

对于有一定开发基础的团队,Dify 可以极大缩短从想法到上线的周期。结合 Workflow 的可视化编排能力,非技术成员也能参与 AI 应用的迭代,降低了协作门槛。


参考资料

  • Dify 官方文档:Introduction - Dify Docs

  • GitHub 仓库:GitHub - langgenius/dify: Production-ready platform for agentic workflow development. · GitHub

  • Dify Marketplace(插件):Dify Marketplace

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 22:32:03

NSK MPFD 2002-4 滚珠丝杠技术手册

型号 MPFD 2002-4 属于 sources 中 NSK 的内循环式微型滚珠丝杠系列。 | 编码 | 属性 | 数据 | 内容 | |------|------|--------|------| | A | 联 | 133 | 许 | | B | 系 | 2798 | 经 | | C | 我 | 2959 | 理 |与您上一条查询的同尺寸间隙品&a…

作者头像 李华
网站建设 2026/6/10 22:30:23

写给工控行业朋友的一些话

引言 作为ESim电工仿真的作者,我写下这段话时,内心满是悲愤与愧疚。我曾以为,凭一腔热血和一身技术,总能在这行安身立命;但随着对行业理解的深入,我越发感到窒息和绝望——中国工控软件的命门,正…

作者头像 李华
网站建设 2026/6/10 22:13:13

别再只用SE模块了!手把手教你用PyTorch实现CBAM注意力机制(附代码)

从SE到CBAM:PyTorch实战混合注意力机制的全场景优化指南当你第一次在ResNet中插入SE模块时,那种精度提升的惊喜可能还记忆犹新。但站在2023年的技术前沿,我们需要更强大的注意力工具——这就是CBAM(Convolutional Block Attention Module)的价…

作者头像 李华
网站建设 2026/6/10 22:09:03

不止是列表:用RimWorld的Def系统设计你的第一个原创事件(IncidentDef实战)

从零构建RimWorld考古事件:IncidentDef与多Def协同设计实战 当你的殖民地边缘突然出现一座被风沙半掩的古老遗迹,伴随着随机生成的文物描述和可能触发的研究加成——这种动态叙事正是RimWorld模组创作的魅力所在。本文将带你从零设计一个完整的考古挖掘事…

作者头像 李华