dify 是一个开源的 LLM 应用开发平台,其核心功能包括:

  1. 工作流:可在画布上构建和测试强大的 AI 工作流程。
  2. 全面的模型支持:与数百种专有 / 开源 LLMs 及数十种推理提供商和自托管解决方案无缝集成,支持 GPT、Mistral、Llama3、qwen 等及任何与 OpenAI API 兼容的模型。
  3. Prompt IDE:提供直观界面,用于制作提示、比较模型性能及为聊天类应用添加文本转语音等功能。
  4. RAG Pipeline:具备广泛的 RAG 功能,涵盖文档摄入到检索,支持从 PDF、PPT 等常见文档格式提取文本。
  5. Agent 智能体:可基于 LLM 函数调用或 ReAct 定义 Agent,提供 50 多种内置工具如谷歌搜索、DALL・E 等。
  6. LLMOps:能监测和分析应用日志与性能,基于生产数据和注释持续改进提示、数据集及模型。
  7. Backend-as-a-Service:所有功能都提供 API,便于将 Dify 集成到自有业务逻辑中。

本文将把详细的讲述搭建 dify 并且用它的 Chatflow 搭建智能体应用的过程。

环境准备

  • CPU: 4核,内存: 16G,GPU: 可选

    如果没有GPU,大模型运行速度会慢很多

  • 操作系统:Ubuntu

    windows也可以,但是要麻烦很多,部署中间也容易出各种问题


部署 ollama 和大模型 qwen

参见:在ubuntu中离线部署ollama和大模型qwen

部署 dify

下面我们安装 dify 1.9.2

  1. 下载源代码

    点击这里下载 dify 1.9.2源代码

  2. 上传到目标服务器

  3. 解压

tar -zxvf dify-1.9.2.tar.gz
  1. 进入 dify 源代码中的 docker 目录
cd dify-1.9.2/docker
  1. 拷贝环境变量文件
sudo cp .env.example .env
  1. 创建并启动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
  1. 测试

首次使用时需要打开页面设置一下:

http://your_server_ip/install

设置 dify 模型供应商

dify支持4四种类型的大模型/LLM:

  • 系统推理模型:用于聊天等应用程序任务。

    除了支持常见的线上平台以外,也支持 Ollma 等本地大模型服务。

  • 嵌入模型:用于将分割后的文档嵌入知识库,并在应用程序中处理用户查询。
  • 重排序/Rerank模型:增强 LLM 中的搜索能力。
  • 语音转文本模型:在对话应用中将语音转换为文本。

本文将配置使用本地 Ollama 的 系统推理模型。

  1. 设置模型提供商
  • 点击右上角头像,在弹出的菜单中选择 设置 > 模型供应商。

设置模型供应商

  • 选择 Ollama , 点击 安装 按钮。

选择Ollama

  • 点击 添加模型 , 添加已经部署好的模型。

添加模型

由于是本地服务,所以没有配置凭据,这样用起来更方便。

编排 Chatflow 应用

下面我们创建一个 公文校验 应用。

  1. 点击 创建空白应用 ,填写名称等信息后点击 创建

创建chatflow

此时,dify 自动的创建了一个简单的工作流:
chatflow默认工作流

  • 开始 节点可以获取输入
  • LLM 可以设置提示词,对文本进行校验
  • 直接回复 用于输出结果

这俨然是 langchain 的可视化版本

  1. 开始 节点

不用设置。

  1. 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

设置 LLM 节点

  1. 直接回复 节点

设置 中输入 / ,然后选择环境变量 structured_output,如下图:

设置 直接回复 节点

测试应用

点击右上角 发布 按钮,在弹出的菜单里面可以 发布应用 ,也可以 运行 ,引用运行起来后,直接在输入框中粘贴需要校验的公文文本,点击 发送 按钮,就可以看到回复的 JSON 结果了。

测试chatflow

测试校验功能

使用 访问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 API

总结

一、Dify 的核心优势

  1. 低代码/可视化友好:通过画布式工作流、Prompt IDE 等界面,无需复杂编码就能搭建 LLM 应用(如聊天机器人、RAG 知识库、Agent),降低非专业开发人员的使用门槛。
  2. 模型与生态兼容性强:无缝对接数百种专有(GPT、Claude)/开源(Llama3、Qwen3)模型,支持自托管推理服务,同时集成 50+ 工具(搜索、文档解析、DALL·E 等)和多格式文档(PDF/PPT/Excel),生态灵活。
  3. 全链路 LLM 应用支持:一站式覆盖“Prompt 设计→RAG 构建→Agent 开发→LLMOps 监控→API 集成”,无需拼接多个工具,开发效率高。
  4. 部署灵活:支持云服务(快速上手)、自托管(数据私有化)、企业版(定制化功能),适配个人、初创团队、大型企业等不同需求。
  5. 原生支持协作与迭代:内置日志分析、性能监控、提示词优化功能,支持团队协作管理,便于基于生产数据持续迭代应用。

二、Dify 的主要劣势

  1. 深度定制能力有限:低代码设计导致复杂场景(如自定义 Agent 决策逻辑、特殊 RAG 检索算法)的灵活性不如纯编码开发(如 LangChain + FastAPI)。
  2. 自托管门槛较高:社区版自托管需配置服务器、数据库、模型服务,对运维能力有一定要求,且资源消耗不低(尤其搭载大模型时)。
  3. 开源版功能受限:部分高级特性(如高级权限管理、多租户隔离、专属技术支持)仅在企业版提供,开源社区版功能相对基础。
  4. 性能适配性:高并发场景下(如大规模用户调用),需额外优化部署架构(如负载均衡、缓存),默认配置可能无法满足极端需求。
  5. 学习成本(相对):虽降低了编码门槛,但要熟练运用工作流、RAG、Agent 等功能,仍需理解 LLM 基础原理和工具链逻辑,新手需一定学习时间。

三、适合的应用场景

  1. 快速原型验证:个人开发者、初创团队需快速搭建 LLM 应用(如产品咨询机器人、个人知识库),无需投入大量编码精力。
  2. 企业内部工具开发:需要数据私有化(自托管),且需求集中在 RAG 知识库(如内部文档问答)、审批流程 Agent、办公自动化工具等场景。
  3. 非技术团队搭建 AI 应用:市场、运营、客服等团队,无需编程能力,通过可视化界面就能定制业务相关的 AI 工具(如客户问答机器人、文档摘要工具)。
  4. 中小规模生产级应用:用户量适中(非超大规模并发),需要完整的 LLMOps 能力(监控、迭代),且无需深度定制底层逻辑的场景(如垂直行业客服、轻量化 AI 助手)。
  5. 多模型/多工具集成场景:需要同时对接多种 LLM(如混合使用 GPT-4 和开源模型)、整合外部工具(如搜索、数据库查询)的复合需求。

四、不适合的场景

  1. 超大规模高并发场景(如亿级用户调用,需底层架构深度优化);
  2. 需完全自定义底层逻辑(如特殊 Agent 决策算法、定制化 RAG 检索策略)的深度开发需求;
  3. 资源极度有限(如低配服务器),无法承担自托管部署成本的场景;
  4. 对功能无限制要求(如免费版需企业级特性)且不愿付费的场景。

🪐祝好运🪐