dify 是一个开源的 LLM 应用开发平台,其核心功能包括:
- 工作流:可在画布上构建和测试强大的 AI 工作流程。
- 全面的模型支持:与数百种专有 / 开源 LLMs 及数十种推理提供商和自托管解决方案无缝集成,支持 GPT、Mistral、Llama3、qwen 等及任何与 OpenAI API 兼容的模型。
- Prompt IDE:提供直观界面,用于制作提示、比较模型性能及为聊天类应用添加文本转语音等功能。
- RAG Pipeline:具备广泛的 RAG 功能,涵盖文档摄入到检索,支持从 PDF、PPT 等常见文档格式提取文本。
- Agent 智能体:可基于 LLM 函数调用或 ReAct 定义 Agent,提供 50 多种内置工具如谷歌搜索、DALL・E 等。
- LLMOps:能监测和分析应用日志与性能,基于生产数据和注释持续改进提示、数据集及模型。
- Backend-as-a-Service:所有功能都提供 API,便于将 Dify 集成到自有业务逻辑中。
本文将把详细的讲述搭建 dify 并且用它的 Chatflow 搭建智能体应用的过程。
环境准备
- CPU: 4核,内存: 16G,GPU: 可选
如果没有GPU,大模型运行速度会慢很多
- 操作系统:Ubuntu
windows也可以,但是要麻烦很多,部署中间也容易出各种问题
部署 ollama 和大模型 qwen
部署 dify
下面我们安装 dify 1.9.2 。
-
下载源代码
-
上传到目标服务器
-
解压
tar -zxvf dify-1.9.2.tar.gz
- 进入 dify 源代码中的 docker 目录
cd dify-1.9.2/docker
- 拷贝环境变量文件
sudo cp .env.example .env
- 创建并启动docker镜像
sudo docker-compose up -d
这个过程会创建几个镜像,包括 3 个核心服务:api / worker / web,以及 6 个依赖组件:weaviate / db / redis / nginx / ssrf_proxy / sandbox。
启动镜像成功后,将出现类似于下面的提示:
✔ Network docker_ssrf_proxy_network Created 0.0s
✔ Network docker_default Created 0.0s
✔ Container docker-weaviate-1 Started 31.8s
✔ Container docker-ssrf_proxy-1 Started 31.9s
✔ Container docker-web-1 Started 31.8s
✔ Container docker-redis-1 Started 31.8s
✔ Container docker-db-1 Healthy 64.2s
✔ Container docker-sandbox-1 Started 31.7s
✔ Container docker-plugin_daemon-1 Started 34.4s
✔ Container docker-worker-1 Started 34.3s
✔ Container docker-api-1 Started 34.3s
✔ Container docker-worker_beat-1 Started 34.3s
✔ Container docker-nginx-1 Started
- 测试
首次使用时需要打开页面设置一下:
http://your_server_ip/install
设置 dify 模型供应商
dify支持4四种类型的大模型/LLM:
- 系统推理模型:用于聊天等应用程序任务。
除了支持常见的线上平台以外,也支持
Ollma等本地大模型服务。 - 嵌入模型:用于将分割后的文档嵌入知识库,并在应用程序中处理用户查询。
- 重排序/Rerank模型:增强 LLM 中的搜索能力。
- 语音转文本模型:在对话应用中将语音转换为文本。
本文将配置使用本地 Ollama 的 系统推理模型。
- 设置模型提供商
- 点击右上角头像,在弹出的菜单中选择 设置 > 模型供应商。
- 选择
Ollama, 点击安装按钮。
- 点击
添加模型, 添加已经部署好的模型。
由于是本地服务,所以没有配置凭据,这样用起来更方便。
编排 Chatflow 应用
下面我们创建一个 公文校验 应用。
- 点击
创建空白应用,填写名称等信息后点击创建
此时,dify 自动的创建了一个简单的工作流:
开始节点可以获取输入LLM可以设置提示词,对文本进行校验直接回复用于输出结果
这俨然是
langchain的可视化版本
开始节点
不用设置。
LLM节点
模型:选择已经配置好的大模型。
SYSTEM:系统提示词:
你是一名具有政法系统工作经验的公文合规审查专家。
USER: 点击 添加消息 ,添加用户提示词:
请对以下用户提交的政法委公文草稿进行深度审查:
---
【待审查公文原文】
{{#sys.query#}}
---
#### 输出要求
请严格以 **JSON 格式** 返回结果,不得包含额外解释或 Markdown:
```json
{
"document_type": "string",
"issuing_unit_level": "string",
"overall_assessment": "string",
"compliance_score": "integer (0-100)",
"issues": [
{
"dimension": "string",
"location": "string",
"problem": "string",
"suggestion": "string",
"severity": "string",
"reference": "string"
}
],
"security_warning": "string or null",
"disclaimer": "本审查基于公开规范与通用规则,不替代政法委办公室核稿、保密审查及分管领导审批。涉密公文严禁通过互联网系统处理。"
}
{{#sys.query#}}是 dify 的环境变量,用户在开始节点输入的文本将会被存储在这个环境变量中。
在编辑提示词时,可以输入/,系统会弹出来可用的环境变量,选择一下就好。
这里要求严格按照json格式输出。
输出变量:打开 结构化输出,然后点击 配置 -> JSON Schema,输入:
{
"type": "object",
"properties": {
"document_type": {"type": "string"},
"issuing_unit_level": {"type": "string"},
"overall_assessment": {"type": "string"},
"compliance_score": {"type": "integer"},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"dimension": {"type": "string"},
"location": {"type": "string"},
"problem": {"type": "string"},
"suggestion": {"type": "string"},
"severity": {"type": "string"},
"reference": {"type": "string"}
},
"required": ["dimension", "problem", "suggestion"]
}
},
"security_warning": {"type": "string"},
"disclaimer": {"type": "string"}
},
"required": ["document_type", "overall_assessment", "compliance_score", "issues"]
}
确保严格按照这个json格式输出。
失败时重试:打开此设置后,最大重试次数为 3 。
直接回复节点
在 设置 中输入 / ,然后选择环境变量 structured_output,如下图:
测试应用
点击右上角 发布 按钮,在弹出的菜单里面可以 发布应用 ,也可以 运行 ,引用运行起来后,直接在输入框中粘贴需要校验的公文文本,点击 发送 按钮,就可以看到回复的 JSON 结果了。
使用 访问API
应用发布后,会自动提供 API,我们可以用 APIfox 等工具测试该应用的接口是否可用。
下面以 APIfox 为例。
- 选择
POST方式 - URL地址: http://[your-ip]/v1/chat-messages
- Headers:
- Content-Type: application/json
- Authorization: Bearer your-token
需要把 your-token 替换为 在
访问API中点击右上角API密钥后配置的token。
- Body: 选择 Raw ,内容为:
{
"inputs": {},
"query": "XX市委政法委员会文件 X市政法〔2025〕第28号 签发人:王强 关于3·15群体性事件处置情况的报告 省委政法委: 2025年3月15日下午,我市某区因拆迁补偿问题引发大规模聚集事件。现场约有300多人高喊“还我房子”等口号...",
"response_mode": "blocking",
"user": "liu",
"files": [
]
}
然后点击 发送 后,会返回 JSON 格式的结果:
总结
一、Dify 的核心优势
- 低代码/可视化友好:通过画布式工作流、Prompt IDE 等界面,无需复杂编码就能搭建 LLM 应用(如聊天机器人、RAG 知识库、Agent),降低非专业开发人员的使用门槛。
- 模型与生态兼容性强:无缝对接数百种专有(GPT、Claude)/开源(Llama3、Qwen3)模型,支持自托管推理服务,同时集成 50+ 工具(搜索、文档解析、DALL·E 等)和多格式文档(PDF/PPT/Excel),生态灵活。
- 全链路 LLM 应用支持:一站式覆盖“Prompt 设计→RAG 构建→Agent 开发→LLMOps 监控→API 集成”,无需拼接多个工具,开发效率高。
- 部署灵活:支持云服务(快速上手)、自托管(数据私有化)、企业版(定制化功能),适配个人、初创团队、大型企业等不同需求。
- 原生支持协作与迭代:内置日志分析、性能监控、提示词优化功能,支持团队协作管理,便于基于生产数据持续迭代应用。
二、Dify 的主要劣势
- 深度定制能力有限:低代码设计导致复杂场景(如自定义 Agent 决策逻辑、特殊 RAG 检索算法)的灵活性不如纯编码开发(如 LangChain + FastAPI)。
- 自托管门槛较高:社区版自托管需配置服务器、数据库、模型服务,对运维能力有一定要求,且资源消耗不低(尤其搭载大模型时)。
- 开源版功能受限:部分高级特性(如高级权限管理、多租户隔离、专属技术支持)仅在企业版提供,开源社区版功能相对基础。
- 性能适配性:高并发场景下(如大规模用户调用),需额外优化部署架构(如负载均衡、缓存),默认配置可能无法满足极端需求。
- 学习成本(相对):虽降低了编码门槛,但要熟练运用工作流、RAG、Agent 等功能,仍需理解 LLM 基础原理和工具链逻辑,新手需一定学习时间。
三、适合的应用场景
- 快速原型验证:个人开发者、初创团队需快速搭建 LLM 应用(如产品咨询机器人、个人知识库),无需投入大量编码精力。
- 企业内部工具开发:需要数据私有化(自托管),且需求集中在 RAG 知识库(如内部文档问答)、审批流程 Agent、办公自动化工具等场景。
- 非技术团队搭建 AI 应用:市场、运营、客服等团队,无需编程能力,通过可视化界面就能定制业务相关的 AI 工具(如客户问答机器人、文档摘要工具)。
- 中小规模生产级应用:用户量适中(非超大规模并发),需要完整的 LLMOps 能力(监控、迭代),且无需深度定制底层逻辑的场景(如垂直行业客服、轻量化 AI 助手)。
- 多模型/多工具集成场景:需要同时对接多种 LLM(如混合使用 GPT-4 和开源模型)、整合外部工具(如搜索、数据库查询)的复合需求。
四、不适合的场景
- 超大规模高并发场景(如亿级用户调用,需底层架构深度优化);
- 需完全自定义底层逻辑(如特殊 Agent 决策算法、定制化 RAG 检索策略)的深度开发需求;
- 资源极度有限(如低配服务器),无法承担自托管部署成本的场景;
- 对功能无限制要求(如免费版需企业级特性)且不愿付费的场景。
🪐祝好运🪐