DeepSeek + Dify 搭建 AI 应用
低代码构建 AI 应用,无需编写一行代码。可视化编排界面,拖拽式工作流设计,从零搭建知识库问答、Agent 智能体、企业级 AI 应用。
开始学习数据来源:github.com/langgenius/dify 官方仓库
为什么选择 Dify 搭建 AI 应用?
Dify 是开源 LLM 应用开发平台,将 DeepSeek 模型快速构建为 AI 应用。可视化编排,拖拽式工作流,支持知识库、Agent、对话机器人,完美适配 DeepSeek 模型。
| 官方仓库 | github.com/langgenius/dify |
| 开源协议 | Apache 2.0(可商用) |
| 部署方式 | Docker Compose / 官方云服务 |
| 核心功能 | 可视化 Prompt 编排、RAG 知识库、Agent 工作流、API 发布 |
| DeepSeek 支持 | 通过 OpenAI-API-compatible 原生接入,支持 V3 和 R1 全系列 |
Dify 核心优势
- 可视化 Prompt 编排,拖拽式工作流设计,无需写代码
- 内置 RAG 引擎,支持 PDF / Word / TXT / Markdown / 网页等多种格式
- Agent 智能体:工具调用、代码执行、条件分支
- 对话日志与分析,持续优化应用效果
- 一键 API 发布,支持 iframe 嵌入和分享链接
- 与 DeepSeek 通过 OpenAI-API-compatible 方式无缝接入
Dify 简介与安装
Dify 是一个开源的 LLM 应用开发平台,帮助你快速将大语言模型(如 DeepSeek)构建为可用的 AI 应用。通过 Docker Compose 一键部署,5 分钟即可完成安装。
什么是 Dify?
Dify 由 LangGenius 团队开发,是一个面向 LLM 应用的全生命周期开发平台。它提供了从 Prompt 编排、知识库管理、Agent 工作流到应用发布的一站式解决方案。你可以把 Dify 理解为"AI 应用的 WordPress"——通过可视化界面,快速搭建各种 AI 应用,无需编写代码。
环境要求
- Docker 和 Docker Compose(必须)
- 至少 4GB 可用内存(推荐 8GB 以上)
- 至少 20GB 可用磁盘空间
- 支持 Windows / macOS / Linux
Docker Compose 一键部署
以下命令会克隆 Dify 仓库并通过 Docker Compose 启动所有服务:
# 克隆 Dify 仓库 git clone https://github.com/langgenius/dify.git # 进入 Docker 目录 cd dify/docker # 复制环境变量配置文件 cp .env.example .env # 启动所有服务(PostgreSQL、Redis、Weaviate、Nginx、Dify API、Dify Web) docker compose up -d # 查看服务状态 docker compose ps
部署完成后,打开浏览器访问 http://localhost:3000,即可进入 Dify 管理界面。首次访问需要设置管理员邮箱和密码。
提示
如果不想本地部署,Dify 也提供官方云服务(cloud.dify.ai),注册即可使用,免去部署步骤。但自部署可以完全掌控数据,适合对隐私有要求的场景。
接入 DeepSeek 模型
Dify 支持通过 OpenAI-API-compatible 方式接入 DeepSeek 模型。无论是 DeepSeek 官方 API 还是 Ollama 本地部署的 DeepSeek,都可以在 Dify 中配置使用。
配置步骤
- 登录 Dify 管理界面后,点击右上角头像,选择「设置」
- 在左侧菜单中点击「模型供应商」
- 在模型供应商列表中找到「OpenAI-API-compatible」
- 点击「添加到供应商」按钮
- 填写以下配置信息
方式一:接入 DeepSeek 官方 API
如果你使用 DeepSeek 官方 API,配置如下:
| 供应商类型 | OpenAI-API-compatible |
| 供应商名称 | DeepSeek(自定义) |
| API Base URL | https://api.deepseek.com/v1 |
| API Key | sk-your-deepseek-api-key |
API Key 获取地址:platform.deepseek.com/api_keys。注册后即可创建,新用户有免费额度。
方式二:接入 Ollama 本地部署的 DeepSeek
如果你使用 Ollama 在本地运行 DeepSeek 模型,配置如下:
| API Base URL | http://localhost:11434/v1 |
| API Key | 任意填写(Ollama 本地不需要验证) |
如果 Dify 和 Ollama 在同一台机器上运行,使用 localhost 即可。如果 Ollama 在另一台机器上,请替换为对应 IP 地址。确保 Ollama 已设置 OLLAMA_HOST=0.0.0.0:11434 环境变量。
添加模型
配置完成后,在「模型供应商」页面点击进入刚添加的 DeepSeek 供应商,点击「添加模型」按钮:
- 模型类型:LLM(大语言模型)
- 模型名称:
deepseek-chat(V3)或deepseek-reasoner(R1) - 如果使用 Ollama,模型名称填
deepseek-r1:8b等 Ollama 模型名
保存后,DeepSeek 模型即出现在可用模型列表中,可以在创建应用时选择使用。
创建第一个聊天应用
接入 DeepSeek 模型后,我们来创建第一个 AI 聊天应用。Dify 提供三种应用类型:聊天助手、文本生成、Agent。我们先从最简单的聊天助手开始。
步骤一:创建应用
- 在 Dify 首页点击「创建应用」按钮
- 选择「聊天助手」应用类型
- 填写应用名称(如"DeepSeek 智能助手")
- 选择应用图标(可选)
- 点击「创建」
步骤二:配置模型
进入应用编辑页面后,在右侧「模型设置」区域:
- 在「模型」下拉菜单中选择刚才添加的 DeepSeek 模型(deepseek-chat 或 deepseek-reasoner)
- 设置模型参数:
- Temperature:0.7(对话)/ 0.1(代码)/ 0.9(创意写作)
- 最大 Token:根据需求设置,一般 2048 足够
- 上下文窗口:建议保留默认值
步骤三:设置系统提示词
系统提示词(System Prompt)定义了 AI 的角色和行为。在「编排」页面的「提示词」区域,输入以下内容:
你是一个专业的 AI 智能助手,由 DeepSeek 模型驱动。 你的回答风格: - 简洁明了,不啰嗦,直击要点 - 如果问题涉及代码,给出完整可运行的示例 - 如果问题涉及数学或逻辑,展示推理过程 - 如果用户的描述不清楚,主动追问细节 - 用中文回复,专业术语可附带英文原文 你的限制: - 不知道就说不知道,不编造信息 - 涉及医疗、法律等专业建议时,提醒用户咨询专业人士
步骤四:测试聊天
在页面右侧的「预览」区域,可以直接测试聊天效果。输入问题,观察 DeepSeek 的回复是否符合预期。如果效果不理想,可以调整 Temperature 参数或优化系统提示词。
调试技巧
- 如果回答太简短,尝试降低 Temperature 并增加 max_tokens
- 如果回答偏离主题,优化系统提示词,更明确地描述角色
- 如果使用 R1 模型,注意它会输出思维链(thinking),这是正常的推理过程
- 点击「日志与标注」可以查看历史对话,分析效果
更多关于系统提示词的设计技巧,请参考 DeepSeek 使用教程 中的提示词工程部分。
知识库搭建
知识库是 RAG(检索增强生成)的核心。将你的文档上传到 Dify 知识库,DeepSeek 可以基于文档内容回答问题,大幅提升回答的准确性和专业性。
上传文档
在 Dify 顶部导航栏点击「知识库」,进入知识库管理页面:
- 点击「创建知识库」按钮
- 填写知识库名称(如"公司产品手册")
- 点击「上传文档」,选择要上传的文件
支持的文档格式
PDF / Word / PPT
支持 .pdf、.docx、.pptx 格式,自动提取文本内容。
TXT / Markdown / CSV
支持 .txt、.md、.csv 格式,适合结构化数据。
网页抓取
输入 URL,Dify 自动抓取网页内容并导入知识库。
代码文件
支持 .py、.js、.java 等代码文件,适合技术文档。
分块设置(Chunk Settings)
文档上传后,Dify 会自动将文档切分为多个"块"(Chunk),每个块会独立进行向量化存储和检索。分块设置直接影响检索效果:
| 块大小(Chunk Size) | 建议 500-1000 字符。太小信息不完整,太大会降低检索精度。 |
| 重叠大小(Overlap) | 建议 50-100 字符。块之间的重叠部分,防止关键信息被切断。 |
检索设置
在知识库的「检索设置」中,你可以配置以下参数:
| 检索方式 | 向量检索(语义匹配)/ 全文检索(关键词匹配)/ 混合检索(推荐) |
| Top K | 返回最相关的 K 个文档块,建议 3-5。数值越大,上下文越丰富,但可能引入噪音。 |
| 相似度阈值 | 只返回相似度高于此阈值的结果,建议 0.5-0.7。阈值越高,结果越精确但可能漏掉相关内容。 |
最佳实践
- 文档质量越高,检索效果越好。建议先清理文档中的无关内容
- 如果文档包含大量表格,建议转换为 Markdown 表格格式再上传
- 知识库文档量较大时(10 万+ 字符),建议使用混合检索模式
- 上传后建议先测试几个问题,确认检索效果,再调整参数
更多关于 RAG 架构的内容,请参考 DeepSeek 部署教程 中的 Dify 集成章节。
知识库问答应用
将知识库与 DeepSeek 结合,构建专业的文档问答机器人。用户提问时,Dify 先从知识库检索相关文档片段,再交给 DeepSeek 基于这些片段生成准确回答。
创建知识库问答应用
- 在 Dify 首页点击「创建应用」,选择「聊天助手」
- 填写应用名称(如"产品文档问答")
- 进入应用编排页面,在「上下文」区域点击「添加」
- 选择刚才创建的知识库
- 在右侧模型设置中选择 DeepSeek 模型
配置系统提示词
知识库问答应用需要特殊的系统提示词,让 AI 知道如何利用检索到的文档:
你是一个专业的知识库问答助手。你的回答必须基于提供的文档内容。 回答规则: 1. 优先使用文档中的信息回答问题 2. 如果文档中有相关信息,直接引用并回答 3. 如果文档中没有相关信息,明确告知用户"文档中未包含此内容" 4. 回答时标注信息来源(如"根据产品手册第3章...") 5. 不要编造文档中没有的信息 文档内容: {{#context#}} 用户问题:{{#query#}} 请基于以上文档内容回答用户的问题。
RAG 工作流程
知识库问答的完整工作流程如下:
- 用户提问:用户输入问题
- 向量检索:Dify 将问题转为向量,在知识库中检索最相关的文档片段
- 上下文组装:将检索到的文档片段作为上下文,与用户问题一起组装 Prompt
- LLM 推理:DeepSeek 基于上下文和问题生成回答
- 返回结果:将回答返回给用户,同时标注引用来源
测试与优化
在预览区域测试几个问题,检查回答质量:
- 如果回答不够准确,检查知识库的文档分块和检索设置
- 如果回答与文档无关,可能是系统提示词中的变量引用不正确
- 如果检索不到相关内容,尝试降低相似度阈值或增加 Top K 值
- 查看「日志与标注」页面,可以看到每次检索到的具体文档片段
Agent 工作流
Agent 是 Dify 最强大的功能。通过可视化工作流编排,你可以构建能自主决策、调用工具、执行代码的 AI 智能体。DeepSeek 作为推理引擎,驱动整个 Agent 的决策逻辑。
创建 Agent 应用
- 在 Dify 首页点击「创建应用」
- 选择「Agent」应用类型
- 填写应用名称(如"数据分析助手")
- 进入工作流编排页面
工作流节点介绍
| 节点类型 | 功能说明 | 使用场景 |
|---|---|---|
| 开始节点 | 工作流的入口,定义输入变量 | 每个工作流必须有且只有一个 |
| LLM 节点 | 调用 DeepSeek 模型进行推理和生成 | 文本生成、分析、总结、翻译 |
| 工具节点 | 调用外部 API 或内置工具 | 搜索、计算、发送邮件、数据库查询 |
| 代码节点 | 执行 Python 或 JavaScript 代码 | 数据处理、格式转换、自定义逻辑 |
| 条件分支 | 根据条件判断走不同分支 | 分类、路由、多场景处理 |
| 知识检索 | 从知识库检索相关文档 | 知识库问答、文档分析 |
| 结束节点 | 工作流的出口,定义输出变量 | 每个工作流必须至少有输出 |
实战:构建一个数据分析 Agent
以下是一个完整的数据分析 Agent 工作流示例:
工作流结构:
- 开始节点:接收用户输入的数据分析需求
- LLM 节点(分析意图):DeepSeek 分析用户意图,判断分析类型(描述性分析 / 趋势分析 / 对比分析)
- 条件分支:根据分析类型路由到不同的处理流程
- 代码节点(数据处理):执行 Python 代码进行数据清洗、聚合、计算
- LLM 节点(生成报告):DeepSeek 基于处理结果生成分析报告
- 结束节点:输出最终的分析报告
LLM 节点配置示例
在 LLM 节点中,选择 DeepSeek 模型,配置如下提示词:
你是一个数据分析专家。请分析用户的数据分析需求,判断属于以下哪种类型: 1. 描述性分析:用户想了解数据的基本情况(如"销售额是多少") 2. 趋势分析:用户想了解数据的变化趋势(如"近三个月的变化") 3. 对比分析:用户想对比不同维度(如"A产品和B产品的对比") 用户需求:{{#query#}} 请只输出分析类型编号(1、2 或 3),不要输出其他内容。
代码节点示例
在代码节点中可以编写 Python 代码进行数据处理:
def main(data: str) -> dict: """处理输入数据,返回分析结果""" import json # 解析输入数据 records = json.loads(data) # 计算基本统计指标 values = [r["value"] for r in records] total = sum(values) avg = total / len(values) if values else 0 max_val = max(values) if values else 0 min_val = min(values) if values else 0 return { "total": total, "average": round(avg, 2), "max": max_val, "min": min_val, "count": len(values), "summary": f"共 {len(values)} 条数据,合计 {total},均值 {avg:.2f}" }
条件分支配置
条件分支节点根据 LLM 节点的输出结果进行路由:
- 条件 1:LLM 输出 == "1" -> 进入描述性分析流程
- 条件 2:LLM 输出 == "2" -> 进入趋势分析流程
- 条件 3:LLM 输出 == "3" -> 进入对比分析流程
- 默认分支:其他情况 -> 进入通用分析流程
Agent 调试技巧
- 使用「运行」功能逐步调试工作流,查看每个节点的输入输出
- 在 LLM 节点中设置 Temperature=0.1 可以让分类更稳定
- 代码节点中打印的日志可以在运行日志中查看,方便调试
- 复杂工作流建议先画流程图,再在 Dify 中实现
发布与嵌入
应用开发完成后,Dify 提供多种发布方式:API 发布(供程序调用)、iframe 嵌入(嵌入网页)、分享链接(直接分享)。无需额外开发,一键即可上线。
方式一:API 发布
将应用发布为 REST API,可以在任何后端程序中调用:
- 在应用编辑页面,点击右上角「发布」按钮
- 选择「访问 API」
- 获取 API 密钥和接口文档
# 调用 Dify 应用 API curl -X POST https://your-dify-host/v1/chat-messages \ -H "Authorization: Bearer app-xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "inputs": {}, "query": "你好,请帮我分析一下最近的销售数据", "response_mode": "streaming", "user": "user-001" }'
方式二:iframe 嵌入
将应用嵌入到你的网站中,用户可以直接在网页上使用:
- 在应用编辑页面,点击右上角「发布」
- 选择「嵌入网站」
- 复制生成的 iframe 代码
<!-- 将以下代码粘贴到你的网页中 --> <iframe src="https://your-dify-host/chatbot/xxxxxxxxxxxxx" style="width: 100%; height: 600px; border: none; border-radius: 12px;" allow="microphone"> </iframe>
方式三:分享链接
生成一个公开的分享链接,任何人都可以通过链接访问你的应用:
- 在应用编辑页面,点击右上角「发布」
- 选择「运行」
- 复制生成的分享链接
访问控制设置
| API 密钥 | 在 API 调用时作为认证凭证,可以在「API 访问」页面管理 |
| IP 白名单 | 限制只有特定 IP 地址可以调用 API |
| 速率限制 | 设置每分钟/每小时的最大请求数,防止滥用 |
| 对话记录 | 在「日志与标注」中查看所有用户对话,分析使用情况 |
实战案例
以下是三个真实的 DeepSeek + Dify 应用案例,从简单到复杂,覆盖最常见的应用场景。每个案例都附有完整的配置思路和参数参考。
案例一:智能客服机器人
场景描述:为企业网站搭建智能客服,自动回答产品使用、售后政策、常见问题等用户咨询。
配置要点:
- 知识库:上传产品手册、FAQ 文档、售后政策文件
- 模型选择:DeepSeek V3(deepseek-chat),Temperature=0.3
- 系统提示词:设定为"专业客服",要求礼貌、耐心、准确
- 发布方式:iframe 嵌入官网客服页面
- 效果优化:定期查看日志,补充高频问题的知识库文档
案例二:文档问答助手
场景描述:为团队搭建内部文档问答系统,同事可以直接询问公司制度、项目文档、技术规范等问题。
配置要点:
- 知识库:上传所有内部文档,分块大小 800,重叠 100
- 检索设置:混合检索,Top K=5,相似度阈值 0.6
- 模型选择:DeepSeek V3(deepseek-chat),Temperature=0.1
- 系统提示词:强调"基于文档回答,不编造信息"
- 变量设置:使用 {{#context#}} 和 {{#query#}} 变量
案例三:数据分析助手
场景描述:搭建数据分析 Agent,用户可以上传数据文件,Agent 自动完成数据清洗、分析和报告生成。
工作流配置:
- 开始节点 -> 接收用户输入和数据文件
- LLM 节点 -> 分析用户意图,确定分析类型
- 条件分支 -> 根据分析类型选择不同的处理流程
- 代码节点 -> 执行 Python 数据处理(pandas、numpy)
- LLM 节点 -> 基于处理结果生成分析报告
- 结束节点 -> 输出格式化报告
关键参数:
- 模型选择:DeepSeek R1(deepseek-reasoner)用于复杂推理,V3 用于报告生成
- 代码节点超时:设置为 60 秒,避免大数据处理超时
- 工具配置:添加网络搜索工具,支持查询外部数据
更多应用场景
AI 辅导老师
上传教材和习题集,DeepSeek 基于知识库为学生答疑解惑,讲解解题思路。
商品推荐助手
结合商品数据库,DeepSeek 根据用户需求推荐合适的商品,提升转化率。
健康咨询助手
上传医学知识库,提供常见病症的科普咨询(注意:不可替代专业医生诊断)。
法规查询助手
上传法律法规文档,帮助用户快速查询相关法条和解释。
DeepSeek + Dify 常见问题
相关教程
深入学习 DeepSeek 模型的使用、部署和开发技巧。