【AI】在Windows平台使用本地部署大模型构建本地知识库

2,301 阅读16分钟

大模型迅猛发展的今天,知识的更新日新月异。如果你苦于知识文本繁杂,使用查询的时候又无从下手,你可以考虑使用大模型技术来帮助你检索查询所需的知识点。对有文件内容安全性考虑的用户,可以部署本地化的大模型已解决当前需求。

现阶段有多种构建方式

1.Ollama+AnythingLLM :这种方式部署简单,可以迅速上手,但是AnythingLLM使用默认的向量模型性能一般,所以在使用知识库查询时,经常容易出现无法查询到相关信息的情况。

2.Ollama+FastGpt:这种方式是本教程教学的构建方式,是现阶段搭建本地知识库最好的选择。因为可以自定义向量模型等各类所需要的模型,查询结果质量较好,但是缺点就是搭建过程繁琐。

FastGpt2.png

使用Ollama+FastGpt构建本地知识库

环境配置

Python依赖环境

在这之前需要先安装python,由于大部分大模型基于Python语言开发,所以对于 Python 应用程序所需的软件和工具的集合,也就是依赖环境,应当尽量保持在最新版本。

对于Python的安装可以参考这篇博文(先看下面的注意点)

超详细的Python安装和环境搭建教程_python安装教程-CSDN博客

注意点

1.Python安装时,记得勾选pip(Python 中的标准库管理器),这是用于更新所需依赖环境的工具。

2.Python安装时,有时候即使勾选了Add python to PATH也会出现环境变量配置不成功的问题。在命令行窗口运行python指令,会跳转WindowsApps;或者在Windows CMD命令行窗口(尽量使用管理员权限)运行pip指令,提示不是内部或外部命令,都表示环境变量未配置。

Pip指令.png

3.环境变量作用是让用户可以在Windows CMD命令行窗口或PowerShell中直接运行应用程序的指令。配置环境变量方法:此电脑-> 属性 -> 高级系统设置 -> 环境变量,用户变量和系统变量都进行设置。

用户变量:

在Path中新建两个变量,一个是Python安装目录路径,另一个是Python目录下Scripts文件夹的路径。

系统变量.png

系统变量:

在Path的最后添加两个变量,一个是Python安装目录路径,另一个是Python目录下Scripts文件夹的路径,使用英文状态下;分隔。

环境变量.png

4.配置Python环境变量时候,用户变量需要保证python的路径配置要在WindowsApps的路径配置上,不然还是会按顺序先跳转WindowsApps。

Python环境变量.png

更新Python依赖环境

在命令行窗口使用以下指令,待指令运行完成未出现红色错误提醒就是更新成功。

python.exe -m pip install --upgrade pip

安装配置WSL2

因为Docker、Fastgpt及各类数据库等,需要在Linux环境下运行,所以要在Windows系统上先安装linux系统。

Windows Subsystem for Linux(简称WSL),Windows下的Linux子系统,是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。可以简单理解为可以在windows系统下操作控制的本地Linux子系统的工具。

对于WSL的安装可以参考这篇博文及微软官方教程(先看下面的注意点):

Windows 10 安装配置WSL2(ubuntu20.04)教程 超详细_win10安装wsl2-CSDN博客

安装 WSL | Microsoft Learn

注意点

1.在安装Wsl前需要确保当前设备已经开启了虚拟化,可以通过两种方式查询:

[1]在任务管理器->性能->Cpu中查看虚拟化情况。

任務管理器.png

[2].在Windows CMD命令行窗口使用systeminfo指令查看虚拟化情况。

f6949537c2e8674c7b710d9eecf7604d.png

2.查询未启用虚拟化,需要先在Bios中开启虚拟化功能。

一般情况下,主板默认设置时不开启虚拟化功能的。所以需要在开机时,进入主板Bios进行设置。我的电脑时联想拯救者,通过F2可以进入主板Bios,其他型号的电脑可以网上查询进入Bios的方法。

AMD的cpu在Bios设置中将AMD SVM Technology设置为Enable,重新开机则开启了电脑的虚拟化功能。

微信图片_20240815122655.jpg

3.为Windows启用Hyper-V功能

在控制面板-> 程序 ->程序与功能 ->启用或关闭Windows功能中找到Hyper-V,进行勾选后会自动系统会自动安装Hyper-V。

Hyper-V.png

4.如果你的系统为Window10/11 家庭版,在Windows功能中是没有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
pause

安装完成后,使用前面方法验证虚拟化与Hyper-V开启情况。

参考博文 : Windows 10 |VMware开启虚拟化的最全面说明_vmware虚拟化引擎-CSDN博客

Windows 11 家庭版和专业版:启用 Hyper-V 虚拟化平台的步骤_window打开hyper-v-CSDN博客

5.内核更新包安装出现This update only applies to machines with the windows Subsytem for Linux错误

需要确保适用于Linux启用Windows子系统虚拟机平台两个功能在WIndows功能中启用,可以在Windows CMD命令行窗口中使用以下指令开启。

适用于Linux启用Windows子系统

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

虚拟机平台

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

或者通过winsows功能中手动启动

Windows功能.png

设置完成后重启设备,windows功能生效。

6.安装Linux,推荐在Windows CMD命令行窗口中使用wsl --install指令进行安装。

7.安装完成后Linux指令需要在Ubuntu打开的命令行中运行。

Ubuntu.png

Ubuntu2.png

大模型安装

安装本地部署开源大模型的工具Ollama

Ollama是一个专为在本地环境中运行和定制大型语言模型而设计的工具。它提供了一个简单而高效的接口,用于创建、运行和管理这些模型,同时还提供了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。

Ollama.png

Ollama下载链接: Download Ollama on Windows

下载完Ollama后无脑下一步安装。

Ollama默认的大模型安装位置为C盘的C:\Users\<username>\.ollama\models,更换安装位置需在环境变量中进行配置。此电脑-> 属性 -> 高级系统设置 -> 环境变量

在环境变量的系统变量中添加OLLAMA_MODELS,并为其设置目录值(不需要到文件夹下创建文件,直接在值中设置盘符和文件夹名称,例如F:\OllamaModels),重启设备后,会自动创建文件夹,且模型下载安装位修改成功。

Ollama.png

安装完成后在Ollama官网中选择所需要的大模型,复制指令在Windows CMD命令行窗口运行。

Ollama2.png

等待下载安装完成后,本地模型就部署成功,可以在控制台和模型对话检测模型功能。

Qwen.png

Ctrl+D和在Windows CMD命令行窗口输入Bye可以退出与大模型的对话。

大模型下载链接:library (ollama.com)

测试项目中使用的模型:

大模型(llmModels):llama3.1:latest

向量模型(vectorModels):znbang/bge:large-en-v1.5-f32

Docker安装

Docker 是一个开源的应用容器引擎。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

安装

因为部分原因,Docker需要使用魔法下载。这里提供的是DockerDesktop版本,如果需要使用WSL在Linux安装运行Docker,参考下面的文章:

Install Docker in WSL 2 without Docker Desktop — Nick Janetakis

因为网络上的大多数能够下载的Docker Desktop版本为4.1.1,会与后续需要安装运行的pg向量数据库不兼容,所以这里提供4.30.0版本,以解决该问题。

Docker Desktop本地下载地址:链接:pan.quark.cn/s/51feb50c6… 提取码:8S7R

运行下载文件,按提示进行安装。运行Docker Desktop。

在拉取Docker资源时候,考虑到网络环境差异问题,需要给Docker Desktop配置国内镜像的地址,可以极大提高Docker内镜像资源的下载速度。配置方法如下图:

Docker.png

在Docker Engine中将下面的国内镜像地址与设置中的registry-mirrors进行替换。

"registry-mirrors": [
        "https://hub.uuuadc.top",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.jobcher.com",
        "https://dockerhub.icu",
        "https://docker.ckyl.me",
        "https://docker.awsl9527.cn"
    ]

Docker2.png

配置docker-compose.yml和config.json文件

docker-compose.yml是用于Docker容器内所需组件自动化下载安装配置的文件,config.json是用于配置本地知识库所需要的大模型配置。

官方的配置文件下载方式如下:

mkdir fastgpt #在Linux创建fastgpt文件夹
cd fastgpt    #打开fastgpt文件夹
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json

# pgvector 版本(测试推荐,简单快捷)
curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml
# milvus 版本
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-milvus.yml
# zilliz 版本
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-zilliz.yml

但是链接不稳定,下面提供本地的资源: 链接:pan.quark.cn/s/51feb50c6… 提取码:8S7R

使用本地资源,需要先在Linux系统中创建fastgpt文件夹

mkdir fastgpt #在Linux创建fastgpt文件夹

对于docker-compose.ymlconfig.json需要修改部分配置。

在修改配置前,如果你是使用VSCode的用户可以,对Wsl进行功能扩展,使用Vscode进行文件新增和修改。 在Liunx命令行(windows运行ubantu后出现的命令行窗口)中运行下面两条指令,确保WSL Linux 发行版缺少启动 VS Code 服务器所需的库加入Linux 发行版中。

sudo apt-get update
sudo apt-get install wget ca-certificates

运行结束后,在Liunx命令行运行 code .命令,会自动下载相关组件后跳转VSCode

VS Code.png

VS Code2.png

就可以在Linux系统中新增和修改文件了,将docker-compose.ymlconfig.json两个配置文件拖入前面创建fastgpt文件夹中。

参考微软官方文章:开始通过 WSL 使用 VS Code | Microsoft Learn

docker-compose.yml

mongo

需要找到mongo的配置位置,修改下载的版本。

moDb.png

image: mongo:5.0.18

将镜像版本改为5.0.18,如果Docker中配置的本地镜像失效,可以使用阿里云的本地镜像。

fastgpt

需要找到fastgpt的配置位置,修改下面内容。

FastGpt.png

修改OPENAI_BASE_URL的内容。

- OPENAI_BASE_URL=http://host.docker.internal:3001/v1

修改 CHAT_API_KEY,这里填写后续在OnaApi中设置的秘钥。

one api

如果使用latest版本报错403, xxx 向量模型没有权限 403,就修改下版本为早一点的版本。v0.6.4。

如果Docker中配置的本地镜像失效,可以使用阿里云的本地镜像。

OneApi.png

config.json

llmModels是本地使用的大模型名称,需要与OpenAI中标准名一致,可以在Windows CMD命令行窗口中输入ollama list,查询ollama中的模型,里面提供的则是模型标准名。

llmName.png

llm.png

vectorModels是本地使用的向量模型名称。

安装构建所需的镜像

在Linux命令行(windows运行ubuntu后出现的命令行窗口)中输入 cd fastgpt命令打开docker-compose.yml文件所在文件夹。

使用ls查看文件夹下所有的文件,确认是否有docker-compose.yml和config.json文件。

ls.png

在Linux命令行(windows运行ubantu后出现的命令行窗口)中输入 docker-compose up 后,Docker开始使用docker-compose文件自动装配需要的镜像,待出现下面情况表示镜像装配完成并运行。

Running.png

还可以通过Docker Desktop查看镜像运行情况。

DockerRunning.png

注意点

1.这里可能会出现MySql启动失败的情况,并且报错显示端口已被占用。可以在任务管理器->进程中搜索mysql,将当前进程停止,再重新运行docker-compose up指令。

2.每次修改完配置文件保存后都需要重新运行docker-compose up指令。

配置本地大模型及知识库搭建

OneApi配置

前端的FastGpt和后端的大模型、向量模型等都是通过OneApi进行桥接的。所以需要在OneApi上进行相应的配置。

大模型配置

1.在浏览器中访问localhost:3001(docker-compose文件中映射的端口)进入OneApi主页。选择渠道 -> 添加新的渠道来新增大模型访问渠道。

OneApi2.png

2.进入渠道页面后,进行配置:

类型:因为我们使用Ollama管理大模型,这里直接选择Ollama。

名称:自行定义。

分组:可以直接使用默认。

模型:先清除所有模型,如果在下拉列表中没有你使用的模型类型,则在自定义模型中,填入模型名称(前面在ollama list中查询的模型名称)。

模型重定向:暂时可不做修改。

秘钥:先填写1234,后续在令牌中设定秘钥后,填写过来。

代理:填写http://host.docker.internal:11434,这个是Docker内部访问外部的地址。特别要注意host.docker.internal 是一个开发功能,只在 Docker Desktop 有效。

OneApi3.png

填写完成后提交。

3.进入令牌界面,新增令牌。

OneApi4.png

进入令牌界面后,进行配置:

名称: 自行定义。

模型范围:不需要限定模型的话可以不做填写。

IP限制:不需要限定IP的话可以不做填写。

过期时间:选择永不过期

额度:选择 设为无限额度

OneApi5.png

设置完成后进行提交。

回到令牌界面,在操作栏中复制刚刚设置的令牌。将其中填入前面新增的大模型渠道的秘钥中后提交。

OneApi7.png

OneApi8.png

OneApi6.png

在渠道界面对配置好的渠道进行测试,出现测试成功的弹窗,这样OneApi就配置完成了。

OneApi10.png

此时不能掉以轻心,还需要回去填一个坑。在docker-compose文件的FastGPT中需要设置刚刚配置好的秘钥,这样FastApi才能够通过OneApi访问本地大模型。

OneApi11.png

向量模型配置

操作方法一致但不需要密钥配置环节,所以在创建渠道时,可以直接将秘钥设为1234

OneApi12.png

进行测试时提示400错误,不用担心,是正常的,说明通信成功。

OneApi13.png

FastGPT配置

1.在浏览器中访问localhost:4000进入FastGpt主页。默认账号:root密码:1234

2.登录进入FastGpt后,先创建知识库。

知识库.png

知识库创建完成后,对知识库导入相应的知识库数据。一共有三种方式:

手动数据集:直接将相应的知识一条一条录入。

文本数据集:可以通过上传文件,网页等方式导入信息。

表格数据集:根据fasGpt给出的CVS模板将知识录入表格后上传。

这里我们使用文本数据集的方式导入一份文件。

FastGpt4.png

FastGpt5.png

文件可以通过三种方式进行拆分:

直接拆分:将文本按一定规则进行拆分。(直接用这个)

增强处理:通过子索引以及模型生成相关问题和摘要。(商业版)

问答拆分:将文本按一定规则进行拆分,并通过Ai生成问答对。(商业版)

FastGpt6.png

文章生成索引对,可以通过搜索测试检测知识库导入情况。

FastGpt7.png

知识库导入成功后,就可以根据知识库搭建实时库问答式平台。

fastGpt9.png

fastGpt10.png

选定需要的大模型

fastGpt11.png

选定需要关联的知识库

FastGpt12.png

在参数配置中选择全文检索。如果使用语义检索只会检索与问题相关向量片段,在通过Ai增强生成答案,大模型不需要知道整篇文章的内容,速度快,但生成点的答案相对没那么准确。

在调试预览中对大模型进行提问,生成答案。因为配置问题生成答案的速度较慢。

屏幕截图 2024-08-15 180955.png

测试无问题后,选择发布,就可以在聊天选项卡中进行聊天。

fastGpt15.png

扩展

希望查询的结果更加的准确,则可以添加结果重排功能。需要再OneApi中增加Reranker模型,在FastGpt中勾选结果重排功能。

使用结果重排需要消耗更多性能,搜索时间加长,属于是使用性能和时间换准确性。

参考文章:

fastgpt最强AI知识库喂饭教程 - 逆行的狗 (auditdog.cn)

FastGpt官方文档

外网访问本地知识库

使用Ngrok工具实现内网穿透,让用户可以通过Ngrok提供的地址通过外网访问本地知识库,且本地知识库需要保持运行状态。此方法并非完全安全,可选择使用。

安装Chocolatey

Chocolatey 是一种软件包管理解决方案,可以通过PowerShell命令行安装软件。在 Windows 操作系统上实现从安装到升级和卸载的整个软件生命周期的自动化,能部署到任何有windows的地方(除了Nano),包括 Server.Core 和 Windows Docker 容器。

使用管理员权限打开PowerShell并运行下面的命令:

PowerShell.png

设置环境变量。

$env:ChocolateyInstall = 'D:\Chocolatey'
[Environment]::SetEnvironmentVariable('ChocolateyInstall', $env:ChocolateyInstall, 'Machine')

安装 Chocolatey。

Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

安装完成后,在PowerShell中运行命令。

choco -v

显示版本成功,则表示安装完成。

Choco.png

参考文章: Chocolatey安装【超详细 下载 安装 卸载 更改默认软件安装位置】-CSDN博客

安装Ngrok

使用管理员身份运行Windows命令提示符窗口,在命令行中运行下方指令运行结束后,安装完成。

Cmd.png

choco install ngrok

安装完成后,还需要在Ngrok官网申请一个身份令牌,先注册一个Ngrok账号。

登录账号,在Your Authtoken中的CommandLine,(特别重要)选择Show Authtoken,命令行中的代码才会显示你的用户token此时复制命令,在Windows CMD命令行窗口中运行。

NGROK.png

运行结束后,在Windows CMD命令行窗口中运行以下命令,也就是给本地fastGpt生成可在外网访问的地址。

ngrok http http://localhost:4000

运行结束后显示外网地址,就可以通过当前地址访问本地的知识库了。

Ngrok2.png

微信图片_20240815201102.png

总结

以上就是使用本地部署大模型构建本地知识库的完整方法。示例项目使用的设备配置为:

CPU :AMD Ryzen 7 4800H

GPU: NVIDIA GeForce RTX 2060 Max-Q(显存6G)

内存:16G

运行LLama3.1 8B 模型

整体来说还是比较吃力的,如果需要流畅运行内存、显存及显卡性能还得提高。