Fork me on GitHub

分类 Dify 下的文章

使用 Dify 创建你的第一个 AI 应用

上一篇文章中,我们介绍了 Dify 这个开源 LLM 应用开发平台,并演示了两种主要的部署方式。今天,我们将进入实操阶段,学习如何使用 Dify 来构建我们的 AI 应用,Dify 提供了丰富的应用类型和强大的功能,让我们一步步来探索它的核心使用方法。

模型配置

成功部署 Dify 后,首次访问需要创建管理员账户。登录后,你会看到 Dify 的主界面,这里包含了 探索工作室知识库工具 四个核心功能模块。默认进入的是工作室模块:

apps.png

这里是应用开发的核心区域,用于创建和管理 AI 应用,包括工作流、对话流、聊天助手、Agent 和文本生成应用。而探索模块可以体验自己创建的应用,或浏览社区其他用户创建的应用,并支持复制到自己的工作区:

explore.png

知识库和工具是辅助模块,为你的应用添砖加瓦,在知识库模块你可以导入自己的文本数据,为 RAG 应用提供知识支撑,还支持通过 WebHook 实时写入或连接外部知识库:

datasets.png

在工具模块你可以自定义工具、工作流或 MCP 工具,还支持从 Dify 市场下载并安装第三方工具:

tools.png

但在使用这些功能之前,我们需要先在 Dify 中配置模型。点击右上角头像,选择 “设置” 进入设置页面,在左侧菜单中选择 “模型供应商”:

dify-model-providers.png

这里可以看到所有支持的模型供应商,包括国外的 OpenAI、Anthropic、Google Gemini,国内的智谱、DeepSeek、通义千问、月之暗面等 60 多家供应商。Dify 将模型供应商实现成一种插件,因此需要安装。以 OpenAI 为例,在列表中找到 “OpenAI” 并点击 “安装”,安装完成后,点击 “配置”:

dify-model-openai.png

输入你的 API Key 和其他必要信息并点击 “保存” 即可,我们可以为凭据取一个名字,方便后续使用。配置完成后,你就可以在创建应用时选择相应的模型了。

值得注意的是,Dify 使用 PKCS1_OAEP 加密算法安全存储 API 密钥,每个租户都有独立的密钥对,确保数据安全。

根据使用场景,Dify 将模型分为六大类:

  1. 系统推理模型:应用的核心推理引擎,用于对话生成、文本处理等
  2. Embedding 模型:将文本转换为向量表示,用于知识库检索
  3. Rerank 模型:优化检索结果排序,提升 RAG 应用效果
  4. 语音转文字模型:支持语音输入功能
  5. 文字转语音模型:支持将文本输出转换为语音
  6. Moderation 模型:支持内容审查功能

我们可以在 “系统模型设置” 中为每一类选择一个默认模型:

dify-model-system.png

应用的三种创建方式

配置好模型后,我们来创建第一个 AI 应用。Dify 提供了三种创建方式:

1. 从模板创建

初次使用 Dify 时,你可能对于应用创建比较陌生。为了帮助新手用户快速了解在 Dify 上能够构建哪些类型的应用,Dify 提供了丰富的应用模板,涵盖了智能客服、文案写作、数据分析、代码助手等不同的场景,推荐新手从这里快速上手:

apps-template.png

任意选择某个模板,并将其添加到工作区即可。

2. 创建空白应用

如果需要从零开始创建应用,可以选择这项,适用于对 Dify 有一定了解的用户:

apps-empty.png

Dify 提供了 5 种主要的应用类型,每种都适用于不同的场景:

  • 聊天助手(Chatbot):最常见的 AI 应用类型,适合构建对话式的智能助手。它支持多轮对话、上下文记忆,可以用来创建客服机器人、个人助理等;
  • 文本生成(Text Generator):这种应用专注于根据用户输入生成特定格式的文本内容,比如文章摘要、产品描述、邮件回复等。它通常是单次交互,输入提示词后直接输出结果;
  • 智能体(Agent):Dify 的高级功能之一,它可以使用工具,比如调用外部 API、执行代码、搜索网络信息、处理文件等,这使得它能够处理需要多步骤操作的复杂任务;
  • 工作流(Workflow):提供了可视化的节点编排界面,让你可以构建复杂的业务逻辑;
  • 对话流(Chatflow):结合了聊天助手和工作流的优点,在对话式交互的基础上增加了复杂的流程控制能力。

创建应用时,你需要给应用起一个名字,选择合适的图标,或者上传喜爱的图片用作图标,并使用一段清晰的文字描述此应用的用途,以便后续使用。

3. 通过 DSL 文件创建

这种方式不太常用,一般用于导入别人分享的应用,或者将应用从一个环境导入到另一个环境。DSL(Domain Specific Language) 是 Dify 定义的应用配置标准,采用 YAML 格式,文件内容包括应用的基本描述、模型参数、编排配置等信息。

已经创建好的应用可以导出成 DSL 文件,这样可以在另一个环境导入,支持本地文件导入和 URL 导入:

apps-dsl.png

导入 DSL 文件时将校对文件版本号,如果 DSL 版本号差异较大,有可能会出现兼容性问题。

创建你的第一个应用

让我们以创建一个 “翻译小能手” 为例,简单了解下应用构建的基本流程。点击 “创建空白应用”,应用类型选择 “聊天助手”,并填写基本的名称、图标和描述信息,然后进入应用的配置页面:

apps-config.png

整个配置页面可分为两大块:左侧为 编排 区域,右侧为 调试与预览 区域。在编排区域里,可以对聊天助手进行以下配置:

  • 提示词:用于对聊天助手的回复做出一系列指令和约束,提示词中可插入表单变量;
  • 变量:将以表单形式让用户在对话前填写,用户填写的表单内容将自动替换提示词中的变量;
  • 知识库:为聊天助手提供特定领域的知识背景,让其可以回答领域内的问题;
  • 视觉:开启视觉功能将允许模型输入图片,并根据图像内容的理解回答用户问题;

下面的配置项我们暂时不管,对于 “翻译小能手”,我们只需要配置提示词即可:

你是一个翻译助手,你的任务是将用户输入翻译成其他的语言,
如果用户输入是中文,翻译成英文,如果用户输入是英文,则翻译成中文。

Dify 提供了一个 “提示词生成器” 功能,可以对你的提示词进行优化,生成高质量、结构化的提示词:

prompt-generate.png

然后选择合适的大语言模型,就可以在右侧和其进行聊天了:

apps-chat-debug.png

测试通过后,点击 “发布” 按钮对应用进行发布:

apps-publish.png

至此,我们的第一个 AI 应用就开发好了,可以通过下面几种方式来访问该应用:

  • 通过助手的独立页面访问,可以将链接分享给任何人直接使用;
  • 将助手嵌入到你的网站中,通过 iframe 将其放在你的网站中的任意位置;
  • 在 “探索” 页面中访问;
  • 通过 API 调用,将助手的对话能力接入你的服务中;

高级功能配置

我们在调试聊天助手时,可以切换不同的模型,对比模型之间的效果,Dify 为此提供了一个 “多模型调试” 功能:

apps-chat-multi.png

我们可以同时和最多 4 个模型进行会话,非常方便:

apps-chat-multi-4.png

此外,Dify 还提供了一些高级功能来增强应用体验:

  • 对话开场白:设置应用的欢迎词,在对话型应用中,让 AI 主动说第一段话可以拉近与用户间的距离;同时可以预设最多 10 个常见问题供用户选择;
  • 下一步问题建议:设置下一步问题建议可以在每次回复后,根据对话内容推荐 3 条相关问题;
  • 文字转语音:开启后,回复的内容后面会多一个播放按钮,支持自动语音播放;
  • 语音转文字:开启后,对话框后面会多一个录音按钮,支持语音输入;
  • 引用和归属:显示源文档和生成内容的归属部分;
  • 内容审查:可以调用审查 API 或者维护敏感词库来使模型更安全地输出;
  • 标注回复:启用后,将标注用户的回复,以便在用户重复提问时快速响应;

apps-config-adv.png

小结

今天的内容比较简单,主要是熟悉下 Dify 平台的基本使用流程,涵盖以下关键环节:

  • 模型配置:Dify 支持 60+ 主流模型供应商,采用插件化安装,通过 PKCS1_OAEP 加密确保 API 密钥安全。系统将模型分为六大类型,满足从推理到语音转换的全链路需求。
  • 应用创建:提供模板创建、空白创建和 DSL 导入三种方式,覆盖聊天助手、文本生成、智能体、工作流和对话流五种应用类型,适配不同复杂度的业务场景。
  • 功能特性:内置多模型调试、语音转换、内容审查等高级功能,提供从原型验证到生产部署的完整工具链。

篇幅有限,关于 Dify 的应用创建,还有很多细节没有展开,比如,模型插件是如何加载的,聊天助手的各个功能特性是如何实现的,除聊天助手之外还有另四种应用又是如何使用的,我们下期再见。


Dify 快速上手指南

随着 AI 技术的快速发展,构建大语言模型应用已经成为了许多开发者和企业的重要需求。而 Dify 作为一个开源的 LLM 应用开发平台,凭借其直观的界面和强大的功能,正在成为这个领域的佼佼者。最近,Dify 发布了 v2.0.0 beta 版本,这个版本带来了许多重要的改进和新特性,正好趁着这个契机,我们来深入了解下这个平台。

Dify 介绍

Dify 是一个开源的 LLM 应用开发平台,其核心理念是让 AI 应用开发变得更加简单和高效。它不仅提供了可视化的工作流编排,还集成了 RAG 管道、智能体能力、模型管理和可观测性等功能,让开发者能够快速从原型迁移到生产环境。

Dify 一词源自 Define + Modify,指的是定义并持续改进你的 AI 应用,它也可以当做 Do it for you 的缩写。

dify-logo.png

它的核心功能包括:

  • 全面的模型支持:无缝集成包括 OpenAI 与 Anthropic 等数十个商业模型,支持 Hugging Face、OpenRouter 等 MaaS 供应商接口以及任意 OpenAI 兼容的接口,并提供了本地模型推理 Runtime 的支持;
  • 灵活的工作流:在可视化画布上构建和测试强大的 AI 工作流,分为 Chatflow 和 Workflow 两种类型;
  • 直观的提示词编排:用于制作提示词的直观界面,比较模型性能,并为基于聊天的应用添加文本转语音等附加功能;
  • 高质量的 RAG 管道:广泛的 RAG 功能,涵盖从文档摄取到检索的所有内容,支持从 PDF、PPT 和其他常见文档格式中提取文本;
  • 稳健的智能体框架:可以基于 LLM 的 Function Calling 或 ReAct 定义智能体,并为智能体添加自定义工具;
  • 丰富的工具系统:Dify 提供了 50 多个内置工具,如 Google Search、WolframAlpha 等;并支持轻松导入自定义的 API 工具或 MCP 工具;
  • 强大的插件生态:支持模型、工具、Agent 策略、扩展等插件类型,开发者可以根据需要方便的扩展 Dify 的功能;
  • LLMOps:随时间监控和分析应用日志和性能,你可以基于生产数据和注释持续改进提示词、数据集和模型;
  • 后端即服务:Dify 的所有功能都提供相应的 API,因此你可以轻松地将 Dify 集成到你自己的业务逻辑中;

本地部署准备工作

Dify 提供了多种部署方式,最简单的方式是使用 Docker Compose。在开始之前,请确保你的机器满足以下最低系统要求:

  • CPU >= 2 Core
  • RAM >= 4 GiB

首先,我们需要克隆 Dify 的源代码:

$ LATEST_TAG=$(curl -s https://api.github.com/repos/langgenius/dify/releases/latest | jq -r .tag_name)
$ git clone --branch "$LATEST_TAG" https://github.com/langgenius/dify.git

上面的命令会自动获取最新的稳定版本并克隆到本地,我在写这篇文章时最新版本是 v1.8.1。

然后进入 docker 目录:

$ cd dify/docker

这个目录包含了 Dify 部署所需的所有配置文件,其中 docker-compose.yml 文件定义了 Dify 的完整架构,包括以下核心组件:

  • api - Dify API 服务
  • worker - Celery 后台任务处理器
  • worker_beat - Celery 定时任务调度器
  • web - 前端 Web 应用
  • db - PostgreSQL 主数据库
  • redis - Redis 缓存和消息队列
  • sandbox - Dify 代码执行沙盒
  • plugin_daemon - 插件守护进程
  • ssrf_proxy - SSRF 代理 (Squid)
  • nginx - 反向代理和负载均衡器
  • weaviate - Weaviate 向量数据库

这个文件还内置了大量的其他向量数据库组件配置,可以通过不同的 Profile 来切换:

  • qdrant - Qdrant 向量数据库
  • pgvector - pgvector 扩展的 PostgreSQL
  • pgvecto-rs - pgvecto-rs 向量数据库
  • chroma - Chroma 向量数据库
  • milvus - 包括 etcd、minio、milvus 三个组件

    • etcd - Milvus 的 etcd 配置存储
    • minio - Milvus 的 MinIO 对象存储
    • milvus-standalone - Milvus 向量数据库
  • opensearch - 包括 opensearch 和 dashboards 两个组件

    • opensearch - OpenSearch 向量数据库
    • opensearch-dashboards - OpenSearch 仪表板
  • elasticsearch - 包括 elasticsearch 和 kibana 两个组件

    • elasticsearch - Elasticsearch 向量数据库
    • kibana - Kibana 可视化界面

还有不少比较小众的向量数据库,比如 Couchbase、Vastbase、OceanBase、Oracle、OpenGauss、MyScale、Matrixone 等等。除了向量数据库,文件中还有另外两个额外的组件,用户可以择需使用:

  • certbot - SSL 证书自动管理
  • unstructured - 非结构化文档处理

接下来,复制环境配置文件:

$ cp .env.example .env

这个 .env 文件包含了 Dify 运行所需的所有环境变量,包括数据库连接信息、加密密钥、模型配置等。默认配置已经可以正常运行,我们暂时不用改。

Docker Compose 本地部署

然后使用 Docker Compose 启动所有核心服务:

$ docker compose up -d

或者指定特定的 Profile 启动:

$ docker compose --profile qdrant up -d

这个命令会下载所有必要的镜像并启动服务,首次运行可能需要一些时间,因为需要下载各种 Docker 镜像。等待所有容器启动完毕后,如果一切正常,各服务状态如下所示:

docker-status.png

这些服务之间的依赖关系如下图所示:

docker-compose.png

源码安装

除了使用 Dify 官方构建好的 Docker 镜像启动服务之外,我们也可以直接通过源码来启动,不过还是需要 Docker Compose 来安装中间件:

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

启动成功后各服务状态如下:

docker-status-middleware.png

相比于之前的 Docker Compose 部署,这里少了 nginxwebapiworkerworker-beat 这 5 个服务,因此需要通过源码启动,包括两个后端服务和一个前端服务:

  • API 服务:为前端服务和 API 访问提供 API 请求服务
  • Worker 服务:为数据集处理、工作区、清理等异步任务提供服务
  • Web 服务:启动用于前端页面的 Web 服务

后端服务需要 Python 3.12 版本,可以使用 uv 来创建 Python 虚拟环境:

$ uv venv --python 3.12

前端服务需要 Node.js v22 (LTS) 和 PNPM v10 版本,安装方法参考官方文档:

启动 API 服务

我们首先进入 api 目录:

$ cd api

复制环境变量文件:

$ cp .env.example .env

然后使用 openssl 命令生成一个随机密钥:

$ openssl rand -base64 42

该命令的意思是生成 42 字节的随机数据并用 Base64 进行编码。

将该值替换 .env 文件中的 SECRET_KEY 值:

SECRET_KEY=xxx

也可以使用下面的 awk 命令一句话搞定:

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

这里的 awk -v key="$(...)" 表示将生成的密钥存储在 key 这个变量中,/^SECRET_KEY=/ 表示匹配以 SECRET_KEY= 开头的行,{sub(/=.*/, "=" key)} 表示将等号后的所有内容替换为新密钥,后面的 1 是 awk 的默认动作,表示打印所有行,然后将输出重定向到临时文件 temp_env,最后成功后再将临时文件重命名为原文件。注意这里不能直接输出到原文件,会导致原文件被清空!

然后运行 uv 命令安装所需依赖:

$ uv sync

在启动前,我们还需要初始化数据库:

$ uv run flask db upgrade

这个命令会按顺序执行 migrations/versions/ 目录下的迁移脚本,更新数据库结构,包括创建或修改表、列、索引等。

最后启动 API 服务:

$ uv run flask run --host 0.0.0.0 --port=5001 --debug

启动 Worker 服务

如果要从队列中消费异步任务,我们还需要启动 Worker 服务:

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

Celery 是一个基于 Python 的 分布式任务队列(Distributed Task Queue),主要用于处理异步任务和定时任务。它可以让你把一些耗时的操作(比如发送邮件、处理图片、数据分析等)放到后台去执行,而不会阻塞主程序的运行。Celery 通过 消息中间件(Broker) 来传递任务,常用的有 Redis、RabbitMQ、Amazon SQS 等。

这里的 -Q dataset,generation,mail,ops_trace 表示监听的队列:

  • dataset: 数据集相关任务(数据处理、索引等)
  • generation: 内容生成任务(大模型调用等)
  • mail: 邮件发送任务
  • ops_trace: 操作追踪任务

启动 Web 服务

后端服务启动好之后,我们最后再来启动前端 Web 服务。首先进入 web 目录:

$ cd web

安装依赖:

$ pnpm install --frozen-lockfile

再准备环境变量文件:

$ cp .env.example .env.local

构建 Web 服务:

$ pnpm build

启动 Web 服务:

$ pnpm start

成功启动后,在浏览器中访问 http://localhost:3000/install 设置管理员账户:

dify-install.png

设置管理员账户后,你就可以访问 http://localhost:3000 进入 Dify 的主界面了:

dify-apps.png

小结

从今天起,我们开始学习 Dify 这个开源的 LLM 应用开发平台。今天主要介绍了它的核心功能,并演示了两种主要的部署方式:

  1. Docker Compose 部署:这是最简单快捷的方式,适合快速体验和小规模部署,只需几条命令就能启动包含所有组件的完整 Dify 环境;
  2. 源码安装:提供了更大的灵活性和控制权,适合需要深度定制或开发调试的场景,也方便我们更好地理解 Dify 的架构;

Dify v2 版本发布在即,标志着这个平台正在朝着更加成熟和功能完备的方向发展,非常值得研究。接下来,就让我带领大家一起好好探索下 Dify 的各个功能特性,从源码的角度深入剖析其实现原理。