基于Qwen2/Lllama3等大模型,部署团队私有化RAG知识库系统的详细教程(Docker+AnythingLLM)

自 ChatGPT 发布以来,大型语言模型(Large Language Model,LLM,大模型)得到了飞速发展,它在处理复杂任务、增强自然语言理解和生成类人文本等方面的能力让人惊叹,几乎各行各业均可从中获益。

然而,在一些垂直领域,这些开源或闭源的通用基础大模型也暴露了一些问题,主要体现在以下 3 个方面:

  1. 知识的局限性: 大模型的知识源于训练数据,目前主流大模型(如:通义千问、文心一言等)的训练数据基本来源于网络公开的数据。因此,非公开的、离线的、实时的数据大模型是无法获取到(如:团队内部实时业务数据、私有的文档资料等),这些数据相关的知识也就无从具备。
  2. 幻觉问题: 大模型生成人类文本底层原理是基于概率(目前还无法证明大模型有意识),所以它有时候会一本正经地胡说八道,特别是在不具备某方面的知识情况下。当我们也因缺乏这方面知识而咨询大模型时,大模型的幻觉问题会各我们造成很多困扰,因为我们也无法区分其输出的正确性。
  3. 数据的安全性: 对于个人、创新团队、企业来说,数据安全至关重要,老牛同学相信没有谁会愿意承担数据泄露的风险,把自己内部私有数据上传到第三方平台进行模型训练。这是一个矛盾:我们既要借助通用大模型能力,又要保障数据的安全性!

为了解决以上通用大模型问题,检索增强生成(Retrieval-Augmented Generation,RAG)方案就应运而生了:

RAG主要流程

RAG 的主要流程主要包含以下 2 个阶段:

  1. 数据准备阶段: 管理员将内部私有数据向量化后入库的过程,向量化是一个将文本数据转化为向量矩阵的过程,该过程会直接影响到后续检索的效果;入库即将向量数据构建索引,并存储到向量数据库的过程。
  2. 用户应用阶段: 根据用户的 Prompt 提示词,通过检索召回与 Prompt 提示词相关联的知识,并融入到原 Prompt 提示词中,作为大模型的输入 Prompt 提示词,通用大模型因此生成相应的输出。

从上面 RAG 方案我们可以看出,通过与通用大模型相结合,我们可搭建团队私有的内部本地知识库,并能有效的解决通用大模型存在的知识局限性幻觉问题隐私数据安全等问题。

目前市面上已经有多个开源 RAG 框架,老牛同学将选择AnythingLLM框架(16.8K ☆,https://github.com/Mintplex-Labs/anything-llm)与大家一起来部署我们自己或者团队内部的本地知识库。整个部署过程将涉及以下几个方面:

  1. 环境准备: AnythingLLM框架推荐使用 Docker 部署,因此我们需要提前把 Docker 安装和配置好
  2. 大模型准备: 老牛同学继续使用Qwen2-7B大模型,大家可以根据自己实际情况选择,无特殊要求
  3. RAG 部署和使用: 即 AnythingLLM 安装和配置,并最终使用我们大家的 RAG 系统

环境准备:Windows 打开虚拟化功能(Hyper-V 和 WSL)

友情提示: 老牛同学用的是 Windows 操作系统,因此下面是 Windows 的配置方式。

安装 Docker 需要用到虚拟化,因此需要 Windows 系统打开Hyper-VWSL 子系统功能。如果是 Windows 11 家庭版,默认并没有安装Hyper-V功能,可以通过以下方式进行安装:

Windows家庭版

【第一步(家庭版):安装 Hyper-V 依赖包】

  1. 新建一个 txt 临时文本,并复制以下代码并保存,之后把该临时文件重命名为Hyper-V.bat
  2. 右键以管理员方式运行Hyper-V.bat,本代码自动安装相关包,完成之后输入Y重启电脑后即可
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

【第二步:开启虚拟化功能】

首先,打开 Windows 功能(即:控制面板):

Windows功能

然后,勾选以下 3 个选项(Hyper-V适用于 Linux 的 Windows 子系统虚拟机平台),打开虚拟化功能:

打开虚拟化功能

点击确定之后重启电脑即可!

环境准备:Docker 安装和配置

Docker 安装和配置主要包含以下 2 个步骤:

【第一步:下载 Docker 软件】

下载和安装 Docker 软件:https://www.docker.com

如果大家和老牛同学一样,出现无法打开 Docker 官网的情况,则也可以通过以下方式下载最新的版本:

  1. 打开 Docker 中文网站:https://docker.github.net.cn/desktop/release-notes/
  2. 选择对应的安装软件,如果直接点击下载,可能还是无法下载。可以右键复制下载链接,然后通过迅雷进行下载(老牛同学亲测有效)

Docker下载

【第二步;Docker 安装和配置】

下载完成之后,安装过程与普通的软件没有区别,安装完成之后需要注销电脑:

Docker安装完成

登录操作系统之后,需要Accept同意 Docker 协议条款,然后注册登录或者Continue without signing in直接跳过,打开 Docker 软件。

设置镜像源: 点击右上角齿轮设置按钮,选择Docker Engine,打开设置页面,输入 Docker 镜像文件加速器地址:

"registry-mirrors": ["https://docker.registry.cyou","https://mirror.baidubce.com"]

如果以上加速器地址不可用,可以使用阿里云个人私有的地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
设置Docker镜像源

点击Apply & Restart按钮即可!

AnythingLLM 安装和配置

接下来,我们开始安装和部署AnythingLLM框架,包含以下 3 步:

第一步: 下载和启动 AnythingLLM 镜像】

docker pull mintplexlabs/anythingllm

Docker镜像下载

可以通过以下命令,查看当前 Docker 的镜像列表:

>docker images
REPOSITORY                 TAG       IMAGE ID       CREATED      SIZE
mintplexlabs/anythingllm   latest    d950fa3b8011   2 days ago   2.94GB

Docker镜像列表

第二步: 启动 AnythingLLM 框架】

Windows 系统: AnythingLLM 镜像挂载和启动命令(因为命令有多行,需要通过PowerShell执行):

# Run this in powershell terminal
$env:STORAGE_LOCATION="$HOME\Documents\anythingllm"; `
If(!(Test-Path $env:STORAGE_LOCATION)) {New-Item $env:STORAGE_LOCATION -ItemType Directory}; `
If(!(Test-Path "$env:STORAGE_LOCATION\.env")) {New-Item "$env:STORAGE_LOCATION\.env" -ItemType File}; `
docker run -d -p 3001:3001 `
--cap-add SYS_ADMIN `
-v "$env:STORAGE_LOCATION`:/app/server/storage" `
-v "$env:STORAGE_LOCATION\.env:/app/server/.env" `
-e STORAGE_DIR="/app/server/storage" `
mintplexlabs/anythingllm;

或者,Linux/MacOS 系统: AnythingLLM 镜像挂载和启动命令:

export STORAGE_LOCATION=$HOME/anythingllm && \
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm

启动完成,通过浏览器打开AnythingLLM界面:http://localhost:3001

AnythingLLM初始界面

第三步: 配置 AnythingLLM】

点击Get started 按钮,进入LLM 选择页面。老牛同学在前面文章中,分别介绍了大模型通过OllamaOpenAI这 2 种主要的部署方式(包括:Llama3Qwen2Gemma2等)。

老牛同学在这里选择Ollama方式,如果大家重新设置了端口号,则需要看下 Ollama URL 端口号是否正确,默认值为:http://host.docker.internal:11434

AnythingLLM确认配置

AnythingLLM 设置确认,包括:大模型提供方、词嵌入和向量数据库,这些配置后续还可以修改。

最后,创建一个工作区,老牛同学设置的名称为:RAG-ClassmateWX

AnythingLLM 导入数据和使用

上一步配置完成之后,无需任何其他配置,就可以和大模型对话聊天了,和通过其他客户端与大模型对话没有区别。接下来,我们需要导入我们内部私有数据,并进行验证。

【第一步:导入内部数据】

我们在电脑本地新建一个 txt 文件,文件名为:为什么个人、团队等均有必要部署私有化的RAG知识库系统.txt,文件内容就是本文的开头内容:

自ChatGPT发布以来,大型语言模型(Large Language Model,LLM,大模型)得到了飞速发展,它在解决复杂任务、增强自然语言理解和生成类人文本等方面的能力让人惊叹,几乎各行各业均可从中获益。然而,在一些垂直领域,这些开源或闭源的通用的基础大模型也暴露了一些问题,主要有以下3个方面:1. **知识的局限性:** 大模型的知识源于训练数据,目前主流大模型(如:通义千问、文心一言等)的训练数据基本来源于网络公开的数据。因此,非公开的、离线的、实时的数据大模型是无法获取到(如:团队内部实时业务数据、私有的文档资料等),这些数据相关的知识也就无从具备。
2. **幻觉问题:** 大模型生成人类文本底层原理是基于概率(目前还无法证明大模型有意识),所以它有时候会**一本正经地胡说八道**,特别是在不具备某方面的知识情况下。当我们也因缺乏这方面知识而咨询大模型时,大模型的幻觉问题会各我们造成很多困扰,因为我们也无法区分其输出的正确性。
3. **数据的安全性:** 对于个人、创新团队、企业来说,**数据安全**至关重要,老牛同学相信没有谁会愿意承担数据泄露的风险,把自己内部私有数据上传到第三方平台进行模型训练。这是一个矛盾:我们既要借助通用大模型能力,又要保障数据的安全性!为了解决以上3个大模型通用问题,**检索增强生成**(Retrieval-Augmented Generation,**RAG**)方案就应运而生了!

首先,点击RAG-ClassmateWX工作空间右边的上传图标,准备上传本 txt 文件:

准备上传文件

然后,点击 txt 文件并上传,并点击Move to workspace导入到工作空间:

上传txt外部文件

最后,点击Save and Embed完成 txt 文本文件数据准备步骤(导入、向量化和入库等)。

【第二步:内部数据使用和验证】

回到主界面,输入刚才 txt 内部文件名:为什么个人、团队等均有必要部署私有化的 RAG 知识库系统

AnthingLLM的检索和结果

RAG 的回答感觉比我原文要好多了,大模型在引用了内部数据的同时,还展示自己的创造性!

同时,老牛同学用同样的问题,咨询 AnythingLLM 的底层模型,结果就比较普通通用了,大家可以对比看下:

AnythingLLM底层大模型结果

总结和问题

和我们之前的大模型部署和应用过程相比,基于 AnythingLLM 的 RAG 实现整个部署过程比较繁琐,包括环境准备、Docker 安装和配置、AnythingLLM 配置等。然而,AnythingLLM 的使用过程却相对比较简单,我们只需要上传我们内部数据文件,AnythingLLM 框架屏蔽了中间的数据提取分割、向量化处理、向量索引和入库、检索召回和重组 Prompt 提示词等过程。

同时,我们通过构建本地知识库,做了一个简单的测试验证,测试结果表明,在使用 RAG 的情况下,大模型的回答结果更加有效、更符合我们期望,同时具备了一定的创造性!

老牛同学最后提个问题:检索召唤的过程,能否使用搜索引擎(如:Elastic Search)代替?欢迎大家留言讨论,我们共同学习进步!


关注本公众号,我们共同学习交流进步 👇🏻👇🏻👇🏻

微信公众号:老牛同学

使用 Llama3/Qwen2 等开源大模型,部署团队私有化 Code Copilot 和使用教程

本地部署 GLM-4-9B 清华智谱开源大模型方法和对话效果体验

玩转 AI,笔记本电脑安装属于自己的 Llama 3 8B 大模型和对话客户端

ChatTTS 开源文本转语音模型本地部署、API 使用和搭建 WebUI 界面


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用级数公式计算圆周率(π)

π是是指圆的周长与直径的比值,是无限不循环小数,有很多种方法可以求得它的近似值。这里用比较容易实现的关于π的无穷级数来求它的前10000位的取值。 π / 2 π 具体的,用两个字符数组x,z分别存放当前计算得到的pi值,数组…

有趣的算法

目录: 1、百钱买百鸡 2、韩信点兵 1)概述 2)正常取余算法 3)循环算法 1、百钱买百鸡 我国古代《算经》中的“百钱买百鸡”问题: 鸡翁一,值钱五;鸡母一,值钱三;鸡…

并口、串口和GPIO口区别

并口 并行接口,简称并口。并口采用的是25针D形接头。所谓“并行”,是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错,目前,并行接口主要作为打印机端口等。 并口的工作模式 …

景色短视频:成都柏煜文化传媒有限公司

景色短视频:定格自然之美,邂逅心灵之旅 在这个被数字洪流包围的时代,短视频以其独特的魅力,为我们打开了一扇通往无限可能的大门。而在众多短视频类型中,景色短视频以其无与伦比的视觉冲击力,成为了许多人…

优化路由,优化请求url

1、使用父子关系调整下使其更加整洁 2、比如说我修改了下url,那所有的页面都要更改 优化:把这个url抽出来,新建一个Api文件夹用于存放所有接口的url,在业务里只需要关注业务就可以 使用时 导包 发请求 如果想要更改路径,在这里…

Java+Vue实现电商网站

🌟 探索我们的全新电商平台!使用Java和Vue打造,我们为您带来无与伦比的购物体验。🛒✨ ✨ 功能一览: 首页:精美设计,直观易用,让您轻松发现最新产品和促销活动。 我的订单&#xf…

k8s record 20240703

1. containerd 它不用于直接和开发人员互动,在这方面不和docker竞争 containerd的用时最短,性能最好。 containerd 是容器的生命周期管理,容器的网络管理等等,真正让容器运行需要runC containerd 是一个独立的容器运行时&am…

2024年7月6日 (周六) 叶子游戏新闻

自动电脑内部录音器AutoAudioRecorder: 是一款免费的自动音频录制软件,可直接将电脑内部所有的声音录制成 mp3/wav 文件,包括音乐、游戏直播、网络会议、聊天通话等音频源。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《不羁联盟》制作人&…

Java求解百钱买百鸡问题(课堂实例2)

目录 💕💕引言💕💕 😍😍点关注编程梦想家(大学生版)-CSDN博客不迷路💕💕 一、问题背景----百鸡百钱_百度百科 (baidu.com) 𝑥𝑦&a…

【文献解析】一种像素级的激光雷达相机配准方法

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

3-3 超参数

3-3 超参数 什么是超参数 超参数也是一种参数,它具有参数的特性,比如未知,也就是它不是一个已知常量。是一种手工可配置的设置,需要为它根据已有或现有的经验,指定“正确”的值,也就是人为为它设定一个值&…

Spring源码十四:Spring生命周期

上一篇我们在Spring源码十三:非懒加载单例Bean中看到了Spring会在refresh方法中去调用我们的finishBeanFactoryInitialization方法去实例化,所有非懒加载器单例的bean。并实例化后的实例放到单例缓存中。到此我们refresh方法已经接近尾声。 Spring的生命…

Android Camera2 集成人脸识别算法

这可能是全网唯一一篇介绍Android Camera2接口集成人脸算法的文章了~ 写在前面: 说起人脸识别,相信大家都不会感到陌生,在我们平时的工作生活中,人脸打卡、刷脸支付等等已经是应用的非常广泛了,人脸识别也给我们的生活…

数据可视化之智慧农业的窗口与引擎

在科技日新月异的今天,农业作为国民经济的基础产业,正逐步向智能化、数字化转型。农业为主题的数据可视化大屏看板,作为这一转型过程中的重要工具,不仅为农业管理者提供了全面、实时的农田信息,还促进了农业资源的优化配置和农业生产效率的提升。本文将深入探讨农业数据可…

Mysql-01-主从搭建

一、安装Mysql 下载 https://downloads.mysql.com/archives/community/ 安装 注意顺序 tar -xvf mysql-8.0.38-1.el9.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-8.0.38-1.el9.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.38-1.el9.x86_64.r…

非NI GPIB卡与LabVIEW兼容性分析

在许多测试和测量应用中,通用接口总线(GPIB)是一种广泛使用的标准。尽管国家仪器公司(NI)提供的GPIB硬件和LabVIEW软件的组合被广泛接受和使用,但成本可能较高。因此,一些用户会考虑使用其他厂商…

蓄势高飞逐“新”空,卓翼飞思助力打造低空经济产业领域人才智库

2024年,“低空经济”首次写入政府工作报告,掀开新兴产业的崭新一页,而后迅速在全国各地呈现如火如荼的发展态势。这片蕴藏着巨大潜力和产业的蓝海,正蓄势聚能、乘势而起,站在发展的新风口上,面对新前景和新…

CorelDRAW2024新版本来咯!你的设计神助手

🎉 设计界的朋友们,注意啦!你们的新宠——CorelDRAW 2024 来咯! 🌟 一、设计神器再进化 亲爱的设计小伙伴们,有没有感觉每天与那些不配合的软件战斗,像是在打怪升级?🐉 …

【matlab】智能优化算法——基准测试函数

智能优化算法的基准测试函数是用于评估和优化算法性能的一组标准问题。这些测试函数模拟了真实世界优化问题的不同方面,包括局部最小值、全局最优解、高维度、非线性、不连续等复杂性。以下是对智能优化算法基准测试函数的详细归纳: 测试函数的分类&…

数据结构初阶 遍历二叉树问题(一)

一. 链式二叉树的实现 1. 结构体代码 typedef int BTDateType; typedef struct BinaryTreeNode {BTDateType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode; 大概的图形是这样子 2. 增删查改 我们这里要明确的一点的 二叉树的增删查改是没有意…