群晖Docker,走起! 篇二十六:使用群晖部署自己的高级AI助理,个人、企业降本提效的必备工具
很多小伙伴要求老宁安排一期大语言模型(LLM)相关的文章,今天它终于来了。
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。
上面是 Dify 官方对自己的介绍,用大家听得懂的话来说就是:
对于普通用户来说,可以毫不费力地使用 Dify 来打造专属于自己的AI机器人。利用 Dify 的内建工具,可以赋予机器人更多的能力,并且它们可以通过 web 界面轻松地与家人共享。
对于企业用户,Dify 不仅可以接入第三方的语言模型,还支持接入自建的本地或云端开源模型。借助Dify的知识库功能,企业能够方便地构建一套完全保障隐私、不会发生信息泄露的客户服务机器人。
老宁会详细介绍在群晖上的部署步骤、Dify 的主要功能以及使用演示。
项目地址
https://github.com/langgenius/dify
安装部署
下面介绍两种部署的方法,通过Docker Compose和群晖部署,本文会着重介绍通过群晖来部署。
Docker Compose
🔻 克隆 Dify 源码到本地机器
git clone https://github.com/langgenius/dify.git
🔻 进入Dify源代码中的docker目录,执行如下命令启动Dify:
cd dify/docker
docker compose up -d
群晖部署
Dify 涉及到镜像众多,环境变量也非常复杂,所以我们要借助群晖 Container Manager 套件的项目来运行 docker 容器。
🔻 打开 docker-compose 文件https://github.com/langgenius/dify/blob/main/docker/docker-compose.yaml并下载到本地。
🔻 打开群晖,新建用以存放 Dify 配置的文件夹dify
,并把前面下载的docker-compose.yaml
文件上传到该文件夹中。
🔻 打开 docker-compose 文件,把最后面的 nginx 相关的配置注释。
🔻 同时修改 api 下的几个环境变量为将要反代的 URL 地址。
🔻 放开 api 下 ports 的5001端口注释。如果端口被其他服务占用,可以修改左边的5001为其他任意端口(5001一般都会被群晖占用,演示修改为5301)。
🔻 web 下的 URL 地址也要同时修改,并放开 ports 的注释。如果端口被其他服务占用,可以修改左边的3000为其他任意端口。
🔻 根据docker-compose配置的内容,分别在 dify文件夹中 按照以下路径新建对应的文件夹。
/volumes/app/storage
/volumes/db/data
/volumes/redis/data
/volumes/weaviate
比如/volumes/app/storage
代表在 volumes 文件夹中创建app文件夹,再在 app 文件夹中创建 storage 文件夹。
至于为什么要创建上面的文件夹,是因为后面通过 Container Manager 启动项目时,不是以 root 用户进行操作,只有以 root 用户操作才能自动创建文件夹。
我们怎么知道该创建哪些文件夹呢?
这些文件夹是根据每个服务(api服务、worker服务、db服务等)的挂载路径来配置的(:号前面的宿主机路径就是要创建的文件夹)。
🔻 创建完文件夹后,需要把 dify 文件夹增加 Everyone 可读写权限,并勾选应用到这个文件夹、子文件夹及文件选项。
🔻 打开 Container Manager 套件,点击项目,点击新增后,选择前面的 dify 文件夹, docker-compose 文件会被自动导入。
🔻 输入项目名称后,点击下一步创建项目并启动。
🔻 等待项目构建完毕后,可以点击 dify 查看容器下的几个容器是否全部启动成功,全部成功才代表整个项目部署成功。
反向代理
为了保证服务能在外部访问,需要配置反向代理,下面以 Nginx Proxy Manager 进行演示。
🔻 打开 Nginx Proxy Manager 后台,增加新的一个域名,转发的IP为群晖内网IP,端口为前面docker-compose文件中web服务的端口。
🔻 在 Custom locations 中,新增 /console/api
、/api
、/v1
、/files
路径,都转发群晖的IP上,转发的端口和前面 docker-compose 文件中API服务的端口号保持一致(截图只截了一个,一定要把四个路径都添加上去)。
🔻 选择好 SSL证书后,点击保存。
Dify 功能
🔻 用浏览器打开【https://反代域名/install】进行管理员账户设置。
🔻 配置完管理员账户后,就能登录到 Dify 主界面了。
探索
探索提供了非常多的模版应用。
🔻 在探索界面可以把模版应用添加到自己的工作区。
工作室
工作室可以创建并管理应用。
🔻 可以创建空白应用或根据模版创建。
知识库
可以在知识库中新建知识库,创建好的知识库可以被工作室中的应用调用。
工具
Dify 提供了许多内置的工具。用户也可以创建自定义工具。
聊天机器人
接下来演示如何创建一个AI机器人聊天应用。
🔻 首先要配置模型供应商。点击右上角的用户名,再点击设置。
🔻 选择模型供应商选项后,可以看到 Dify 默认集成了市面主流的模型供应商,包括我们熟悉的GPT、Gemini、文心一言、通义千问。
🔻 Dify 还支持基于 OpenLLM部署的自建的开源模型以及兼容 Open AI 的模型供应商。如果你想要使用本地模型,那么就可以自己根据 https://github.com/bentoml/OpenLLM的文档自己部署并接入。
🔻 这里使用兼容 OpenAI API 的模型供应商来演示。点击 OpenAI-API-compatible 选项卡后,输入模型名称、API Key以及API的URL地址,点击保存。如果配置没有问题会弹出成功的提示框。
🔻 配置完成后,我们在工作室内创建一个空白应用,类型选择聊天助手。
🔻 进入到应用,可以看到当前应用可以使用的模型,如果配置了多个模型,可以点击切换。
🔻 在输入框中输入文字来测试对话功能是否正常。
🔻 调试没有问题后,就可以把应用发布给其他人使用了。点击发布后,可以看到 Dify 提供了三种访问方式:运行、嵌入网站和访问API。
🔻 运行,就是打开一个类似 GPT 的独立聊天页面,对于普通用户来说非常方便。
🔻 嵌入网站,站长可以把写好的机器人嵌入到自己的网站中。
🔻 访问API,开发者可以自己根据API接口实现与机器人的对话。
知识库
上面的演示可能让你感觉到好像和https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web类似,并没有什么过人之处。
接下来我们看看 Dify 提供的知识库功能,有了知识库才能让你的机器人更为专业,更懂你。
🔻 知识库数据源的导入方式有两种,已有文本和同步Notion内容。
🔻 创建一段txt并导入。
🔻 进行文本分段和清洗。
🔻 分段和清洗完成。
🔻 回到工作室修改老宁的小助手,添加上下文为刚刚创建的知识库,现在他就会根据知识库的内容进行回答了(GPT本身不知道老宁是谁,也不知道老宁的课程表)。
🔻 如果它的回答不知道或者回答不准确,那么需要调整你的知识库,重新清洗或者分段。
🔻 Dify 提供了统计面板,用户可以看到消息数、活跃用户、token消耗等情况。
工作流
最后我们来演示工作流。有了工作流,可以让我们的AI机器人更为强大。
老宁做了一个工作流应用来演示。当用户向工作流应用提问时,会从知识库中查询符合条件的内容,查询到符合的内容,就交给 LLM 进行处理,再调用 HTTP 请求把结果发送给企业微信机器人。
如果没有在知识库中查询到相关内容,就会调用必应搜索的API接口进行查询,再把查询到的结果发送到企业微信机器人。
🔻 首先需要在开始节点中添加一个查询字段,变量名为:query,用以接受用户的输入。
🔻 增加知识检索节点,选择查询变量为前面新建的query,并添加需要检索的知识库。
🔻 为空代表没有查询到结果,进入必应搜索,不为空就进入LLM节点。
🔻 处理检索的信息。
🔻 必应查询的内容同样为query变量对应的内容。必应搜索需要调用API,免费用户可以每月调用1000次,付费计划可以参考官方https://www.microsoft.com/en-us/bing/apis/pricing。
🔻 配置发送 HTTP 请求节点。Dify 提供了发送到企业微信机器人工具,没研究怎么配置请求参数,所以直接采用 HTTP 节点调 机器人的 Webhook URL(注意BODY请求体中必须包含msgtype字段)。
🔻 运行测试工作流是否正常。
🔻 企业微信收到从知识库中获取的信息。
🔻 询问与知识库无关的内容,会执行必应搜索。
🔻 企业微信收到调用必应搜索查询到的消息。
后记
经过老宁对 Dify 的讲解,想必大家对它有了一个初步的认识,这篇文章只能说是抛砖引玉,大家可以发挥自己的想象力,结合自身的需要打造出一个适合自己,适合企业的专属机器人。
你说没有的免费GPT API,还不会使用 OpenLLM部署的开源模型?请持续关注老宁,这些内容都会慢慢安排。
我是老宁
一个热爱技术的程序员和极客,群晖NAS深度玩家!
专注NAS相关技术分享,原创!干货!
觉得老宁的文章对你有帮助,记得点赞、收藏、加关注!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
samisme
校验提示文案
alston88
校验提示文案
随风而行之之
校验提示文案
爱董小白
校验提示文案
鬼鬼鬼鬼
校验提示文案
sweetskys
校验提示文案
致云
校验提示文案
御剑随风
校验提示文案
程序媛
校验提示文案
值友6668293414
校验提示文案
草658
校验提示文案
致云
校验提示文案
spirn
校验提示文案
十六薙夜血
校验提示文案
行者无疆2019
校验提示文案
行者无疆2019
校验提示文案
哦耶567
校验提示文案
XIANGHOT
校验提示文案
qwdn
校验提示文案
值友6068158901
校验提示文案
spirn
校验提示文案
值友6068158901
校验提示文案
致云
校验提示文案
草658
校验提示文案
值友6668293414
校验提示文案
程序媛
校验提示文案
十六薙夜血
校验提示文案
qwdn
校验提示文案
XIANGHOT
校验提示文案
御剑随风
校验提示文案
致云
校验提示文案
哦耶567
校验提示文案
行者无疆2019
校验提示文案
行者无疆2019
校验提示文案
samisme
校验提示文案
sweetskys
校验提示文案
鬼鬼鬼鬼
校验提示文案
alston88
校验提示文案
爱董小白
校验提示文案
随风而行之之
校验提示文案