点击箭头处“蓝色字”,关注更多及时AI资讯!!
Dify 是一款开源的大语言模型 (LLM) 应用开发平台。它融合了后端即服务 (Backend as Service) 和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
Dify 内置了构建 LLM 应用所需的关键技术栈,包括对多种模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
之前的小纸条给大家介绍过如何基于本地部署启动Dify开源版本,集成了开源的llama3模型进行简单的对话,通过之前的demo,我们跑通了基本的环境,今天我们来在这个基础上,进一步做能力的增强,实现一个AI Agent的能力,给咱们日常生活真真正正的的赋个能!
1. 常见使用场景
我们先来看看结合Dify都能实现什么样五花八门的场景
1.1. 对话型应用
通过 Dify 部署一个用于模拟面试的对话型应用,进行模拟面试,还可以切换模型,开启模型对比,以及微调模型参数,以便模拟不同的面试过程。
1.2. 智能助手 (Agent)
利用大语言模型的推理能力,能够自主对复杂的任务进行处理。比如我们可以构建一个可以查阅雅虎股票信息和新闻频道内容的智能助手应用,并向它提问。智能助手会展示自己的思考过程,以及对问题的解答。
1.3. 文本生成 - 翻译助手
还可以利用Dify和大语言模型进行复杂的翻译,图中展示了简单的单语种翻译场景,利用多个不同的变量,还可以进行更复杂的翻译需求。
1.4. 文本生成 - 写作
Dify 还可以利用大语言模型进行文字创作,利用多个变量和上下文,可以实现多场景的快速创作,添加提示词如下,并确认自动添加变量:
用优美的语言对目标人物或事件{{who}}进行描写,其中包含时间{{when}},地点{{where}},发生了什么{{what}}
然后在右侧输入变量的值,即可生成文本。
1.5. 知识库应用
Dify 还可以使用本地上传的方式引入知识库,以摆脱大语言模型的数据时效性和 Token 长度限制,我们创建了一个聊天应用并在上下文中添加知识库,可以看到模型在知识库里面查找了内容后回答了我们提出的问题。
当然上面这些只是Dify能做的事情的冰山一角,我们还可以通过部署工作流等功能实现更加复杂,定制化的 AI 需求!
2. 技术架构
这张图片展示了一个Agents的系统架构图,包含了不同的组件和它们之间的关系,了解清楚各个环节的作用有助于我们更好的设计Agent的架构。我们来逐个分析这些元素及其相互作用:
1. 从中间的Dify Control Plane开始看,指通过Dify配置的控制区,用于管理和配置整个Agent的流程。
2. 上面的Orchestration Studio是核心模块,负责协调各个组件的工作流程。它连接着其他多个组件,包括数据源、模型运行时、自定义策略等。
3. 右侧上方的Agents Mode,这是Agent的操作模式,包括比如代理程序或自动化进程的推进,以及触发一些Custom Tools,用户自定义工具或应用程序。
4. GitHub, Gmail, Jira, Zapier: 这些是与系统集成的第三方服务或应用,例如版本控制系统(GitHub)、电子邮件服务(Gmail)、项目管理工具(Jira)和自动化工具(Zapier)。
5. 右侧下方的Completions是指Agent完成某些任务或过程的状态
6. 下面的RAG Pipeline,是配置Retrieval-Augmented Generation的工作流管道,提供信息检索和文本生成的能力。
7. RAG Pipeline左侧的Custom Strategies是指用户可以根据需求定制文本处理和检索找回的策略。
8. Pre-hooks and Post-hooks: 这些可能是预处理和后处理步骤,在执行主要任务之前和之后触发的操作。
9. Data Source: 数据来源,可能是外部数据库或其他信息存储库
10. RAG Pipeline右侧的Model Runtime,是模型运行环境,用于执行模型训练和推理。
11. Model Runtime右侧的Custom Providers: 用户可以自定义的服务提供商或接口。
12. LM-Studio, Fireworks.ai, Lite LLM等指的是特定的软件产品或服务,一些其他的模型能力服务
13. Any-scale,能指系统支持不同规模的应用部署。
3. 环境准备
小纸条之前有几篇本地部署大模型的实战,体验下来每次多少还是会因为各种千奇百怪的环境问题卡住,大家如果想要效率高点,而且是真的想要运行起来用的,建议还是个大云厂商上的免费机器算力薅一薅!所以长记性的我,今天就基于aws体验下dify部署和agent的实践。
Dify开源版本提供 Docker Compose 部署或本地部署,接下来的教程还是使用和之前一样的Docker Compose方式进行部署。因此我们需准备一个 EC2 实例,同时在Amazon Bedrock 中开启所需模型的访问权限。
启动【免费的】Amazon EC2 实例
登录进入 AWS 控制台,在上方搜索框输入 EC2,然后点击搜索结果中的 EC2 进入 Amazon EC2 控制台。
点击 启动实例 按钮,进入启动实例页面。
在启动实例页面中,依照下述设置配置 EC2 实例:
输入此实例的名称,示意图中为“Dify-Bedrock”
应用程序和操作系统映像:选择默认的 Amazon Linux,AMI 选择默认的 Amazon Linux 2023 AMI,架构选择默认的 64位(x86)
实例类型:选择 c7a.large
创建新密钥对 创建密钥对以便使用 SSH 链接到 EC2 实例,建议创建一个,安全一些(懒的话其实也可以不用,但是实践完最好释放掉免得不安全)
网络设置:默认选择 创建安全组,默认勾选 允许来自以下对象的 SSH 流量,来源为 任何位置 0.0.0.0/0,勾选 允许来自互联网的 HTTP 流量
配置存储与高级详细信息无需更改,保持默认选项即可。
这里薅了aws的免费套餐哦,果断启动实例
实例启动成功后会在页面中显示消息提醒,点击链接到实例按钮即可连接到实例进行下一步部署。
也可以在 EC2 控制台,选择实例进行连接。注意:此处的公有 IPv4 地址为稍后使用的登录地址。
4. 部署 Dify
4.1. 安装 Docker 环境
通过 SSH 连接 EC2 实例后,安装 Docker 环境。
sudo yum install -y docker
sudo curl -L
https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo systemctl start docker
sudo systemctl enable docker
真的比我用自己的电脑快太多哦T-T
然后检查是否成功安装。
docker-compose version
4.2. 安装并启动 Dify
sudo yum install -y git
git clone https://github.com/langgenius/dify.git
cd dify/docker
sudo docker-compose up -d
几分钟后,可以看到类似的输出。
查看进程信息
sudo docker ps
可以看到类似的输出
此时,Dify 开源版本已经部署完毕。
5. Dify 基本设置
5.1 设置管理员账号并登录
使用浏览器访问 http://{公有IPv4地址},即可看到 Dify 设置界面
IPv4地址在刚才的实例列表里面哦!
设置好管理员账号的邮箱,用户名和密码后,在登录界面输入邮箱及密码即可进入 Dify 默认界面。
5.2. 配置模型
点击右上角的用户名,并选择设置。
在左侧栏目中找到 模型供应商,并选择 Bedrock。
输入 Access Key / Secret Access Key,选择相应的 AWS Region,在可用模型名称中输入 amazon.titan-text-express-v1,点击保存,若返回模型选择页面则保存成功。
这里的 Access Key / Secret Access Key的配置如果没有,先按照下面的4.3配置下
验证模型可用性需用到 Amazon Titan 模型,请务必保证已获取所有 Amazon Titan 的模型的访问权限。
5.3. (可选)Access Key / Secret Access Key获取
IAM 用户与 Access Key(AK),Secret Key(SK) 创建的获取过程如下,已经配置好的同学可以跳过
针对于这个使用场景,建议为每个用户创建独立的 IAM 用户的 AK/SK,以方便账号管理。创建方法如下:
第一步:登录 AWS 账号 后,搜索 IAM,点击进入 IAM 服务。
第二步:点击侧边栏策略,然后点创建策略,选择 JSON 方式进行配置,将以下 JSON 配置粘贴进去。策略名称保存为“BRClient-Policy”。
下面的JSON 格式代码粘贴进去
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "InvokeModel",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModelWithResponseStream",
"bedrock:InvokeModel"
],
"Resource": "arn:aws:bedrock:*::foundation-model/*"
},
{
"Sid": "ListFM",
"Effect": "Allow",
"Action": [
"bedrock:ListFoundationModels"
],
"Resource": "*"
}
]
}
第三步,点击侧边栏用户,进入用户列表界面,点击右侧创建用户按钮。
第四步,填写任意用户名,点击下一步
第五步,选择权限。选择直接附加策略,输入 BRClient-Policy 搜索,选择 BRClient-Policy,点击下一步。
第六步,预览填写内容,点击创建用户。
第七步,用户列表中点击,刚创建的用户名。在用户详情页中,选择安全凭证。
在访问密钥中点击创建访问密钥。
第八步,在访问密钥最佳实践和替代方案中,选择本地代码。
第九步,设置标签,用于后期的成本统计,最后创建访问密钥。
第十步,最后获得 AK / SK,或者下载.csv文件 留作备份
注意,关闭此页面后,将无法再次获得此 AK/SK,只能删除重新创建。另外,拥有 AK/SK 即可访问此用户名下的所有可用 AWS 资源,请务必妥善保管防止泄露。
6. 基于Dify链接Huggingface的开源模型
6.1. Dify接入Huggingface配置
选择👉右边的小笑脸,Hugging Face,接下来具体接入步骤如下:
我们需要有 Hugging Face 账号(注册地址
https://huggingface.co/)。
设置 Hugging Face 的 API key(获取地址
https://huggingface.co/settings/tokens)
进入 Hugging Face 模型列表页,选择对应的模型类型
Dify上的Hugging Face接入,支持 Text-Generation 和 Embeddings,以下是与之对应的 Hugging Face 模型类型:
Text-Generation:
text-generation,text2text-generation
Embeddings:feature-extraction
Dify 支持用两种方式接入 Hugging Face 上的模型:
Hosted Inference API。这种方式是用的 Hugging Face 官方部署的模型。不需要付费。但缺点是,只有少量模型支持这种方式。
Inference Endpoint。这种方式是用 Hugging Face 接入的 AWS 等资源来部署模型,需要付费。
6.2. 接入 Hosted Inference API 的模型
6.2.1 选择模型
模型详情页右侧有包含 Hosted inference API 的 区域才支持 Hosted inference API 。在模型的详情页,如下图所:
这个是支持
没有的 inference API的就是不支持
6.2.2 在 Dify 中使用接入模型
从我们上面模型供应商添加模型那一步继续,设置 > 模型供应商 > Hugging Face > 模型类型 的 Endpoint Type 选择 Hosted Inference API。如下图所示:
API Token 为文章开头设置的 API Key。模型名字为下面图中模型详情页获得的模型名字。
6.3. 方式 2: Inference Endpoint
6.3.1. 选择要部署模型
模型详情页右侧的 Deploy 按钮下有 Inference Endpoints 选项的模型才支持 Inference Endpoint。如下图所示:
6.3.2. 部署模型
点击模型的部署按钮,选择 Inference Endpoint 选项。如果之前没绑过银行卡的,会需要绑卡。按流程走即可。绑过卡后,会出现下面的界面:按需求修改配置,点击左下角的 Create Endpoint 来创建 Inference Endpoint。
模型部署好后,就可以看到 Endpoint URL,以及模型名称
6.3.3. 在 Dify 中使用接入模型
在 设置 > 模型供应商 > Hugging Face > 模型类型 的 Endpoint Type 选择 Inference Endpoints。如下图所示:
API Token 为5.1那步在huggingface上设置的 API Key。LLM模型名称可以自己定义,Embeddings 模型名字需要跟上面图中Hugging Face上的模型名称保持一致,Endpoint URL为上一步部署模型成功后获得的 Endpoint URL。
6.4 举例:接入Llama3.2
我们选择接入Llama-3.2这个模型
https://huggingface.co/meta-llama/Llama-3.2-1B
7. 直接接入第三方模型(举例:通义千问)
可以看到模型提供商这里有很多家大模型供我们选择,那我们再尝试下直接接入阿里的通义千问
LLM这里要填写的名字,我们去这里看https://bailian.console.aliyun.com/#/model-market
比如我们选择qwen2.5-32b-instruct,进入详情页,复制一下模型的名字
分别填写到Dify的名称和API key上就可以啦。其他几家模型方式基本一致,都是去官网获取api KEY,以及我们需要接入的模型名称即可
8. 基于Dify创建Agent
配置完模型后,就可以在应用中使用这些模型了,大家可以在模版池中找一个喜欢的,也可以创建一个空白的
然后在右上角选择我们接入的模型
指定好模型之后,我们就可以开始对话啦,注意哦,Dify是开源没错,但是我们接的模型如果要扣费,那这样就会开始计费了哈
最后,不玩的时候记得把我们(薅)的EC2机器关掉,需要的时候再打开,省点是点❤️
这样我们就完成一个最最最基础的Agent的搭建啦,像是开篇说的几种场景都算比较基础的,只需要把对应的prompt填写到上图中的提示词中就可以了,后面小纸条也会和大家分享更多真实场景的Agent的实战,由浅入深,循序渐进的学!好的,根据您选择的 hook、outline 和 viewpoint,为您生成以下抖音脚本内容:
扫码关注更多AI资讯
我们一起学AI