Dify部署与使用介绍-生成式 AI 应用创新引擎
1. Dify概述
1.1 简介
官方网址:https://dify.ai/zh
官方对于Dify的介绍:开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用。
比 LangChain 更易用。Dify融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
[ 介绍解读 ]
LLM 应用开发平台
定义与优势:指基于开源模式开发和运营的大型语言模型(LLM)应用开发平台,如Dify等。其开源特性使得开发者可以自由访问平台的代码,根据自身需求进行修改、扩展和优化,具有高度的灵活性和可定制性
应用场景:适用于各种需要利用LLM构建应用的场景,如智能客服、内容创作助手、数据分析工具等,能够满足不同行业和领域的特定需求
agent 构建
- Agent在LLM应用中扮演着重要角色,它能够根据预设的目标和规则,自主地调用各种工具和接口来完成复杂的任务。例如,一个用于旅游推荐的Agent可以调用天气查询、景点信息查询、酒店预订等工具,为用户提供个性化的旅游方案
AI workflow 编排
- 通过可视化的工作流编排工具,开发者可以将多个AI任务按照一定的逻辑顺序和流程进行连接和组合,形成一个完整的工作流。例如,在一个文档处理应用中,可以先进行文档的预处理(如分词、去噪等),然后进行内容分析和提取,最后生成总结或报告,整个过程都可以通过编排好的工作流自动完成
RAG 检索能力
- RAG(检索增强生成)原理:RAG是一种结合检索和生成的方法,它通过检索相关的信息来增强模型的生成能力。在LLM应用中,当用户提出一个问题或任务时,RAG系统会首先在大量的数据中检索与问题相关的上下文信息,然后将这些信息提供给模型,帮助模型生成更准确、更有针对性的回答。
- 应用场景:在需要处理大量数据和知识的应用中,如智能问答系统、文档检索与分析等,RAG检索能力能够显著提高模型的性能和效果
模型管理能力
- 模型选择与集成:支持多种LLM的接入和管理,开发者可以根据应用需求选择合适的模型,并将它们集成到平台中。例如,可以选择性能强大的DeepSeek、GPT-4模型用于需要高质量文本生成的场景,也可以选择开源的Llama模型以降低成本。
- 模型监控与优化:提供对模型运行状态的实时监控,包括模型的响应时间、准确率、资源消耗等指标。开发者可以根据这些监控数据对模型进行优化,如调整模型参数、进行模型微调等,以提高模型的性能和稳定性
生成式 AI 原生应用
- 低代码/无代码开发:为开发者提供了直观易用的界面和工具,降低了开发门槛。即使是没有丰富编程经验的人员,也可以通过简单的操作和配置,快速构建出生成式AI应用。
- 应用部署与维护:简化了应用的部署流程,支持将构建好的应用快速部署到不同的环境中,如本地服务器、云平台等。同时,还提供了一系列的维护和管理工具,方便开发者对应用进行更新、升级和故障排除
1.2 为什么使用 Dify
你或许可以把 LangChain 这类的开发库(Library)想象为有着锤子、钉子的工具箱。与之相比,Dify 提供了更接近生产需要的完整方案,Dify 好比是一套脚手架,并且经过了精良的工程设计和软件测试。
重要的是,Dify 是开源的,它由一个专业的全职团队和社区共同打造。你可以基于任何模型自部署类似 Assistants API 和 GPTs 的能力,在灵活和安全的基础上,同时保持对数据的完全控制。
在与大模型chat交互中,大模型输出一大段难以理解的英文解释,此时你希望它可以翻译为容易理解的中文版本,那么完全没必要用当前的200k版本。可是如果此时切换到普通版本,上下文会丢掉,如果继续使用200k的版本,又会觉得有点浪费。现在有很多API-WebUI可以实现自由切换定义模型的配置,但是又不够智能。如果模型可以根据问题,自由的去选择不同的模型或者是模型版本来做回答,就必须得用上模型编排。
1.3 项目架构
Dify是一个面向生成式AI应用开发的全栈式平台,旨在通过模块化设计、端到端流程支持及企业级能力,帮助用户高效构建、部署和管理智能应用。其架构围绕数据处理、服务编排、模型集成、安全运维四大核心维度展开,形成从数据输入到应用输出的闭环体系。
Dify架构图说明:
-
核心数据处理流程
-
Dataset ETL
负责数据的提取(Extract)、转换(Transform)、加载(Load),用于原始数据预处理,可能支持从多种来源(如数据库、文件等)清洗和标准化数据,为后续流程提供高质量输入。 -
Dify RAG Pipeline
基于检索增强生成(Retrieval-Augmented Generation)的流程,包含:- Retriever:从存储系统中检索相关上下文或知识;
- Indexing:构建高效索引以加速检索;
- Evaluation:对生成结果的质量和相关性进行评估优化。
-
-
存储层
-
VectorDB:存储嵌入向量,支持相似性检索(如语义搜索);
-
Relation DB:结构化数据存储(如用户信息、配置参数);
-
KG(Knowledge Graph):知识图谱存储,用于复杂关系推理。
-
- 提示词管理
- Dify Prompts IDE
提供提示词开发环境:- Playground:交互式调试提示模板;
- Endpoint:部署提示词为API服务;
- Version:管理不同版本的提示模板,支持迭代优化。
- Dify Prompts IDE
-
工作流编排与扩展
-
Orchestration Studio
可视化编排工具,协调各模块(如检索、生成、审核)的执行流程。 -
Plugins Toolbox
扩展工具箱,支持:- Workflow:自定义自动化流程;
- Community:集成社区开发的插件;
- Interface:对接外部系统(如第三方API)。
-
- 代理与逻辑控制
- Dify Agent DSL
通过领域特定语言定义代理行为:- Perception:环境感知(如用户输入解析);
- Planning:生成执行计划;
- Action:调用工具或API完成目标。
- Dify Agent DSL
-
LLM 运维(LLMOps)
-
Monitor:实时监控模型性能与异常;
-
Annotation:数据标注与结果修正;
-
Lifecycle:管理模型版本、训练、部署的全生命周期。
-
-
后端服务与安全
-
Dify BaaS Platform
提供后端即服务,包括:- API/AgentaaS:以API或代理服务形式对外输出能力。
-
Moderation System
内容审核与风控:- Filtering:敏感内容过滤;
- Risk Assessment:风险等级评估;
- Quality Control:生成结果质量检查。
-
- 模型层
- LLMs
支持多种模型来源:- Commercial LLMs(如GPT-4、Claude);
- Open Source LLMs(如Llama 2、Falcon);
- MaaS Platform:模型即服务,直接调用云端托管模型。
- LLMs
-
应用与缓存
-
App Builder
低代码/无代码界面,供用户快速构建基于Dify的生成式AI应用。 -
Cache System
优化性能与用户体验:- Logging:记录请求日志;
- Snapshot:缓存中间状态;
- Result:缓存高频查询结果。
-
-
数据流逻辑
-
输入:用户Queries & Requests通过BaaS平台接入,经审核系统过滤;
-
处理:结合Contextual Data和Prompts,由RAG Pipeline生成结果;
-
输出:Outputs & Responses经缓存系统优化后返回,同时支持应用构建器直接调用。
-
2. Dify安装部署
- 环境准备
- 服务器
- docker环境 & docker compose
项目GitHub地址:https://github.com/langgenius/dify
# 1. 下载项目(不能下载则自行浏览下载zip包进行服务器上传)
[root@ops05 ~]# git clone https://github.com/langgenius/dify.git
Cloning into 'dify'...
remote: Enumerating objects: 144441, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (28/28), done.
remote: Total 144441 (delta 12), reused 7 (delta 4), pack-reused 144409 (from 2)
Receiving objects: 100% (144441/144441), 77.11 MiB | 12.94 MiB/s, done.
Resolving deltas: 100% (106495/106495), done.
# 2.进入项目-docker目录
[root@ops05 ~]# cd dify/docker/
[root@ops05 docker]# cp .env.example .env
[root@ops05 docker]# docker compose up -d
[ 注意 ]
如果服务器是现有在用的资源,需要关注yaml文件的端口冲突问题
项目启动需要的镜像比较多,如果服务器下载镜像较慢可以考虑自行下载清单上传至服务器
[root@ops05 docker]# cat docker-compose.yaml |grep image |awk -F' ' '{print $2}' langgenius/dify-api:1.0.0 langgenius/dify-api:1.0.0 langgenius/dify-web:1.0.0 postgres:15-alpine redis:6-alpine langgenius/dify-sandbox:0.2.10 langgenius/dify-plugin-daemon:0.0.3-local ubuntu/squid:latest certbot/certbot nginx:latest semitechnologies/weaviate:1.19.0 langgenius/qdrant:v1.7.3 pgvector/pgvector:pg16 tensorchord/pgvecto-rs:pg16-v0.3.0 ghcr.io/chroma-core/chroma:0.5.20 quay.io/oceanbase/oceanbase-ce:4.3.3.0-100000142024101215 container-registry.oracle.com/database/free:latest quay.io/coreos/etcd:v3.5.5 minio/minio:RELEASE.2023-03-20T20-16-18Z milvusdb/milvus:v2.5.0-beta opensearchproject/opensearch:latest opensearchproject/opensearch-dashboards:latest myscale/myscaledb:1.6.4 docker.elastic.co/elasticsearch/elasticsearch:8.14.3 docker.elastic.co/kibana/kibana:8.14.3 downloads.unstructured.io/unstructured-io/unstructured-api:latest
镜像打包
docker sava -o
镜像加载
docker load -i
示例:
[root@ops05 tmp]# docker save -o dify-api.tar langgenius/dify-api:1.0.0 [root@ops05 tmp]# docker load -i dify-api.tar
当docker compose up -d
启动服务后,查看各容器STATUS都已经运行起来,即可进行web-访问
我这里没做端口的改动,访问直接是http://192.170.0.117
3. Dify页面使用
Dify官方文档手册: https://docs.dify.ai/zh-hans
3.1 页面概况
- 第一次访问,需要设置一个管理员用户
- 注册管理员账号后可进行登录
3.2 安装模型与配置秘钥
右上角登录名菜单 -> 设置 -> 模型供应商 -> 安装
注意:如果点击安装按钮安装失败,可以点开详情,会跳转进入到https://marketplace.dify.ai/,点击下载
然后通过插件,本地安装,把下载的包传入后进行安装
安装信息对应容器为:dify-plugin-daemon:0.0.3-local
可以通过
docker logs -f 99f2b13359c1
查看安装信息 < 注意替换自己本地的容器id >
Dify 是一个运行在本地的 Web UI,它允许我们便捷地访问和使用各种大语言模型,但下载 Dify 并不等同于下载了这些模型本身,如果希望使用这些大模型,依然要拿到相应的 API Key。
3.3 创建应用
- 创建应用
- 创建空白应用
- 从应用模版创建
- 导入DSL文件
3种方式均可
找对应需求模版即可
3.4 聊天助手
在首页点击 “创建应用” 按钮创建应用。填上应用名称,应用类型选择聊天助手
-
创建应用后会自动跳转到应用概览页。点击左侧菜单 编排 来编排应用。
-
填写提示词
提示词用于约束 AI 给出专业的回复,让回应更加精确。你可以借助内置的提示生成器,编写合适的提示词。提示词内支持插入表单变量,例如
{{input}}
。提示词中的变量的值会替换成用户填写的值。
为了更好的用户体验,可以加上对话开场白:我想让你担任{{jobName}}面试官。我将成为候选人,您将向我询问{{jobName}}开发工程师职位的面试问题。
- 提示词生成
- 右边job_name可以定义职位
右边一个简单的面试场景就正式启用了
可以chat交互
如果想要让 AI 的对话范围局限在知识库内,例如企业内的客服话术规范,可以在“上下文”内引用知识库
Dify功能非常丰富,篇幅有限,后续再更新其它使用文章