【LLM】Dify 0.6.10 在Windows系统上本地化部署(一)
【LLM】Dify 0.6.10 在Windows系统上本地化部署
【LLM】Dify 0.6.10 在Windows系统上本地化部署(一)
文章目录
一、参考资料
- dify项目主页:https://dify.ai/,https://dify.ai/zh,https://github.com/langgenius/dify
- dify官方文档:https://docs.dify.ai/user-guide/creating-dify-apps/creating-an-application
- dify云端体验:https://cloud.dify.ai/explore/apps
- dify chatFlow节点介绍:https://docs.dify.ai/features/workflow/node
- dify 技术栈介绍:https://docs.dify.ai/v/zh-hans/getting-started/readme/features-and-specifications
- dify 应用案例:https://docs.dify.ai/v/zh-hans/learn-more/use-cases
也可以了解下Dify的竞品FastGPT:快速了解 FastGPT | FastGPT
二、Dify 概述
1、Dify开源项目功能介绍(RAG流水线,Agent工具接入,Prompt配置和工作流编排,大模型接入,LLMOps,BaaS)
Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流编排、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产。以下是其核心功能列表:
-
1)工作流编排: 在画布上构建和测试功能强大的 AI 工作流程,利用以下所有功能以及更多功能。
Dify
工作流分为两种类型:-
Chatflow:面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。
-
Workflow:面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。
具体参考工作流 | 中文 | Dify
-
-
2)全面的模型支持:与数百种专有 / 开源 LLMs 以及数十种推理提供商和自托管解决方案无缝集成,涵盖 GPT、Mistral、Llama3 以及任何与 OpenAI API 兼容的模型。完整的支持模型提供商列表可在此处找到。
-
3)Prompt IDE: 用于制作提示词、比较模型性能以及向基于聊天的应用程序添加其他功能(如文本转语音)的直观界面。
-
4)RAG Pipeline: 广泛的
RAG
功能,涵盖从文档摄入到检索的所有内容,支持从 PDF、PPT 和其他常见文档格式中提取文本的开箱即用的支持。 -
5)Agent 智能体: 您可以基于 LLM 函数调用或 ReAct 定义 Agent,并为 Agent 添加预构建或自定义工具。Dify 为 AI Agent 提供了50多种内置工具,如谷歌搜索、
DELL·E
、Stable Diffusion
和WolframAlpha
等。具体参考 工具 | 中文 | Dify
-
6)LLMOps: 随时间监视和分析应用程序日志和性能。您可以根据生产数据和标注持续改进提示、数据集和模型。
-
7)后端即服务: 所有 Dify 的功能都带有相应的 API,因此您可以轻松地将 Dify 集成到自己的业务逻辑中。
Note:知识点补充
1、什么是RAG?(
R -> A -> G
)参考LLM之RAG理论(六)| 高级RAG指南和技巧,大语言模型落地的关键技术:RAG
RAG中的核心组件:检索(Retrieval)、增强(Augmentation)、生成(Generation)
RAG中的检索(Retrieval):从哪里找?找的范围?
检索技术相关的一些关键概念和方法包括检索策略、检索粒度、检索方法、检索效率和外部数据源等;
RAG中的增强(Augmentation):数据增强,调整数据分布等
增强技术相关的一些关键概念和方法包括文本修正、知识融合、上下文增强、控制生成风格、多模态增强、实时更新等;
RAG中的生成(Generation):使用哪类生成模型?(文本/图像/视频)基于什么prompt/任务来生成的?(是知识解答,还是对话风格,还是对话质量评估)
生成相关的一些关键概念和技术包括生成模型、文本生成、控制生成、多模态生成、对话生成、评估生成等;
2、什么是
Agent
智能体?:能够自主完成某个特定任务,比如问题解答,画图等3、什么是LLMOps? (
LLM + Ops
一体化)参考大模型时代的模型运维与部署:LLMops-腾讯云开发者社区-腾讯云,大模型时代,一个充满机遇的赛道——LLMOps,20 分钟带你搞懂 LLMOps !!
LLMOps 的概念可以分解为 LLM 和 Ops 两部分,其中
LLM
是指大语言模型,即大模型;Ops 则是指平台和工具。LLMOps
的完整定义是基于大模型的应用程序的生命周期管理平台或者工具。
大模型的构建主要分为三个阶段:
第一个阶段是预训练阶段
在预训练阶段,数据集通过预训练产生预训练模型,这个过程是千模大战的主战场,各类开源闭源的大模型都是通过这个阶段产生的。
第二个阶段是微调阶段
微调阶段是指特定领域的数据集,在预训练模型的基础上,通过 finetune 手段产生特定领域的模型。
第三个阶段是应用开发阶段
应用开发阶段只是在预训练模型和特定领域模型的推理功能基础上,为其喂入我们的输入,经过提示工程进行指令编排,最终产生我们所需要的大模型输出。
大模型应用平台主要关注的是模型微调和应用开发阶段。
大模型应用的生命周期包括开发、部署、配置和运维。我们着重提出了配置的阶段,即prompt engine
提示工程。与传统的应用程序不同,配置阶段在大模型里面是非常重要非常核心的阶段。生产中LLM存在的痛点:
LLM很昂贵:大语言模型的训练非常昂贵,因为它需要对新数据集进行持续的实验和重新训练,以防止模型变得陈旧。更要命的是,推理成本很高。
微调很难:只有少数公司足够成熟,能够不断微调他们的模型并保持数据管道的健康,尤其是在今天大多数数据跨代码、服务、产品团队甚至组织共享的情况下。LLM尽管拥有很多优点,但在生产环境中可能会成为噩梦——你不能只是训练一次然后永远不变。
LLM会产生幻觉:这是LLM的一个主要问题,因为它可以传播大量的错误信息。此外,试图理解幻觉发生的原因是困难的,因为LLM推导其输出的方式是一个黑盒子。但是我们知道数据质量、生成方法还有上下文输入会影响幻觉。
规模化和延迟问题:客户端编排要比服务器端编排简单得多,真正的挑战是解决现代应用程序的规模化的需求。想象一下,在分布式系统中训练和部署LLM,要考虑到企业级应用缓存、限流和认证授权等一系列关键问题,如何确保系统稳定性、安全性和性能带来了巨大的运营挑战。
隐私和安全:我们已经看到了关于LLM的多个安全问题的实例(比如三星内部数据泄露事件),提示注入已经成为一种流行且有效的绕过
LLM
基本安全防护的攻击工具。可以预见,在LLM
技术栈各个层面加强安全措施之前,企业端的应用不会迅速增长。下图是海外市场的生态现状,涵盖了整个
LLMOps
基础设施技术栈的各个领域:
客户端编排工具:这些框架帮助开发者在客户端集成生成式AI应用,将已部署的模型与外部软件API和其他基础模型相连,并促进用户与应用的互动
向量/数据管理工具:利用LLM的一种有效方法是从上下文生成它的数学表示——嵌入(embedding),然后在这些嵌入之上开发ML应用程序, 例如搜索、聚类、推荐、异常检测等
服务器端编排工具:服务器端编排包括在后端执行的代码片段,即用于运行模型的服务器——部署、训练、推理、监控和安全。
部署:在考虑利用基础模型时,企业可以使用外部模型或部署自己的模型
可观察性:在生产系统中,我们能够观察、评估、优化和调试代码是至关重要的。由于LLM的黑盒性质,可观察性问题变得更加严重。可观察性包括跟踪和理解性能,识别故障、停机、停机时间,评估系统健康,以及解释输出——解释模型为何做出某个决定等等
隐私/安全:随着严格的隐私和安全法律的发布,我们需要提供准确评估模型公平性、偏见和毒性的工具,以及安全防护栏。企业现在越来越关注训练数据的提取、损坏的训练数据以及专有敏感数据的泄露。除此之外,LLM就像传统的机器学习模型一样容易受到对抗性攻击。因此,我们需要可以保护免受提示注入、数据泄露和有毒语言生成的产品;通过匿名化保证数据隐私;为LLM提供访问控制(例如RBAC);实施对抗性训练和防御蒸馏等等。
2、技术特点
LLM 推理引擎 | Dify Runtime ( 自 v0.4 起移除了 LangChain) |
---|---|
商业模型支持 | 10+ 家,包括 OpenAI 与 Anthropic新的主流模型通常在 48 小时内完成接入 |
MaaS 供应商支持 | 7 家,Hugging Face,Replicate,AWS Bedrock,NVIDIA,GroqCloud,together.ai,OpenRouter |
本地模型推理 Runtime 支持 | 6 家,Xoribits(推荐),OpenLLM,LocalAI,ChatGLM,Ollama,NVIDIA TIS |
OpenAI 接口标准模型接入支持 | ∞ 家 |
多模态技术 | ASR 模型GPT-4V 规格的富文本模型 |
预置应用类型 | 对话型应用文本生成应用(即将下线) Agent 工作流 群组(Q2 即将推出) |
Prompt 即服务编排 | 广受好评的可视化的 Prompt 编排界面,在同一个界面中修改 Prompt 并预览效果 编排模式 - 简易模式编排 - Assistant 模式编排 - Flow 模式编排 - Multi-Agent 模式(Q2 即将推出) Prompt 变量类型 - 字符串 - 单选枚举 - 外部 API - 文件(Q2 即将推出) |
Agentic Workflow 特性 | 行业领先的可视化流程编排界面,所见即所得的节点调试,可插拔的 DSL,原生的代码运行时,构建更复杂、可靠、稳定的 LLM 应用。支持节点 - LLM - 知识库检索 - 问题分类 - 条件分支 - 代码执行 - 模板转换 - HTTP 请求 - 工具 |
RAG 特性 | 首创的可视化的知识库管理界面,支持分段预览和召回效果测试。 索引方式 - 关键词 - 文本向量 - 由 LLM 辅助的问题-分段模式 检索方式 - 关键词 - 文本相似度匹配 - 混合检索 - N 选 1 模式 - 多路召回 召回优化技术 - 使用 ReRank 模型 |
ETL 技术 | 支持对 TXT、Markdown、PDF、HTML、DOC、CSV 等格式文件进行自动清洗,内置的 Unstructured 服务开启后可获得最大化支持。支持同步来自 Notion 的文档为知识库。 |
向量数据库支持 | Qdrant(推荐),Weaviate,Zilliz |
Agent 技术 | ReAct,Function Call 工具支持 - 可调用 OpenAI Plugin 标准的工具 - 可直接加载 OpenAPI Specification 的 API 作为工具 内置工具 - 30+ 款(截止 2024 Q1) |
日志 | 支持,可基于日志进行标注 |
标注回复 | 基于经人类标注的 Q&A 对,可用于相似度对比回复 可导出为供模型微调环节使用的数据格式 |
内容审查机制 | OpenAI Moderation 或外部 API |
团队协同 | 工作空间与多成员管理支持 |
API 规格 | RESTful,已覆盖大部分功能 |
部署方式 | Docker,Helm |
Note:
postgreSQL:https://aws.amazon.com/cn/rds/postgresql/what-is-postgresql/
向量库:前端:
- React框架 -
Next.js
:https://nextjs.org/,https://www.nextjs.cn/docs/getting-started后端:
Python Flask
3、系统架构设计
三、Dify 0.6.10 本地化部署前后端
官网提供的源码部署文档:Local Source Code Start | English | Dify
官网在Windows
系统上部署中间件时,建议使用的是WSL2 + Docker Desktop
,由于习惯使用VMWare,这里还是使用虚拟机来部署中间件
而前端项目这里使用
部署步骤如下:
1、配置虚拟机基础环境(这里使用的是Ubuntu 20.04
的镜像):
-
配置SSH:https://blog.csdn.net/devshilei/article/details/139149783
-
安装Docker:
-
安装docker-CE:https://docs.docker.com/engine/install/ubuntu/,https://blog.csdn.net/qq_39500197/article/details/134754930
如果docker官网的签名密钥一直不生效,可以使用国内的docker仓库,参考https://www.cnblogs.com/weizhxa/p/12048416.html
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
-
配置docker镜像源加速器:修改
/etc/docker/daemon.json
后重启docker
,https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6
-
-
安装Node.js:下载
tar
包安装并在/etc/profile
配置环境变量即可https://www.jianshu.com/p/7c11f1355cf5 -
配置代理(github可能访问不通,需要配置代理):修改
/etc/profile
并重新加载export http_proxy=http://192.168.0.101:7890/ export https_proxy=http://192.168.0.101:7890/ export socks_proxy=socks://192.168.0.101:7890/ export ftp_proxy=ftp://192.168.0.101:7890/
2、部署Dify中间件:postgre,redis, weaviate、sandbox、squid中间件
git clone https://github.com/langgenius/dify.git
cd docker
docker-compose -f docker-compose.middleware.yaml up -d
执行该脚本完成镜像安装后,会启动关于该镜像的容器
此时docker容器已经完成端口的映射,并对外暴露该端口(执行iptables -L
可查看):
Note:如果有些镜像源下载失败,配置下新的镜像源,单独用docker pull xxx
看是否可以拉取
3、部署后端服务
Windows
本地通过conda env
虚拟环境安装 flask 环境(windows
默认不支持sed,需要下载exe)
conda create --name dify python=3.10
conda activate dify
cd api
cp .env.example .env
openssl rand -base64 42
sed -i 's/SECRET_KEY=.*/SECRET_KEY=<your_value>/' .env
pip install -r requirements.txt
修改数据库的IP
地址(这一步需要先部署好中间件,数据库才能初始化成功)
修改.env
中的DB_HOST
(虚拟机的IP):
再进行数据库迁移
flask db upgrade
此时就可以在控制台启动后端服务了:
flask run --host 0.0.0.0 --port=5001 --debug
4、部署前端服务
由于在Windows
系统中部署前端时,npm run build
执行没问题,但是npm run start
就报错了:
PS E:\china_unicom_project\gpt\dify\dify\web> npm run start
> dify-web@0.6.9 start
> copy -r .next/static .next/standalone/.next/static && copy -r public .next/standalone/public && cross-env PORT=3000 HOSTNAME=127.0.0.1 node .next/standalone/server.js
系统找不到指定的文件。
修改了package.json
后虽然能启动,但是前端服务找不到文件:
因此这里还是在Linux
上去部署前端服务,并向外开放端口。
cd web
npm install // 如果执行很慢,可以在root/npm/logs路径下查看npm install的打印日志
先在虚拟机上telnet
下是否能连上主机上的后端服务
若可以则修改.env.example
所指向的后端服务地址
接着打包并启动前端服务
npm run build
npm run start
接着修改防火墙配置,开放3000端口:
# 添加防火墙规则
firewall-cmd --zone=public --add-port=3000/tcp --permanent
#重启防火墙
firewall-cmd --reload
接着查看开放端口:firewall-cmd --list-ports
5、功能演示
工作流编排:
创建知识库:
大模型接入和Prompt IDE:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)