Dify平台深度指南:从入门到精通

这篇指南讲什么

这是一篇Dify平台的完整教程,从”这是啥”讲到”怎么用”。不管你是纯新手还是想进阶的老手,都能找到有价值的内容。文章很长,建议收藏慢慢看。

Dify是什么?

Dify(名字来自”Do It For You”)是一款开源的AI应用开发平台。简单来说,它就是帮你快速搭建AI应用的工具。

用大白话讲:Dify就是一个不用写很多代码,就能把AI大模型变成实际产品的平台

你可能会问:我直接调用OpenAI API不就行了?为什么要用Dify?

好问题!让我打个比方:

不用Dify,直接调API → 像自己盖毛坯房,从打地基开始 用Dify → 像买精装修房,拎包入住

具体来说,Dify帮你搞定这些事情:

  • 不用自己写对话管理的代码
  • 不用自己处理上下文窗口
  • 不用自己搭知识库系统
  • 不用自己写API接口
  • 不用自己处理各种异常情况

这些”脏活累活”Dify都帮你做了,你只需要关注业务逻辑。

核心特性详解

特性一:DAG可视化工作流

Dify的工作流引擎是它最核心的功能。它基于DAG(有向无环图)模型设计,说人话就是:把复杂的AI流程画成图,用节点和线来表示

看个例子:

用户输入 → 问题分类 → ┬→ 技术问题 → 知识库检索 → 生成回答
                  ├→ 投诉问题 → 情绪分析 → 安抚策略 → 生成回答
                  └→ 咨询问题 → FAQ检索 → 生成回答

        ↓
    质量检查 → 输出答案

这个图看起来复杂,但用Dify只需要拖拖拽拽就能搭出来。

工作流的优势:

  • 模块化:每个节点只做一件事,可以单独测试
  • 可视化:业务流程一目了然,好理解、好维护
  • 可观测:每个节点的输入输出都能看到,方便调试
  • 可扩展:想加新功能就加新节点,不影响现有逻辑

特性二:RAG知识库系统

RAG(检索增强生成)是当前AI应用最火的技术之一。Dify原生支持RAG,让你不用额外集成就能做知识库问答。

RAG是什么?

RAG = Retrieval Augmented Generation(检索增强生成)。原理很简单:

  1. 把你的文档切成小块,转换成”向量”存起来
  2. 用户提问时,先去向量库里找相关的文档块
  3. 把找到的文档块和用户问题一起喂给AI
  4. AI根据文档内容生成回答

这样做的好处是:AI回答的内容是”有据可查”的,而不是瞎编的。

Dify的RAG能力:

  • 支持多种文档格式(PDF、Word、Markdown、TXT等)
  • 支持多种Embedding模型(OpenAI、Cohere、Jina等)
  • 支持多种向量数据库(pgvector、Qdrant、Weaviate、Milvus、Pinecone)
  • 支持混合检索(语义+关键词)和rerank重排序

特性三:Agent智能体框架

Dify的Agent框架可以创建”能自主决策”的智能体。它不只是简单地问答,而是能:

  • 理解复杂意图:把用户的一句话拆解成多个任务
  • 调用外部工具:查天气、调API、读写数据库
  • 多步骤执行:一个任务可以包含多个步骤,Agent自己决定下一步干嘛
  • 自我反思:做错了能重新来

支持两种Agent策略:

  1. ReAct:推理+行动,适合需要复杂推理的场景
  2. Function Calling:直接调用工具,适合工具丰富的场景

特性四:API优先架构

Dify采用API优先的设计。每个创建的应用都会自动生成API,让你把AI能力集成到任何地方。

# 调用示例
curl -X POST 'http://localhost/v1/chat-messages' \
  -H 'Authorization: Bearer app-xxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "你好",
    "user": "user_123"
  }'

支持流式响应(SSE),能实时返回AI正在生成的文字,体验很好。

安装部署指南

方式一:Docker部署(推荐)

Docker部署是最简单的方式,适合大多数人。

前置条件:

  1. 安装Docker Desktop

  2. 确认Docker正常运行

    docker --version
    # 应该看到类似:Docker version 24.0.0

部署步骤:

# 1. 克隆Dify代码
git clone https://github.com/langgenius/dify.git
 
# 2. 进入docker目录
cd dify/docker
 
# 3. 复制环境配置
cp .env.example .env
 
# 4. 启动所有服务(这步需要等一会儿)
docker compose up -d
 
# 5. 检查服务状态
docker compose ps
# 应该看到 nginx、web、api、worker、db、redis 都是 Up

访问Dify:

打开浏览器,访问:

  • 本地:http://localhost
  • 服务器:http://你的服务器IP

第一次访问会让你创建管理员账号,创建完就能用了。

常见问题

Q:docker compose命令找不到? A:新版Docker用docker compose(空格),老版本用docker-compose(横杠)。如果提示命令不存在,先更新Docker。

Q:端口80被占用? A:修改.env文件,找到EXPOSE_NGINX_PORT=80改成其他端口如8080。

Q:启动后都是Exit状态? A:执行docker compose logs查看错误日志,常见问题是内存不足或端口冲突。

方式二:Docker Compose 生产部署

上面的快速部署适合体验,生产环境建议用更完整的配置。

创建 docker-compose.yml(在docker目录下,.env同级的位置):

# 增强版docker-compose.yml
version: '3'
 
services:
  # Nginx反向代理
  nginx:
    image: nginx:alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/ssl:/etc/nginx/ssl:ro
    depends_on:
      - web
    networks:
      - dify-network
 
  # 前端
  web:
    image: langgenius/dify-web:0.6.14
    restart: always
    environment:
      CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-http://localhost}
      CONSOLE_API_URL: ${CONSOLE_API_URL:-http://api:5000}
      SERVICE_API_URL: ${SERVICE_API_URL:-http://api:5000}
    networks:
      - dify-network
 
  # 后端API
  api:
    image: langgenius/dify-api:0.6.14
    restart: always
    environment:
      MODE: ${MODE:-standalone}
      LOG_LEVEL: ${LOG_LEVEL:-INFO}
      DB_USERNAME: ${DB_USERNAME:-dify}
      DB_PASSWORD: ${DB_PASSWORD:-dify_chatflow}
      DB_HOST: ${DB_HOST:-db}
      DB_PORT: ${DB_PORT:-5432}
      DB_DATABASE: ${DB_DATABASE:-dify}
      REDIS_HOST: ${REDIS_HOST:-redis}
      REDIS_PORT: ${REDIS_PORT:-6379}
      REDIS_PASSWORD: ${REDIS_PASSWORD:-dify}
    volumes:
      - ./volumes/db:/opt/dify/db
    depends_on:
      - db
      - redis
    networks:
      - dify-network
 
  # 异步Worker
  worker:
    image: langgenius/dify-api:0.6.14
    restart: always
    environment:
      MODE: ${MODE:-standalone}
      LOG_LEVEL: ${LOG_LEVEL:-INFO}
      DB_USERNAME: ${DB_USERNAME:-dify}
      DB_PASSWORD: ${DB_PASSWORD:-dify_chatflow}
      DB_HOST: ${DB_HOST:-db}
      DB_PORT: ${DB_PORT:-5432}
      DB_DATABASE: ${DB_DATABASE:-dify}
      REDIS_HOST: ${REDIS_HOST:-redis}
      REDIS_PORT: ${REDIS_PORT:-6379}
      REDIS_PASSWORD: ${REDIS_PASSWORD:-dify}
    volumes:
      - ./volumes/db:/opt/dify/db
    depends_on:
      - db
      - redis
    networks:
      - dify-network
 
  # 数据库
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_USER: ${DB_USERNAME:-dify}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-dify_chatflow}
      POSTGRES_DB: ${DB_DATABASE:-dify}
    volumes:
      - ./volumes/db/data:/var/lib/postgresql/data
    networks:
      - dify-network
 
  # Redis
  redis:
    image: redis:7-alpine
    restart: always
    command: redis-server --requirepass ${REDIS_PASSWORD:-dify}
    volumes:
      - ./volumes/redis:/data
    networks:
      - dify-network
 
networks:
  dify-network:
    driver: bridge

方式三:源码部署

适合需要深度定制或者在特殊环境运行的情况。

环境要求:

  • Python 3.11+
  • Node.js 18+
  • PostgreSQL 14+
  • Redis 6+
  • Git
# 克隆代码
git clone https://github.com/langgenius/dify.git
cd dify
 
# 后端部署
cd api
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate  # Windows
 
pip install -r requirements.txt
 
# 配置环境变量
cp .env.example .env
# 编辑.env文件,配置数据库连接
 
# 初始化数据库
flask db upgrade
 
# 启动后端
flask run --host 0.0.0.0 --port 5000
 
# 前端部署(另开终端)
cd ../web
npm install
npm run build
npm run start

界面操作详解

应用类型选择

登录Dify后,点击”创建应用”,会看到四种类型:

类型特点适合场景
助手对话式,有上下文客服、问答、助手
Agent能调用工具,自主决策复杂任务自动化
Workflow纯工作流,无对话界面批量处理、自动化流程
Completion纯文本生成文案创作、内容生成

新手推荐从助手类型开始,上手最快。

Prompt编排界面

创建应用后进入Prompt编排界面,这是Dify最核心的编辑区域。

界面布局:

┌─────────────────────────────────────────────────────┐
│  系统提示词                                            │
│  ┌───────────────────────────────────────────────┐ │
│  │ 你是一个专业的客服助手...                         │ │
│  └───────────────────────────────────────────────┘ │
│                                                      │
│  用户提示词                                           │
│  ┌───────────────────────────────────────────────┐ │
│  │ 用户问题:{{query}}                             │ │
│  │ 参考资料:{{context}}                           │ │
│  └───────────────────────────────────────────────┘ │
│                                                      │
│  变量配置                                            │
│  ├─ query (输入变量)                                │
│  └─ context (上下文变量,来自知识库)                  │
│                                                      │
│  [预览] [调试] [发布]                                │
└─────────────────────────────────────────────────────┘

系统提示词定义AI的角色和约束条件,用户提示词定义输入模板和输出格式。

知识库管理

知识库是Dify的重要功能。在左侧菜单找到”知识库”,创建知识库:

创建流程:

  1. 填写基本信息

    • 名称:比如”产品知识库”
    • 描述:说明知识库用途
  2. 选择Embedding模型

    • OpenAI Embeddings(需要API Key)
    • 或者本地部署的开源模型
  3. 配置分块策略

    • 自动分块(推荐新手)
    • 自定义分块(适合有特殊需求)
  4. 上传文档

    • 支持PDF、Word、Markdown、TXT、CSV等
    • 等待系统处理完成
  5. 审核分块结果

    • 查看自动分块的效果
    • 必要时手动调整

工作流进阶

工作流节点类型

Dify工作流支持多种节点:

LLM节点 调用大语言模型,是工作流的核心。

配置示例:
  model: gpt-4o
  temperature: 0.7
  max_tokens: 2000
  prompt: |
    你是一个{{role}},请回答以下问题。
    用户问题:{{query}}

知识库检索节点 从知识库中检索相关内容。

配置示例:
  knowledge_base: 产品知识库
  retrieval_model:
    top_k: 5
    score_threshold: 0.7
    mode: hybrid  # 混合检索

条件分支节点 根据条件分流。

配置示例:
  conditions:
    - variable: intent
      operator: equal
      value: complaint
      next_node: emotion_analysis
    - variable: intent
      operator: equal
      value: inquiry
      next_node: knowledge_retrieval
    - variable: "*"
      next_node: default_handler

代码执行节点 执行自定义逻辑。

# Python示例
import json
 
def main(data: str) -> dict:
    # 数据处理
    result = {
        "processed": True,
        "content": data.strip(),
        "length": len(data)
    }
    return result

HTTP请求节点 调用外部API。

配置示例:
  method: POST
  url: https://api.example.com/analyze
  headers:
    Authorization: "Bearer {{api_key}}"
  body:
    text: "{{user_input}}"
  timeout: 30

迭代节点 遍历数组处理。

配置示例:
  iterator: "{{items}}"
  body:
    - llm: 处理每个元素
    - variable: 收集结果

工作流设计模式

模式一:顺序执行 最简单的模式,所有步骤按顺序执行。

开始 → 步骤1 → 步骤2 → 步骤3 → 结束

适用场景:步骤之间有严格的先后依赖。

模式二:并行执行 多个分支同时执行,最后合并。

            → 分支A
           /
开始 → 分叉 → 分支B → 合并 → 结束
           \
            → 分支C

适用场景:分支之间没有依赖,可以同时执行。

模式三:条件分支 根据条件走不同路径。

开始 → 条件判断
  ├─ 条件A → 处理A → 结束
  ├─ 条件B → 处理B → 结束
  └─ 默认   → 默认处理 → 结束

适用场景:需要根据不同情况做不同处理。

模式四:循环迭代 重复执行直到满足退出条件。

开始 → 循环体 → 条件判断
            ↓
        ├─ 继续 → 循环体
        └─ 退出 → 结束

适用场景:需要反复处理直到达标。

实战案例:智能客服工作流

下面展示一个完整的智能客服工作流设计:

【开始】
    ↓
【用户意图识别】
├─ 售前咨询 → 【产品知识库检索】 → 【生成回答】
├─ 售后问题 → 【FAQ知识库检索】 → 【情绪分析】 → 【生成回答】
├─ 投诉建议 → 【创建工单】 → 【回复处理进度】
└─ 其他     → 【通用回复】

    ↓
【质量检查】
├─ 置信度≥0.8 → 【直接输出】
└─ 置信度<0.8 → 【人工审核】

    ↓
【结束】

节点配置示例:

1. 意图识别LLM节点

model: gpt-4o-mini
prompt: |
  分析用户消息的意图类别:
  - pre_sales: 售前咨询
  - after_sales: 售后问题
  - complaint: 投诉建议
  - other: 其他
  
  用户消息:{{user_message}}
  
  只返回意图类别名称。

2. 知识库检索节点

knowledge_base: 产品FAQ
query: "{{user_message}}"
retrieval:
  top_k: 3
  score_threshold: 0.7

3. 条件分支节点

conditions:
  - if: "{{intent}} == 'pre_sales'"
    then: product_retrieval
  - if: "{{intent}} == 'after_sales'"
    then: faq_retrieval
  - if: "{{intent}} == 'complaint'"
    then: create_ticket
  - else: default_response

RAG知识库进阶

文档预处理

知识库的效果很大程度取决于文档质量。做好预处理事半功倍:

1. 清洗文档内容

  • 去除页眉页脚、目录
  • 删除无关的装饰性内容
  • 统一格式和排版

2. 结构化处理

  • 使用标题层级(h1、h2、h3)
  • 使用列表和表格
  • 重要内容放在前面

3. 格式建议

# 标题要清晰
 
## 小节内容
 
正文内容,应该完整表述一个知识点。
 
### 更细的分类
 
- 要点1
- 要点2
 
| 表格 | 列1 | 列2 |
|------|------|------|
| 内容 | xxx | xxx |

分块策略

分块策略直接影响检索效果。常见策略:

策略描述适用场景
固定大小按token数分块通用场景
段落分块按段落分块结构清晰的文档
语义分块AI自动识别语义边界复杂文档
标题分块按标题层级分块层级分明的文档

分块参数建议:

chunk_size: 500          # 每个块的大小(token)
chunk_overlap: 50        # 块之间的重叠
  • chunk_size太大:丢失细粒度信息
  • chunk_size太小:丢失上下文
  • chunk_overlap:确保边界信息不丢失

检索策略优化

混合检索

混合语义检索和关键词检索,效果最好:

retrieval:
  mode: hybrid
  
  semantic:
    enabled: true
    rrf: true    # Reciprocal Rank Fusion
  
  keyword:
    enabled: true
    rrf: true

Rerank重排序

初筛后再用rerank模型重排序,提升精度:

retrieval:
  rerank:
    enabled: true
    model: "BAAI/bge-reranker-base"
    top_k: 20    # 初筛数量
    rank_top_k: 5 # 最终返回数量

多知识库路由

复杂场景可能需要多个知识库。设计路由策略:

# 路由Prompt示例
prompt: |
  用户问题:{{query}}
  
  请判断应该使用哪个知识库:
  - 产品知识库:产品功能、规格、使用方法
  - 政策知识库:售后政策、退换货政策
  - 常见问题:FAQ问答
  
  只返回知识库名称。

Agent开发进阶

Agent vs 普通助手

维度普通助手Agent
交互方式问答任务执行
工具使用可调用多个工具
执行模式单轮响应多轮推理
适用场景简单问答复杂任务

ReAct Agent

ReAct = Reasoning + Acting(推理+行动)。适合需要复杂推理的场景。

工作原理:

  1. 推理:根据当前状态和目标,决定下一步
  2. 行动:执行某个动作(调用工具)
  3. 观察:获取行动结果
  4. 循环:继续推理→行动→观察,直到完成任务

配置示例:

agent:
  type: ReAct
  model: gpt-4o
  
  tools:
    - search_knowledge_base
    - calculator
    - web_search
  
  prompt: |
    你是一个智能助手,可以调用各种工具完成任务。
    
    当你需要完成一个任务时:
    1. 分析任务要求
    2. 决定是否需要调用工具
    3. 如果需要,选择合适的工具
    4. 根据工具结果决定下一步
    
    记住:
    - 每次只调用一个工具
    - 工具调用格式:{tool: "工具名", input: {参数}}

Function Calling Agent

适合工具丰富的场景,模型直接决定调用哪个工具。

配置示例:

agent:
  type: function_calling
  model: gpt-4o
  
  tools:
    - name: get_weather
      description: 获取城市天气
      parameters:
        city: {type: string, required: true}
    
    - name: send_email
      description: 发送邮件
      parameters:
        to: {type: string, required: true}
        subject: {type: string, required: true}
        body: {type: string, required: true}

API部署与调用

发布为API

在应用页面点击”发布”,然后选择”发布为API”。

发布后会获得:

  • API地址
  • API Key
  • 接口文档

调用示例

同步对话(等待完整响应):

curl -X POST 'http://localhost/v1/chat-messages' \
  -H 'Authorization: Bearer app-xxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "你好,请介绍一下你们的产品",
    "response_mode": "blocking",
    "user": "user_123"
  }'

流式对话(实时返回):

curl -X POST 'http://localhost/v1/chat-messages' \
  -H 'Authorization: Bearer app-xxxxxx' \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/event-stream' \
  -d '{
    "query": "你好",
    "response_mode": "streaming",
    "user": "user_123"
  }'

Python SDK调用:

from dify import DifyClient
 
client = DifyClient(api_key="app-xxxxxx")
 
# 同步对话
response = client.chat_message(
    query="你好",
    user="user_123",
    response_mode="blocking"
)
print(response["answer"])
 
# 流式对话
for chunk in client.chat_message_stream(
    query="你好",
    user="user_123"
):
    print(chunk["answer"], end="", flush=True)

生产环境优化

性能优化

1. 启用向量缓存

# .env文件
ENABLE_VECTOR_CACHE=True

2. 启用模型响应缓存 减少重复调用的开销。

3. 使用异步处理 非实时场景用异步模式。

4. 数据库索引优化 定期维护索引:

-- 分析查询计划
EXPLAIN ANALYZE SELECT * FROM documents WHERE similar('%query%');
 
-- 重建索引
REINDEX INDEX idx_documents_embedding;

安全配置

1. 启用API Key认证

# .env文件
CONSOLE_WEB_URL=http://localhost
APP_WEB_URL=http://localhost
CONSOLE_API_URL=http://localhost:5000

2. 配置CORS

CONSOLE_CORS_ALLOW_ORIGINS=http://localhost:3000
APP_CORS_ALLOW_ORIGINS=http://localhost:3000

3. 限流配置

RATE_LIMIT_ENABLED=True
RATE_LIMIT_PER_MINUTE=60

监控与日志

Dify内置了日志和监控功能:

日志查看:

  • 应用日志:每个对话的输入输出、token消耗
  • 系统日志:API访问、错误记录

监控指标:

  • 调用量趋势
  • 响应时间分布
  • Token消耗统计

与竞品对比

Dify vs Coze

维度DifyCoze
部署方式支持私有化仅云端
开源完全开源部分开源
模型支持多模型混合主要字节系
工作流功能完善更图形化
目标用户企业开发者业务人员
学习曲线中等

选择建议:

  • 需要私有化 → Dify
  • 追求快速上手 → Coze

Dify vs LangFlow

维度DifyLangFlow
架构理念应用导向数据流导向
界面风格Web应用画布节点
工作流预定义节点自由组合
学习难度中等较高
生产可用一般

选择建议:

  • 快速出产品 → Dify
  • 实验研究 → LangFlow

总结

Dify是一款功能强大的开源AI应用开发平台,适合:

  • 想快速构建AI应用的开发者
  • 需要私有化部署的企业
  • 需要RAG知识库场景的项目
  • 需要复杂工作流的项目

核心优势:

  • 开源可控,功能完整
  • DAG工作流,能力强大
  • 原生RAG,知识库友好
  • API优先,集成方便

学习建议:

  1. 先用Docker快速部署体验
  2. 从”助手”类型开始,熟悉界面
  3. 尝试创建知识库,上传文档
  4. 学习工作流编排
  5. 进阶Agent开发

相关文档


本文档由归愚知识系统生成 last updated: 2026-04-24