RAG 的主要流程主要包含以下 2 个阶段:
- 数据准备阶段: 管理员将内部私有数据向量化后入库的过程,向量化是一个将文本数据转化为向量矩阵的过程,该过程会直接影响到后续检索的效果;入库即将向量数据构建索引,并存储到向量数据库的过程。
- 用户应用阶段: 根据用户的 Prompt 提示词,通过检索召回与 Prompt 提示词相关联的知识,并融入到原 Prompt 提示词中,作为大模型的输入 Prompt 提示词,通用大模型因此生成相应的输出。
AnythingLLM框架: https://github.com/Mintplex-Labs/anything-llm
1 环境准备
Windows 需要打开虚拟化功能(Hyper-V 和 WSL)。下面基于 windows 进行部署。
安装 Docker 需要用到虚拟化,因此需要 Windows 系统打开Hyper-V和WSL 子系统功能。如果是 Windows 11 家庭版,默认并没有安装Hyper-V功能,需要先安装 Hyper-V。
1.1 (家庭版)安装 Hyper-V 依赖
- 新建一个 txt 临时文本,并复制以下代码并保存,之后把该临时文件重命名为Hyper-V.bat
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
- 右键以管理员方式运行
Hyper-V.bat
,本代码自动安装相关包,完成之后输入Y重启电脑后即可
1.2 开启虚拟化功能
- 首先,打开 Windows 功能(即:控制面板)
- 然后,勾选以下 3 个选项(Hyper-V、适用于 Linux 的 Windows 子系统和虚拟机平台),打开虚拟化功能
- 点击确定之后重启电脑即可
2 环境准备:Docker 安装和配置
2.1 下载 Docker 软件
下载和安装 Docker 软件:https://www.docker.com
2.2 Docker 安装和配置
- 下载完成之后,安装过程与普通的软件没有区别,安装完成之后需要注销电脑
- 登录操作系统之后,需要Accept同意 Docker 协议条款,然后注册登录或者Continue without signing in直接跳过,打开 Docker 软件。
- 设置镜像源: 点击右上角齿轮设置按钮,选择Docker Engine,打开设置页面,输入 Docker 镜像文件加速器地址:
"registry-mirrors": [
"https://docker.registry.cyou",
"https://mirror.baidubce.com"
]
点击Apply & Restart按钮即可
3 AnythingLLM 安装和配置
3.1 下载和启动 AnythingLLM 镜像
docker pull mintplexlabs/anythingllm
查看当前 Docker 的镜像列表:
docker images
3.2 启动 AnythingLLM 框架
AnythingLLM 镜像挂载和启动:
windows:
# 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:
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
3.3 配置 AnythingLLM
点击Get started
按钮,进入LLM 选择页面。
如果大模型使用 Ollama 方式部署,需要看下 Ollama URL 端口号是否正确,默认值为:http://host.docker.internal:11434
AnythingLLM 设置确认,包括:大模型提供方、词嵌入和向量数据库,这些配置后续还可以修改。
最后,创建一个工作区,RAG-ClassmateWX
4 AnythingLLM 导入数据和使用
上一步配置完成之后,无需任何其他配置,就可以和大模型对话聊天了,和通过其他客户端与大模型对话没有区别。接下来,需要导入我们内部私有数据,并进行验证。
4.1 导入内部数据
在电脑本地新建一个 txt 文件,文件名为:为什么个人、团队等均有必要部署私有化的RAG知识库系统.txt,文件内容:
自ChatGPT发布以来,大型语言模型(Large Language Model,LLM,大模型)得到了飞速发展,它在解决复杂任务、增强自然语言理解和生成类人文本等方面的能力让人惊叹,几乎各行各业均可从中获益。
然而,在一些垂直领域,这些开源或闭源的通用的基础大模型也暴露了一些问题,主要有以下3个方面:
1. **知识的局限性:** 大模型的知识源于训练数据,目前主流大模型(如:通义千问、文心一言等)的训练数据基本来源于网络公开的数据。因此,非公开的、离线的、实时的数据大模型是无法获取到(如:团队内部实时业务数据、私有的文档资料等),这些数据相关的知识也就无从具备。
2. **幻觉问题:** 大模型生成人类文本底层原理是基于概率(目前还无法证明大模型有意识),所以它有时候会**一本正经地胡说八道**,特别是在不具备某方面的知识情况下。当我们也因缺乏这方面知识而咨询大模型时,大模型的幻觉问题会各我们造成很多困扰,因为我们也无法区分其输出的正确性。
3. **数据的安全性:** 对于个人、创新团队、企业来说,**数据安全**至关重要,老牛同学相信没有谁会愿意承担数据泄露的风险,把自己内部私有数据上传到第三方平台进行模型训练。这是一个矛盾:我们既要借助通用大模型能力,又要保障数据的安全性!
为了解决以上3个大模型通用问题,**检索增强生成**(Retrieval-Augmented Generation,**RAG**)方案就应运而生了!
- 首先,点击
RAG-ClassmateWX
工作空间右边的上传图标,准备上传本 txt 文件 - 然后,点击 txt 文件并上传,并点击
Move to workspace
导入到工作空间 - 最后,点击
Save and Embed
完成 txt 文本文件数据准备步骤(导入、向量化和入库等)
4.2 内部数据使用和验证
回到主界面,输入刚才 txt 内部文件名:为什么个人、团队等均有必要部署私有化的 RAG 知识库系统
,此时就能的得到回答了。如果把同样的问题喂给 AnythingLLM 的底层模型,就会得到另一个回答,两个回答之间相比,前者会更加贴近我们自己导入的数据。