Dify介绍

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。

为什么使用 Dify?

你或许可以把 LangChain 这类的开发库(Library)想象为有着锤子、钉子的工具箱。与之相比,Dify 提供了更接近生产需要的完整方案,Dify 好比是一套脚手架,并且经过了精良的工程设计和软件测试。

重要的是,Dify 是开源的,它由一个专业的全职团队和社区共同打造。你可以基于任何模型自部署类似 Assistants API 和 GPTs 的能力,在灵活和安全的基础上,同时保持对数据的完全控制。

我们的社区用户对 Dify 的产品评价可以归结为简单、克制、迭代迅速。 ——路宇,Dify.AI CEO

希望以上信息和这份指南可以帮助你了解这款产品,我们相信 Dify 是为你而做的(Do It For You)。

Dify 能做什么?

Dify 一词源自 Define + Modify,意指定义并且持续的改进你的 AI 应用,它是为你而做的(Do it for you)。

1)创业,快速的将你的 AI 应用创意变成现实,无论成功和失败都需要加速。在真实世界,已经有几十个团队通过 Dify 构建 MVP(最小可用产品)获得投资,或通过 POC(概念验证)赢得了客户的订单。

2)将 LLM 集成至已有业务,通过引入 LLM 增强现有应用的能力,接入 Dify 的 RESTful API 从而实现 Prompt 与业务代码的解耦,在 Dify 的管理界面是跟踪数据、成本和用量,持续改进应用效果。

3)作为企业级 LLM 基础设施,一些银行和大型互联网公司正在将 Dify 部署为企业内的 LLM 网关,加速 GenAI 技术在企业内的推广,并实现中心化的监管。

4)探索 LLM 的能力边界,即使你是一个技术爱好者,通过 Dify 也可以轻松的实践 Prompt 工程和 Agent 技术,在 GPTs 推出以前就已经有超过 60,000 开发者在 Dify 上创建了自己的第一个应用。

特性与技术规格

对于已经熟悉 LLM 应用技术栈的技术人士来说,这份文档将是你了解 Dify 独特优势的捷径。让你能够明智地比较和选择,甚至向同事和朋友推荐。

在 Dify,我们采用透明化的产品特性和技术规格政策,确保你在全面了解我们产品的基础上做出决策。这种透明度不仅有利于你的技术选型,也促进了社区成员对产品的深入理解和积极贡献。

项目基础信息

项目设立:2023 年 3 月

开源协议:

基于 Apache License 2.0 有限商业许可

官方研发团队:超过 15 名全职员工

社区贡献者:

超过 290 人 (截止 2024 Q2)

后端技术:Python/Flask/PostgreSQL

前端技术:Next.js

代码行数:超过 13 万行

发版周期:平均每周一次

技术特性

1)LLM 推理引擎

Dify Runtime ( 自 v0.4 起移除了 LangChain)

2)商业模型支持

10+ 家,包括 OpenAI 与 Anthropic,新的主流模型通常在 48 小时内完成接入

3)MaaS 供应商支持

7 家,Hugging Face,Replicate,AWS Bedrock,NVIDIA,GroqCloud,together.ai,OpenRouter

4)本地模型推理 Runtime 支持

6 ,Xoribits(推荐),OpenLLM,LocalAI,ChatGLM,Ollama,NVIDIA TIS

5)OpenAI 接口标准模型接入支持

∞ 家

6)多模态技术

ASR 模型、GPT-4o 规格的富文本模型

7)预置应用类型

对话型应用、文本生成应用、Agent 工作流

8)Prompt 即服务编排

广受好评的可视化的 Prompt 编排界面,在同一个界面中修改 Prompt 并预览效果

编排模式

  • 简易模式编排

  • Assistant 模式编排

  • Flow 模式编排

Prompt 变量类型

  • 字符串

  • 单选枚举

  • 外部 API

  • 文件(Q3 即将推出)

9)Agentic Workflow 特性

行业领先的可视化流程编排界面,所见即所得的节点调试,可插拔的 DSL,原生的代码运行时,构建更复杂、可靠、稳定的 LLM 应用。

支持节点

  • LLM

  • 知识库检索

  • 问题分类

  • 条件分支

  • 代码执行

  • 模板转换

  • HTTP 请求

  • 工具

10)RAG 特性

首创的可视化的知识库管理界面,支持分段预览和召回效果测试。

索引方式

  • 关键词

  • 文本向量

  • 由 LLM 辅助的问题-分段模式

检索方式

  • 关键词

  • 文本相似度匹配

  • 混合检索

  • N 选 1 模式(即将下线)

  • 多路召回

召回优化技术

  • 使用 ReRank 模型

11)ETL 技术

支持对 TXT、Markdown、PDF、HTML、DOC、CSV 等格式文件进行自动清洗,内置的 Unstructured 服务开启后可获得最大化支持。

支持同步来自 Notion 的文档为知识库。

支持同步网页为知识库。

12)向量数据库支持:

Qdrant(推荐),Weaviate,Zilliz/Milvus,Pgvector,Pgvector-rs,Chroma,OpenSearch,TiDB,Tencent Vector,Oracle,Relyt,Analyticdb, Couchbase, OceanBase, Tablestore, Lindorm

13)Agent 技术

ReAct,Function Call

工具支持

  • 可调用 OpenAI Plugin 标准的工具

  • 可直接加载 OpenAPI Specification 的 API 作为工具

内置工具

  • 40+ 款(截止 2024 Q2)

14)日志

支持,可基于日志进行标注

15)标注回复

基于经人类标注的 Q&A 对,可用于相似度对比回复 可导出为供模型微调环节使用的数据格式

16)内容审查机制

OpenAI Moderation 或外部 API

17)团队协同

工作空间与多成员管理支持

18)API 规格

RESTful,已覆盖大部分功能

19)部署方式

Docker,Helm

模型供应商列表

Dify 为以下模型提供商提供原生支持:

社区版

Dify 社区版即开源版本,你可以通过以下两种方式之一部署 Dify 社区版:

在 GitHub 上查看 Dify 社区版

Docker Compose 部署

前提条件

安装 Dify 之前, 请确保你的机器已满足最低安装要求:

  • CPU >= 2 Core

  • RAM >= 4 GiB

操作系统软件描述
macOS 10.14 or laterDocker Desktop

为 Docker 虚拟机(VM)至少分配 2 个虚拟 CPU(vCPU) 和 8GB 初始内存,否则安装可能会失败。有关更多信息,请参考 《在 Mac 内安装 Docker 桌面端》

Linux platformsDocker 19.03 or later Docker Compose 1.28 or later

请参阅安装 Docker安装 Docker Compose 以获取更多信息。

Windows with WSL 2 enabledDocker Desktop

我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。有关更多信息,请参阅使用 WSL 2 后端在 Windows 上安装 Docker Desktop

克隆 Dify 代码仓库

克隆 Dify 源代码至本地环境。

# 假设当前最新版本为 0.15.3
git clone https://github.com/langgenius/dify.git --branch 0.15.3

启动 Dify

进入 Dify 源代码的 Docker 目录

cd dify/docker

复制环境配置文件

cp .env.example .env

启动 Docker 容器

根据你系统上的 Docker Compose 版本,选择合适的命令来启动容器。你可以通过 $ docker compose version 命令检查版本,详细说明请参考 Docker 官方文档

docker compose up -d
docker-compose up -d
  • 如果版本是 Docker Compose V2,使用以下命令:

  • 如果版本是 Docker Compose V1,使用以下命令:

运行命令后,你应该会看到类似以下的输出,显示所有容器的状态和端口映射:

[+] Running 11/11
 ✔ Network docker_ssrf_proxy_network  Created                                                                 0.1s 
 ✔ Network docker_default             Created                                                                 0.0s 
 ✔ Container docker-redis-1           Started                                                                 2.4s 
 ✔ Container docker-ssrf_proxy-1      Started                                                                 2.8s 
 ✔ Container docker-sandbox-1         Started                                                                 2.7s 
 ✔ Container docker-web-1             Started                                                                 2.7s 
 ✔ Container docker-weaviate-1        Started                                                                 2.4s 
 ✔ Container docker-db-1              Started                                                                 2.7s 
 ✔ Container docker-api-1             Started                                                                 6.5s 
 ✔ Container docker-worker-1          Started                                                                 6.4s 
 ✔ Container docker-nginx-1           Started                                                                 7.1s

最后检查是否所有容器都正常运行:

docker compose ps

在这个输出中,你应该可以看到包括 3 个业务服务 api / worker / web,以及 6 个基础组件 weaviate / db / redis / nginx / ssrf_proxy / sandbox

NAME                  IMAGE                              COMMAND                   SERVICE      CREATED              STATUS                        PORTS
docker-api-1          langgenius/dify-api:0.6.13         "/bin/bash /entrypoi…"   api          About a minute ago   Up About a minute             5001/tcp
docker-db-1           postgres:15-alpine                 "docker-entrypoint.s…"   db           About a minute ago   Up About a minute (healthy)   5432/tcp
docker-nginx-1        nginx:latest                       "sh -c 'cp /docker-e…"   nginx        About a minute ago   Up About a minute             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
docker-redis-1        redis:6-alpine                     "docker-entrypoint.s…"   redis        About a minute ago   Up About a minute (healthy)   6379/tcp
docker-sandbox-1      langgenius/dify-sandbox:0.2.1      "/main"                   sandbox      About a minute ago   Up About a minute             
docker-ssrf_proxy-1   ubuntu/squid:latest                "sh -c 'cp /docker-e…"   ssrf_proxy   About a minute ago   Up About a minute             3128/tcp
docker-weaviate-1     semitechnologies/weaviate:1.19.0   "/bin/weaviate --hos…"   weaviate     About a minute ago   Up About a minute             
docker-web-1          langgenius/dify-web:0.6.13         "/bin/sh ./entrypoin…"   web          About a minute ago   Up About a minute             3000/tcp
docker-worker-1       langgenius/dify-api:0.6.13         "/bin/bash /entrypoi…"   worker       About a minute ago   Up About a minute             5001/tcp

通过这些步骤,你可以在本地成功安装 Dify。

更新 Dify

进入 dify 源代码的 docker 目录,按顺序执行以下命令:

cd dify/docker
docker compose down
git pull origin main
docker compose pull
docker compose up -d

同步环境变量配置 (重要!)

  • 如果 .env.example 文件有更新,请务必同步修改你本地的 .env 文件。

  • 检查 .env 文件中的所有配置项,确保它们与你的实际运行环境相匹配。你可能需要将 .env.example 中的新变量添加到 .env 文件中,并更新已更改的任何值。

访问 Dify

你可以先前往管理员初始化页面设置设置管理员账户:

# 本地环境
http://localhost/install

# 服务器环境
http://your_server_ip/install

Dify 主页面:

# 本地环境
http://localhost

# 服务器环境
http://your_server_ip

自定义配置

编辑 .env 文件中的环境变量值。然后重新启动 Dify:

docker compose down
docker compose up -d

完整的环境变量集合可以在 docker/.env.example 中找到。

更多

如果有疑问,请前往常见问题帮助。

本地源码启动

前置条件

安装 Dify 之前, 请确保你的机器已满足最低安装要求:

  • CPU >= 2 Core

  • RAM >= 4 GiB

操作系统软件描述
macOS 10.14 or laterDocker Desktop

为 Docker 虚拟机(VM)至少分配 2 个虚拟 CPU(vCPU) 和 8GB 初始内存,否则安装可能会失败。有关更多信息,请参考 《在 Mac 内安装 Docker 桌面端》

Linux platformsDocker 19.03 or later Docker Compose 1.28 or later

请参阅安装 Docker安装 Docker Compose 以获取更多信息。

Windows with WSL 2 enabledDocker Desktop

我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。有关更多信息,请参阅使用 WSL 2 后端在 Windows 上安装 Docker Desktop

若需要使用 OpenAI TTS,需要在系统中安装 FFmpeg 才可正常使用,详情可参考:Link

Clone Dify 代码:

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

在启用业务服务之前,我们需要先部署 PostgreSQL / Redis / Weaviate(如果本地没有的话),可以通过以下命令启动:

cd docker
cp middleware.env.example middleware.env
docker compose -f docker-compose.middleware.yaml up -d

服务端部署

  • API 接口服务

  • Worker 异步队列消费服务

安装基础环境

服务器启动需要 Python 3.12。建议使用 pyenv 快速安装 Python 环境。

要安装其他 Python 版本,请使用 pyenv install

pyenv install 3.12

要切换到 "3.12" Python 环境,请使用以下命令:

pyenv global 3.12

启动步骤

进入 api 目录

cd api

macOS 系统可以通过 brew install libmagic 命令安装 libmagic.

复制环境变量配置文件

cp .env.example .env

生成随机密钥,并替换 .envSECRET_KEY 的值

awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env

安装依赖包

Dify API 服务使用 Poetry 来管理依赖。

poetry env use 3.12
poetry install

执行数据库迁移

将数据库结构迁移至最新版本。

poetry run flask db upgrade

启动 API 服务

poetry run flask run --host 0.0.0.0 --port=5001 --debug

正确输出:

* Debug mode: on
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5001
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with stat
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 695-801-919

启动 Worker 服务

用于消费异步队列任务,如知识库文件导入、更新知识库文档等异步操作。 Linux / MacOS 启动:

poetry run celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail,ops_trace --loglevel INFO

如果使用 Windows 系统启动,请替换为该命令:

poetry run celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO

正确输出:

 -------------- celery@TAKATOST.lan v5.2.7 (dawn-chorus)
--- ***** ----- 
-- ******* ---- macOS-10.16-x86_64-i386-64bit 2023-07-31 12:58:08
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         app:0x7fb568572a10
- ** ---------- .> transport:   redis://:**@localhost:6379/1
- ** ---------- .> results:     postgresql://postgres:**@localhost:5432/dify
- *** --- * --- .> concurrency: 1 (gevent)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> dataset          exchange=dataset(direct) key=dataset
                .> generation       exchange=generation(direct) key=generation
                .> mail             exchange=mail(direct) key=mail

[tasks]
  . tasks.add_document_to_index_task.add_document_to_index_task
  . tasks.clean_dataset_task.clean_dataset_task
  . tasks.clean_document_task.clean_document_task
  . tasks.clean_notion_document_task.clean_notion_document_task
  . tasks.create_segment_to_index_task.create_segment_to_index_task
  . tasks.deal_dataset_vector_index_task.deal_dataset_vector_index_task
  . tasks.document_indexing_sync_task.document_indexing_sync_task
  . tasks.document_indexing_task.document_indexing_task
  . tasks.document_indexing_update_task.document_indexing_update_task
  . tasks.enable_segment_to_index_task.enable_segment_to_index_task
  . tasks.generate_conversation_summary_task.generate_conversation_summary_task
  . tasks.mail_invite_member_task.send_invite_member_mail_task
  . tasks.remove_document_from_index_task.remove_document_from_index_task
  . tasks.remove_segment_from_index_task.remove_segment_from_index_task
  . tasks.update_segment_index_task.update_segment_index_task
  . tasks.update_segment_keyword_index_task.update_segment_keyword_index_task

[2023-07-31 12:58:08,831: INFO/MainProcess] Connected to redis://:**@localhost:6379/1
[2023-07-31 12:58:08,840: INFO/MainProcess] mingle: searching for neighbors
[2023-07-31 12:58:09,873: INFO/MainProcess] mingle: all alone
[2023-07-31 12:58:09,886: INFO/MainProcess] pidbox: Connected to redis://:**@localhost:6379/1.
[2023-07-31 12:58:09,890: INFO/MainProcess] celery@TAKATOST.lan ready.

前端页面部署

Web 前端客户端页面服务

安装基础环境

Web 前端服务启动需要用到 Node.js v18.x (LTS)NPM 版本 8.x.x Yarn

  • 安装 NodeJS + NPM

进入 https://nodejs.org/en/download,选择对应操作系统的 v18.x 以上的安装包下载并安装,建议 stable 版本,已自带 NPM。

启动步骤

进入 web 目录

cd web

安装依赖包

npm i -g pnpm
pnpm install

配置环境变量。在当前目录下创建文件 .env.local,并复制.env.example中的内容。根据需求修改这些环境变量的值:

# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api

# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_SENTRY_ORG=
NEXT_PUBLIC_SENTRY_PROJECT=

构建代码

npm run build

启动 web 服务

npm run start
# or
yarn start
# or
pnpm start

正常启动后,终端会输出如下信息:

ready - started server on 0.0.0.0:3000, url: http://localhost:3000
warn  - You have enabled experimental feature (appDir) in next.config.js.
warn  - Experimental features are not covered by semver, and may cause unexpected or broken application behavior. Use at your own risk.
info  - Thank you for testing `appDir` please leave your feedback at https://nextjs.link/app-feedback

访问 Dify

最后,访问 http://127.0.0.1:3000 即可使用本地部署的 Dify。

单独启动前端 Docker 容器

当单独开发后端时,可能只需要源码启动后端服务,而不需要本地构建前端代码并启动,因此可以直接通过拉取 docker 镜像并启动容器的方式来启动前端服务,以下为具体步骤:

直接使用 DockerHub 镜像

docker run -it -p 3000:3000 -e CONSOLE_API_URL=http://127.0.0.1:5001 -e APP_API_URL=http://127.0.0.1:5001 langgenius/dify-web:latest

源码构建 Docker 镜像

构建前端镜像

cd web && docker build . -t dify-web

启动前端镜像

docker run -it -p 3000:3000 -e CONSOLE_API_URL=http://127.0.0.1:5001 -e APP_API_URL=http://127.0.0.1:5001 dify-web

当控制台域名和 Web APP 域名不一致时,可单独设置 CONSOLE_URLAPP_URL

本地访问 http://127.0.0.1:3000

环境变量说明

本文档可能未及时更新,请优先参考最新的配置文件:

公共变量

CONSOLE_API_URL

控制台 API 后端 URL,用于拼接授权回调,传空则为同域。范例:https://api.console.dify.ai

CONSOLE_WEB_URL

控制台 web 前端 URL,用于拼接部分前端地址,以及 CORS 配置使用,传空则为同域。范例:https://console.dify.ai

SERVICE_API_URL

Service API URL,用于 前端 展示 Service API Base URL,传空则为同域。范例:https://api.dify.ai

APP_API_URL

WebApp API 后端 URL,用于声明 前端 API 后端地址,传空则为同域。范例:https://app.dify.ai

APP_WEB_URL

WebApp URL,用于预览文件、前端 展示下载用的 URL,以及作为多模型输入接口,传空则为同域。范例:https://udify.app/

FILES_URL

文件预览或下载 URL 前缀,用于将文件预览或下载 URL 给前端展示或作为多模态模型输入; 为了防止他人伪造,图片预览 URL 是带有签名的,并且有 5 分钟过期时间。

服务端

MODE

启动模式,仅使用 Docker 启动时可用,源码启动无效。

  • api

    启动 API Server。

  • worker

    启动异步队列 worker。

DEBUG

调试模式,默认 false,建议本地开发打开该配置,可防止 monkey patch 导致的一些问题出现。

FLASK_DEBUG

Flask 调试模式,开启可在接口输出 trace 信息,方便调试。

SECRET_KEY

一个用于安全地签名会话 cookie 并在数据库上加密敏感信息的密钥。初次启动需要设置该变量。可以运行 openssl rand -base64 42 生成一个强密钥。

DEPLOY_ENV

部署环境。

  • PRODUCTION(默认)

    生产环境。

  • TESTING

    测试环境,前端页面会有明显颜色标识,该环境为测试环境。

LOG_LEVEL

日志输出等级,默认为 INFO。生产建议设置为 ERROR。

MIGRATION_ENABLED

当设置为 true 时,会在容器启动时自动执行数据库迁移,仅使用 Docker 启动时可用,源码启动无效。源码启动需要在 api 目录手动执行 flask db upgrade

CHECK_UPDATE_URL

是否开启检查版本策略,若设置为 false,则不调用 https://updates.dify.ai 进行版本检查。由于目前国内无法直接访问基于 CloudFlare Worker 的版本接口,设置该变量为空,可以屏蔽该接口调用。

TEXT_GENERATION_TIMEOUT_MS

默认 60000,单位为 ms,用于指定文本生成和工作流的超时时间,防止因某些进程运行超时而导致整体服务不可用。

CSP_WHITELIST

内容安全策略(CSP)白名单,默认不开启。在此变量中填写被放行的域名列表后即视为开启,有助于减少潜在的 XSS 攻击。开启后,白名单将自动包含以下域名:

*.sentry.io http://localhost:* http://127.0.0.1:* https://analytics.google.com https://googletagmanager.com https://api.github.com

容器启动相关配置

仅在使用 Docker 镜像或者 Docker-compose 启动时有效。

  • DIFY_BIND_ADDRESS

    API 服务绑定地址,默认:0.0.0.0,即所有地址均可访问

  • DIFY_PORT

    API 服务绑定端口号,默认 5001。

  • SERVER_WORKER_AMOUNT

    API 服务 Server worker 数量,即 gevent worker 数量,公式:cpu 核心数 x 2 + 1 可参考:https://docs.gunicorn.org/en/stable/design.html#how-many-workers

  • SERVER_WORKER_CLASS

    默认为 gevent,若为 windows,可以切换为 sync 或 solo。

  • GUNICORN_TIMEOUT

    请求处理超时时间,默认 200,建议 360,以支持更长的 sse 连接时间

  • CELERY_WORKER_CLASS

    SERVER_WORKER_CLASS 类似,默认 gevent,若为 windows,可以切换为 sync 或 solo。

  • CELERY_WORKER_AMOUNT

    Celery worker 数量,默认为 1,按需设置。

  • HTTP_PROXY

    HTTP 代理地址,用于解决国内无法访问 OpenAI、HuggingFace 的问题。注意,若代理部署在宿主机 (例如 http://127.0.0.1:7890),此处代理地址应当和接入本地模型时一样,使用 Docker 容器内部的宿主机地址(例如 http://192.168.1.100:7890http://172.17.0.1:7890)。

  • HTTPS_PROXY

    HTTPS 代理地址,用于解决国内无法访问 OpenAI、HuggingFace 的问题。同上。

数据库配置

数据库使用 PostgreSQL,请使用 public schema。

  • DB_USERNAME:用户名

  • DB_PASSWORD:密码

  • DB_HOST:数据库 host

  • DB_PORT:数据库端口号,默认 5432

  • DB_DATABASE:数据库 database

  • SQLALCHEMY_POOL_SIZE:数据库连接池大小,默认 30 个连接数,可适当增加。

  • SQLALCHEMY_POOL_RECYCLE:数据库连接池回收时间,默认 3600 秒。

  • SQLALCHEMY_ECHO:是否打印 SQL,默认 false。

Redis 配置

该 Redis 配置用于缓存以及对话时的 pub/sub。

  • REDIS_HOST:Redis host

  • REDIS_PORT:Redis port,默认 6379

  • REDIS_DB:Redis Database,默认为 0,请和 Session Redis、Celery Broker 分开用不同 Database。

  • REDIS_USERNAME:Redis 用户名,默认为空

  • REDIS_PASSWORD:Redis 密码,默认为空,强烈建议设置密码。

  • REDIS_USE_SSL:是否使用 SSL 协议进行连接,默认 false

  • REDIS_USE_SENTINEL:使用 Redis Sentinel 连接 Redis 服务器

  • REDIS_SENTINELS:哨兵节点,格式:<sentinel1_ip>:<sentinel1_port>,<sentinel2_ip>:<sentinel2_port>,<sentinel3_ip>:<sentinel3_port>

  • REDIS_SENTINEL_SERVICE_NAME:哨兵服务名,同 Master Name

  • REDIS_SENTINEL_USERNAME:哨兵的用户名

  • REDIS_SENTINEL_PASSWORD:哨兵的密码

  • REDIS_SENTINEL_SOCKET_TIMEOUT:哨兵超时时间,默认值:0.1,单位:秒

Celery 配置

  • CELERY_BROKER_URL

    格式如下(直连模式):

    redis://<redis_username>:<redis_password>@<redis_host>:<redis_port>/<redis_database>

  范例:`redis://:difyai123456@redis:6379/1`

  哨兵模式:

  ```
    sentinel://<sentinel_username>:<sentinel_password>@<sentinel_host>:<sentinel_port>/<redis_database>
范例:`sentinel://localhost:26379/1;sentinel://localhost:26380/1;sentinel://localhost:26381/1`
  • BROKER_USE_SSL

    若设置为 true,则使用 SSL 协议进行连接,默认 false。

  • CELERY_USE_SENTINEL

    若设置为 true,则启用哨兵模式,默认 false。

  • CELERY_SENTINEL_MASTER_NAME

    哨兵的服务名,即 Master Name。

  • CELERY_SENTINEL_SOCKET_TIMEOUT

    哨兵连接超时时间,默认值:0.1,单位:秒。

CORS 配置

用于设置前端跨域访问策略。

  • CONSOLE_CORS_ALLOW_ORIGINS

    控制台 CORS 跨域策略,默认为 *,即所有域名均可访问。

  • WEB_API_CORS_ALLOW_ORIGINS

    WebAPP CORS 跨域策略,默认为 *,即所有域名均可访问。

详细配置可参考:跨域 / 身份相关指南

文件存储配置

用于存储知识库上传的文件、团队 / 租户的加密密钥等等文件。

  • STORAGE_TYPE

    存储设施类型

    • local(默认)

      本地文件存储,若选择此项则需要设置下方 STORAGE_LOCAL_PATH 配置。

    • s3

      S3 对象存储,若选择此项则需要设置下方 S3_ 开头的配置。

    • azure-blob

      Azure Blob 存储,若选择此项则需要设置下方 AZURE_BLOB_ 开头的配置。

    • aliyun-oss

      阿里云 OSS 存储,若选择此项则需要设置下方 ALIYUN_OSS_ 开头的配置。

    • huawei-obs

      Huawei OBS 存储,若选择此项则需要设置下方 HUAWEI_OBS_ 开头的配置。

    • volcengine-tos

      Volcengine TOS 存储,若选择此项则需要设置下方 VOLCENGINE_TOS_ 开头的配置。

  • STORAGE_LOCAL_PATH

    默认为 storage,即存储在当前目录的 storage 目录下。若使用 Docker 或 Docker-compose 进行部署,请务必将两个容器中 /app/api/storage 目录挂载到同一个本机目录,否则可能会出现文件找不到的报错。

  • S3_ENDPOINT:S3 端点地址

  • S3_BUCKET_NAME:S3 桶名称

  • S3_ACCESS_KEY:S3 Access Key

  • S3_SECRET_KEY:S3 Secret Key

  • S3_REGION:S3 地域信息,如:us-east-1

  • AZURE_BLOB_ACCOUNT_NAME: your-account-name 如 'difyai'

  • AZURE_BLOB_ACCOUNT_KEY: your-account-key 如 'difyai'

  • AZURE_BLOB_CONTAINER_NAME: your-container-name 如 'difyai-container'

  • AZURE_BLOB_ACCOUNT_URL: 'https://<your_account_name>.blob.core.windows.net'

  • ALIYUN_OSS_BUCKET_NAME: your-bucket-name 如 'difyai'

  • ALIYUN_OSS_ACCESS_KEY: your-access-key 如 'difyai'

  • ALIYUN_OSS_SECRET_KEY: your-secret-key 如 'difyai'

  • ALIYUN_OSS_ENDPOINT: https://oss-ap-southeast-1-internal.aliyuncs.com # 参考文档

  • ALIYUN_OSS_REGION: ap-southeast-1 # 参考文档

  • ALIYUN_OSS_AUTH_VERSION: v4

  • ALIYUN_OSS_PATH: your-path # 路径不要使用斜线 "/" 开头,阿里云 OSS 不支持。参考文档

  • HUAWEI_OBS_BUCKET_NAME: your-bucket-name 如 'difyai'

  • HUAWEI_OBS_SECRET_KEY: your-secret-key 如 'difyai'

  • HUAWEI_OBS_ACCESS_KEY: your-access-key 如 'difyai'

  • HUAWEI_OBS_SERVER: your-server-url # 参考文档

  • VOLCENGINE_TOS_BUCKET_NAME: your-bucket-name 如 'difyai'。

  • VOLCENGINE_TOS_SECRET_KEY: your-secret-key 如 'difyai'。

  • VOLCENGINE_TOS_ACCESS_KEY: your-access-key 如 'difyai'。

  • VOLCENGINE_TOS_REGION: your-region 如 'cn-guangzhou' # 参考文档

  • VOLCENGINE_TOS_ENDPOINT: your-endpoint 如 'tos-cn-guangzhou.volces.com' # 参考文档

向量数据库配置

  • VECTOR_STORE

    可使用的枚举类型包括:

    • weaviate

    • qdrant

    • milvus

    • zillizmilvus 一致

    • myscale

    • pinecone (暂未开放)

    • tidb_vector

    • analyticdb

    • couchbase

    • oceanbase

    • tablestore

    • lindorm

  • WEAVIATE_ENDPOINT

    Weaviate 端点地址,如:http://weaviate:8080

  • WEAVIATE_API_KEY

    连接 Weaviate 使用的 api-key 凭据。

  • WEAVIATE_BATCH_SIZE

    Weaviate 批量创建索引 Object 的数量,默认 100。可参考此文档

  • WEAVIATE_GRPC_ENABLED

    是否使用 gRPC 方式与 Weaviate 进行交互,开启后性能会大大增加,本地可能无法使用,默认为 true。

  • QDRANT_URL

    Qdrant 端点地址,如:https://your-qdrant-cluster-url.qdrant.tech/

  • QDRANT_API_KEY

    连接 Qdrant 使用的 api-key 凭据。

  • PINECONE_API_KEY

    连接 Pinecone 使用的 api-key 凭据。

  • PINECONE_ENVIRONMENT

    Pinecone 所在的额环境,如:us-east4-gcp

  • MILVUS_URI

    Milvus 的 URI 配置。例如:http://host.docker.internal:19530。对于 Zilliz Cloud,请将 URI 和 TOKEN 分别设置为 Public Endpoint 和 API Key。

  • MILVUS_TOKEN

    Milvus TOKEN 配置,默认为空。

  • MILVUS_USER

    Milvus 用户名配置,默认为空。

  • MILVUS_PASSWORD

    Milvus 密码配置,默认为空。

  • MYSCALE_HOST

    MyScale host 配置。

  • MYSCALE_PORT

    MyScale port 配置。

  • MYSCALE_USER

    MyScale 用户名配置,默认为 default

  • MYSCALE_PASSWORD

    MyScale 密码配置,默认为空。

  • MYSCALE_DATABASE

    MyScale 数据库配置,默认为 default

  • MYSCALE_FTS_PARAMS

    MyScale 全文搜索配置,如需多语言支持,请参考 MyScale 文档,默认为空(仅支持英语)。

  • TIDB_VECTOR_HOST

    TiDB Vector host 配置,如:xxx.eu-central-1.xxx.tidbcloud.com

  • TIDB_VECTOR_PORT

    TiDB Vector 端口号配置,如:4000

  • TIDB_VECTOR_USER

    TiDB Vector 用户配置,如:xxxxxx.root

  • TIDB_VECTOR_PASSWORD

    TiDB Vector 密码配置

  • TIDB_VECTOR_DATABASE

    TiDB Vector 数据库配置,如:dify

  • ANALYTICDB_KEY_ID

    用于阿里云 OpenAPI 认证的访问密钥 ID。请阅读 Analyticdb 文档 来创建你的 AccessKey。

  • ANALYTICDB_KEY_SECRET

    用于阿里云 OpenAPI 认证的访问密钥秘密。

  • ANALYTICDB_INSTANCE_ID

    你的 AnalyticDB 实例的唯一标识符,例如 gp-xxxxxx。请阅读 Analyticdb 文档 来创建你的实例。

  • ANALYTICDB_REGION_ID

    AnalyticDB 实例所在区域的标识符,例如 cn-hangzhou

  • ANALYTICDB_ACCOUNT

    用于连接 AnalyticDB 实例的账户名称。请阅读 Analyticdb 文档 来创建账户。

  • ANALYTICDB_PASSWORD

    用于连接 AnalyticDB 实例的账户密码。

  • ANALYTICDB_NAMESPACE

    在 AnalyticDB 实例内要操作的命名空间 (schema),例如 dify。如果此命名空间不存在,将自动创建。

  • ANALYTICDB_NAMESPACE_PASSWORD

    命名空间 (schema) 的密码。如果命名空间不存在,将使用此密码进行创建。

  • COUCHBASE_CONNECTION_STRING

    Couchbase 集群的连接 string 字符串。

  • COUCHBASE_USER

    数据库用户名。

  • COUCHBASE_PASSWORD

    数据库密码。

  • COUCHBASE_BUCKET_NAME

    Bucket 名称。

  • COUCHBASE_SCOPE_NAME

    Scope 名称。

  • OCEANBASE_VECTOR_HOST

    OceanBase Vector 数据库的 Host。

  • OCEANBASE_VECTOR_PORT

    OceanBase Vector 数据库的端口。

  • OCEANBASE_VECTOR_USER

    OceanBase Vector 数据库的用户名。

  • OCEANBASE_VECTOR_PASSWORD

    OceanBase Vector 数据库的密码。

  • OCEANBASE_VECTOR_DATABASE

    OceanBase Vector 数据库的库名。

  • OCEANBASE_CLUSTER_NAME

    OceanBase 集群名,仅用于 Docker 部署。

  • OCEANBASE_MEMORY_LIMIT

    OceanBase 内存使用上限,仅用于 Docker 部署。

  • TABLESTORE_ENDPOINT

    Tablestore 访问 Endpoint。

  • TABLESTORE_INSTANCE_NAME

    Tablestore 访问实例名。

  • TABLESTORE_ACCESS_KEY_ID

    Tablestore 访问 ID。

  • TABLESTORE_ACCESS_KEY_SECRET

    Tablestore 访问密钥。

  • LINDORM_URL

    LINDORM 搜索引擎地址,可从控制台 获得。

  • LINDORM_USERNAME

    LINDORM 用户名

  • LINDORM_PASSWORD

    LINDORM 访问密码

知识库配置

  • UPLOAD_FILE_SIZE_LIMIT

    上传文件大小限制,默认 15M

  • UPLOAD_FILE_BATCH_LIMIT

    每次上传文件数上限,默认 5 个。

  • ETL_TYPE

    可使用的枚举类型包括:

    • dify

      Dify 自研文件 Extract 方案

    • Unstructured

      Unstructured.io 文件 Extract 方案

  • UNSTRUCTURED_API_URL

    Unstructured API 路径,当 ETL_TYPE 为 Unstructured 需要配置。

    如:http://unstructured:8000/general/v0/general

多模态模型配置

  • MULTIMODAL_SEND_IMAGE_FORMAT

    多模态模型输入时,发送图片的格式,默认为 base64,可选 urlurl 模式下,调用的延迟会比 base64 模式下低,一般建议使用兼容更好的 base64 模式。 若配置为 url,则需要将 FILES_URL 配置为外部可访问的地址,以便多模态模型可以访问到图片。

  • UPLOAD_IMAGE_FILE_SIZE_LIMIT

    上传图片文件大小限制,默认 10M。

Sentry 配置

用于应用监控和错误日志跟踪。

  • SENTRY_DSN

    Sentry DSN 地址,默认为空,为空时则所有监控信息均不上报 Sentry。

  • SENTRY_TRACES_SAMPLE_RATE

    Sentry events 的上报比例,若为 0.01,则为 1%。

  • SENTRY_PROFILES_SAMPLE_RATE

    Sentry profiles 的上报比例,若为 0.01,则为 1%。

Notion 集成配置

Notion 集成配置,变量可通过申请 Notion integration 获取:Your connected workspace for wiki, docs & projects | Notion

  • NOTION_CLIENT_ID

  • NOTION_CLIENT_SECRET

邮件相关配置

  • MAIL_TYPE

    • resend

      • MAIL_DEFAULT_SEND_FROM 发件人的电子邮件名称,例如:no-reply no-reply@dify.ai,非必需。

      • RESEND_API_KEY 用于 Resend 邮件提供程序的 API 密钥,可以从 API 密钥获取。

    • smtp

      • SMTP_SERVER SMTP 服务器地址

      • SMTP_PORT SMTP 服务器端口号

      • SMTP_USERNAME SMTP 用户名

      • SMTP_PASSWORD SMTP 密码

      • SMTP_USE_TLS 是否使用 TLS,默认为 false

      • MAIL_DEFAULT_SEND_FROM 发件人的电子邮件名称,例如:no-reply no-reply@dify.ai,非必需。

模型供应商 & 工具 位置配置

用于指定应用中可以使用的模型供应商和工具。你可以自定义哪些工具和模型供应商可用,以及它们在应用界面中的顺序和包含 / 排除情况。

详见可用的 工具模型供应商

  • POSITION_TOOL_PINS

    将列出的工具固定在列表顶部,确保它们在界面中置顶出现。(使用逗号分隔的值,中间不留空格。)

    示例: POSITION_TOOL_PINS=bing,google

  • POSITION_TOOL_INCLUDES

    指定要在应用中包含的工具。只有此处列出的工具才可用。如果未设置,则除非在 POSITION_TOOL_EXCLUDES 中指定,否则所有工具都会包含在内。(使用逗号分隔的值,中间不留空格。)

    示例: POSITION_TOOL_INCLUDES=bing,google

  • POSITION_TOOL_EXCLUDES

    排除在应用中显示或使用的特定工具。此处列出的工具将从可用选项中省略,除非它们被固定。(使用逗号分隔的值,中间不留空格。)

    示例: POSITION_TOOL_EXCLUDES=yahoo,wolframalpha

  • POSITION_PROVIDER_PINS

    将列出的模型供应商固定在列表顶部,确保它们在界面中置顶出现。(使用逗号分隔的值,中间不留空格。)

    示例: POSITION_PROVIDER_PINS=openai,openllm

  • POSITION_PROVIDER_INCLUDES

    指定要在应用中包含的模型供应商。只有此处列出的供应商才可用。如果未设置,则除非在 POSITION_PROVIDER_EXCLUDES 中指定,否则所有供应商都会包含在内。(使用逗号分隔的值,中间不留空格。)

    示例: POSITION_PROVIDER_INCLUDES=cohere,upstage

  • POSITION_PROVIDER_EXCLUDES

    排除在应用中显示特定模型供应商。此处列出的供应商将从可用选项中移除,除非它们被置顶。(使用逗号分隔的值,中间不留空格。)

    示例: POSITION_PROVIDER_EXCLUDES=openrouter,ollama

其他

  • INVITE_EXPIRY_HOURS:成员邀请链接有效时间(小时),默认:72。

  • HTTP_REQUEST_NODE_MAX_TEXT_SIZE:workflow 工作流中 HTTP 请求节点的最大文本大小,默认 1MB。

  • HTTP_REQUEST_NODE_MAX_BINARY_SIZE:workflow 工作流中 HTTP 请求节点的最大二进制大小,默认 10MB。

Web 前端

SENTRY_DSN

Sentry DSN 地址,默认为空,为空时则所有监控信息均不上报 Sentry。

已废弃

CONSOLE_URL

⚠️ 修改于 0.3.8,于 0.4.9 废弃,替代为:CONSOLE_API_URLCONSOLE_WEB_URL

控制台 URL,用于拼接授权回调、控制台前端地址,以及 CORS 配置使用,传空则为同域。范例:https://console.dify.ai

API_URL

⚠️ 修改于 0.3.8,于 0.4.9 废弃,替代为 SERVICE_API_URL

API Url,用于给前端展示 Service API Base Url,传空则为同域。范例:https://api.dify.ai

APP_URL

⚠️ 修改于 0.3.8,于 0.4.9 废弃,替代为 APP_API_URLAPP_WEB_URL

WebApp Url,用于显示文件预览或下载 URL 到前端作为多模型输入,传空则为同域。范例:https://udify.app/

Session 配置

⚠️ 该配置从 0.3.24 版本起废弃。

仅 API 服务使用,用于验证接口身份。

  • SESSION_TYPE: Session 组件类型

    • redis(默认)

      选择此项,则需要设置下方 SESSION_REDIS_ 开头的环境变量。

    • sqlalchemy

      选择此项,则使用当前数据库连接,并使用 sessions 表进行读写 session 记录。

  • SESSION_REDIS_HOST:Redis host

  • SESSION_REDIS_PORT:Redis port,默认 6379

  • SESSION_REDIS_DB:Redis Database,默认为 0,请和 Redis、Celery Broker 分开用不同 Database。

  • SESSION_REDIS_USERNAME:Redis 用户名,默认为空

  • SESSION_REDIS_PASSWORD:Redis 密码,默认为空,强烈建议设置密码。

  • SESSION_REDIS_USE_SSL:是否使用 SSL 协议进行连接,默认 false

Cookie 策略配置

⚠️ 该配置从 0.3.24 版本起废弃。

用于设置身份校验的 Session Cookie 浏览器策略。

  • COOKIE_HTTPONLY

    Cookie HttpOnly 配置,默认为 true。

  • COOKIE_SAMESITE

    Cookie SameSite 配置,默认为 Lax。

  • COOKIE_SECURE

    Cookie Secure 配置,默认为 false。

文档分段长度配置

MAXIMUM_CHUNK_TOKEN_LENGTH

文档分段长度配置,用于控制处理长文本时的分段大小。默认值:500。最大值:4000。

较大分段

  • 可在单个分段内保留更多上下文,适合需要处理复杂或上下文相关任务的场景。

  • 分段数量减少,从而降低处理时间和存储需求。

较小分段

  • 提供更高的粒度,适合精确提取或总结文本内容。

  • 减少超出模型 token 限制的风险,更适配限制严格的模型。

配置建议

  • 较大分段:适合上下文依赖性强的任务,例如情感分析或长文档总结。

  • 较小分段:适合精细分析场景,例如关键词提取或段落级内容处理

常见问题

1. 长时间未收到密码重置邮件应如何处理?

你需要在 .env 文件内配置 Mail 参数项,详细说明请参考 《环境变量说明:邮件相关配置》

修改配置后,运行以下命令重启服务。

docker compose down
docker compose up -d

如果依然没能收到邮件,请检查邮件服务是否正常,以及邮件是否进入了垃圾邮件列表。

2. 如果 workflow 太复杂超出节点上限如何处理?

在社区版你可以在web/app/components/workflow/constants.ts 手动调整 MAX_TREE_DEPTH 单条分支深度的上限,我们的默认值是 50,在这里要提醒自部署的情况下过深的分支可能会影响性能。

3. 如何指定工作流各节点的运行时间?

你可以在 .env 文件内修改 TEXT_GENERATION_TIMEOUT_MS 变量,调整各节点的运行时间,防止因某些进程运行超时而导致整体应用服务不可用。

4. 如何重置管理员密码?

如果你通过 Docker Compose 部署,你可以运行以下 Docker Compose 命令行重置密码。

docker exec -it docker-api-1 flask reset-password

请按照提示输入邮箱地址和新密码,例如:

dify@my-pc:~/hello/dify/docker$ docker compose up -d
[+] Running 9/9
 ✔ Container docker-web-1         Started                                                              0.1s 
 ✔ Container docker-sandbox-1     Started                                                              0.1s 
 ✔ Container docker-db-1          Started                                                              0.1s 
 ✔ Container docker-redis-1       Started                                                              0.1s 
 ✔ Container docker-weaviate-1    Started                                                              0.1s 
 ✔ Container docker-ssrf_proxy-1  Started                                                              0.1s 
 ✔ Container docker-api-1         Started                                                              0.1s 
 ✔ Container docker-worker-1      Started                                                              0.1s 
 ✔ Container docker-nginx-1       Started                                                              0.1s 
dify@my-pc:~/hello/dify/docker$ docker exec -it docker-api-1 flask reset-password
None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.
sagemaker.config INFO - Not applying SDK defaults from location: /etc/xdg/sagemaker/config.yaml
sagemaker.config INFO - Not applying SDK defaults from location: /root/.config/sagemaker/config.yaml
Email: hello@dify.ai
New password: newpassword4567
Password confirm: newpassword4567
Password reset successfully.

5. 如何修改页面端口?

如果你使用 Docker Compose 部署,你可以通过修改 .env 配置自定义 Dify 的访问端口。

你需要修改 Nginx 相关配置:

EXPOSE_NGINX_PORT=80
EXPOSE_NGINX_SSL_PORT=443

其他相关的部署问题请参考本地部署相关

6. docker-api-1 出现数据库连接报错如何处理?

问题详情:访问 http://localhost 时提示 Internal Server Error 错误;且 docker-api-1 的日志中出现了类似错误:

FATAL:  no pg_hba.conf entry for host "172.19.0.7", user "postgres", database "dify", no encryption

解决办法:修改 db 容器下的 /var/lib/postgresql/pgdata/pg_hba.conf,将报错提示中所对应的网段添加至授权名单,例如:

docker exec -it docker-db-1 sh -c "echo 'host all all 172.19.0.0/16 trust' >> /var/lib/postgresql/data/pgdata/pg_hba.conf"
docker-compose restart

7. 如何修改知识库文件上传大小限制?

请修改 .env 文件中的 UPLOAD_FILE_SIZE_LIMIT 参数默认限制,同时还需要同步修改 NGINX_CLIENT_MAX_BODY_SIZE 参数的值以避免潜在异常。

转自:常见问题 | Dify

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值