目录
搭建本地私有知识问答系统:MaxKB、Ollama 和 Llama3 实现指南
引言
在当今信息爆炸的时代,构建一个本地私有知识问答系统可以帮助组织和个人高效管理和利用知识。本文将详细介绍如何在本地 Windows 环境下,利用 MaxKB、Ollama 和 Llama3 搭建一个功能强大的私有知识问答系统。
MaxKB+Ollama+Llama 3 Start building
MaxKB 简介:
MaxKB 是一款基于 LLM 大语言模型的开源知识库问答系统,旨在成为企业的最强大脑,支持从多种数据源导入和管理知识。。
- 开箱即用:支持直接上传文档、自动爬取在线文档,支持文本自动拆分、向量化、RAG(检索增强生成),智能问答交互体验好;
- 模型中立:支持对接各种大语言模型,包括本地私有大模型(Llama 3 / Qwen 2 等)、国内公共大模型(通义千问 / 智谱 AI / 百度千帆 / Kimi / DeepSeek 等)和国外公共大模型(OpenAI / Azure OpenAI / Gemini 等);
- 灵活编排:内置强大的工作流引擎,支持编排 AI 工作过程,满足复杂业务场景下的需求;
- 无缝嵌入:支持零编码快速嵌入到第三方业务系统,让已有系统快速拥有智能问答能力,提高用户满意度。
(1.1 ~ 1.3三种方法三选一即可)
1.1、docker部署 MaxKB(方法一)
1.1.1、启用wls或是开启Hyper
- 允许创建和管理虚拟机,且允许用户在 Windows 上运行原生的 Linux 命令行工具和应用程序,而无需使用虚拟机或双重启动系统。
方案一:安装wls2 并启用 (Windows 10、Windows 11 ) √
# 输入以下命令来启用 WSL:
wsl --install
# 如果已经启用但未安装特定版本,可以使用如下命令启用 WSL 2:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 设置 WSL 2 作为默认版本:
wsl --set-default-version 2
可以通过任务管理器 ‘performance CPU’ 界面查看是否开启
-
使用 WSL 2 的优势
- 更高的性能:与 Hyper-V 相比,WSL 2 提供了更高的文件系统性能。
- 完全的系统调用兼容性:WSL 2 使用真正的 Linux 内核,确保了对 Linux 系统调用的完全兼容。
- 更好的资源利用:WSL 2 更有效地利用主机资源。
方案二:开启Hyper-V (window 7)
1.1.2、安装docker
如果docker不是自启动需要手动修改下
1.1.3、docker部署 MaxKB (Max Knowledge Base)
部署 maxkb
# 我们可以指定本地文件夹挂载,这样可以便于我们维护配置
docker run -d --name=maxkb -p 8080:8080 -v C:\Leojiang\leojiangDocument\AI\maxkb:/var/lib/postgresql/data cr2.fit2cloud.com/1panel/maxkb
MaxKB 默认登录信息
http://目标服务器 IP 地址:目标端口
用户名:admin
默认密码:MaxKB@123..
1.2、使用1Panel 部署 MaxKB(方法二)
选择使用 1Panel 部署,安装完后在1Panel中搜索MaxKB安装即可,此处不再赘述。
1.3、wsl启用Linux,在Linux中使用docker 部署 MaxKB(方法三,本文选用)√
某些公司电脑禁用docker desktop可以选用此方法
- Docker Desktop从2021年8月31日开始收费。Docker Desktop的转变是为了提供更好的服务和支持,但这也意味着对于那些不符合免费使用条件的用户,需要支付一定的费用。具体来说,Docker Desktop现在被称为Docker Personal,主要免费提供给小型企业、个人、教育机构和非商业开源项目使用。对于商业用户,特别是那些员工超过250人或年收入超过1000万美元的公司,使用Docker Desktop需要进行付费订阅
1.3.1、启用并设置 wls2
# 检查是否WSL运行 distributions
#wsl --list --running
# 检查 WSL 状态:
#wsl --list --verbose
# 输入以下命令来启用 WSL:
#wsl --install
# 查看商店提供了哪些发行版
wsl --list --online
# 启用Windows子系统,可以使用如下命令启用 WSL 2:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 设置 WSL 2 作为默认版本:
wsl --set-default-version 2
1.3.2、安装ubuntu
wsl --install -d Ubuntu
安装后报错
WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel
需要更新解决
wsl.exe --update
1.3.3、登录、退出 ubuntu
# cmd中直接输入ubuntu即可登录
ubuntu
FYI:登出ubuntu(跳过)
# 登出ubuntu
exit
# or
logout
1.3.4、配置网络 (如果可以连接网络,跳过 1.3.4 即可)
测试网络连接
ping 8.8.8.8
curl https://www.baidu.com
# 如果有代理,可以指定代理测试
curl --proxy <proxy_url> --tlsv1.2 -v https://www.google.com
1)如果无法联网,请配置修改DNS地址可临时生效:
# 修改 /etc/resolv.conf 添加如下DNS
# 这两个 IP 地址是 Google 提供的公共 DNS 服务器
nameserver 8.8.8.8
nameserver 8.8.4.4
# 查看windows主机使用的DNS,配置DNS和宿主机一致即可
打开 设置,点击 网络和 Internet。最下方有网络的配置详情
# or 打开powershell
输入Get-DnsClientServerAddress 或ipconfig /all获取
生效DNS
# 重启生效DNS
sudo systemctl restart systemd-resolved
# 使用 resolvectl 检查 DNS 设置
resolvectl status
# 配置DNS后还是无法联网可以尝试清理DNS的缓存
sudo resolvectl flush-caches
2)配置永久生效
禁用 WSL 自动生成 resolv.conf
,否则开机会自动覆盖。重启再配置/etc/resolv.conf 即可。
cat /etc/wsl.conf
# 添加如下两行
[network]
generateResolvConf = false
1.3.5、登录Ubuntu 系统中安装docker
安装docker
①设置Docker的apt存储库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl openssl
sudo install -m 0755 -d /etc/apt/keyrings
# 添加 Docker 官方 GPG 密钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
②安装Docker包。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
FYI: 如果无法下载更新请配置代理
# --- 方法一 ---
sudo vim /etc/environment
# 添加如下行
export http_proxy="http://your_proxy:port"
export https_proxy="http://your_proxy:port"
export ftp_proxy="http://your_proxy:port"
export no_proxy="localhost,127.0.0.1,::1"
# 保存退出并生效
source /etc/environment
# --- 方法二 ---
# 或是配置 ~/.profile 都可以
export http_proxy="http://your_proxy:port"
export https_proxy="http://your_proxy:port"
export ftp_proxy="http://your_proxy:port"
export no_proxy="localhost,127.0.0.1,::1"
# 保存退出并生效
source ~/.profile
③给予当前用户docker执行权限。
sudo gpasswd -a <username> docker
1.3.6、下载MaxKB
sudo docker run -d --name=maxkb -p 8080:8080 -v ~/.maxkb:/var/lib/postgresql/data cr2.fit2cloud.com/1panel/maxkb
安装成功后,可通过浏览器访问 MaxKB:
http://目标服务器 IP 地址:目标端口
默认登录信息
用户名:admin
默认密码:MaxKB@123..
如果电脑重启后 MaxKB exited,我们可以手动启 docker start containerID
2、部署 OLama
Ollama 是一个自然语言处理(NLP)平台,提供了一系列的预训练模型和工具,便于实现各种NLP任务。
下载OLama
注意如若你的选择是 window 部署,要求必须window10 以上才支持。
Linux 部署 OLlama (本文选用)√
curl -fsSL https://ollama.com/install.sh | sh
查看信息
ollama serve
listen tcp 127.0.0.1:11434: bind: address already in use
Ollama supports a list of models
Model | Parameters | Size | Download |
---|---|---|---|
Llama 3 | 8B | 4.7GB | ollama run llama3 |
Llama 3 | 70B | 40GB | ollama run llama3:70b |
Phi 3 Mini | 3.8B | 2.3GB | ollama run phi3 |
Phi 3 Medium | 14B | 7.9GB | ollama run phi3:medium |
Gemma 2 | 9B | 5.5GB | ollama run gemma2 |
Gemma 2 | 27B | 16GB | ollama run gemma2:27b |
Mistral | 7B | 4.1GB | ollama run mistral |
Moondream 2 | 1.4B | 829MB | ollama run moondream |
Neural Chat | 7B | 4.1GB | ollama run neural-chat |
Starling | 7B | 4.1GB | ollama run starling-lm |
Code Llama | 7B | 3.8GB | ollama run codellama |
Llama 2 Uncensored | 7B | 3.8GB | ollama run llama2-uncensored |
LLaVA | 7B | 4.5GB | ollama run llava |
Solar | 10.7B | 6.1GB | ollama run solar |
FYI:查看端口
# netstat现在已经被 ss 工具所替代
ss -tunlp
3、选择Llama3进行部署
Llama 3 是基于 Transformer 架构的大型语言模型,强大的文本生成能力,旨在处理各种自然语言处理任务,
如文本生成、翻译、摘要、问答等。它通过大规模预训练和精调,能够在广泛的领域中提供高质量的语言理解和生成能力,可以用于问答、对话生成等任务。
我们可以在OLama的页面找到支持的模型,我们选择 llama3 作为我们的LLM
本文选用的是 llama3:8B,个人使用调试是可以满足需求的,当然读者服务器足够好也可以选择70B
# 默认下载的就是llama3:8B
ollama run llama3
测试
FYI:ubuntu上只能输入英文,如果你是在window上安装的,你可以使用 chcp进行切换,进行中文交流。
chcp # 查看当前的代码页
chcp 936 # 切换成中文
常见的代码页
437: 美国英语(原始 MS-DOS)
936: 简体中文(GBK)
950: 繁体中文(Big5)
65001: UTF-8(Unicode)
4、mapping MaxKB + OLlama + Llama 3
4.1、我们可以先导入一个个人的知识库
选择智能导入即可
4.2、添加我们下载好的模型
根据我上面安装的配置即可
模型名称:llama3
基础模型:llama3 (要和我们安装的 llama 名字一致)
API域名:http://:11434
4.3、如果API域名无效
MaxKB无法连接ubuntu中的ollama,
1)可以在ollama中添加 Environment="OLLAMA_HOST=0.0.0.0"
允许所有ip可以访问,如下配置:(方法一 本文选用)√
sudo vim /etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_HOST=0.0.0.0"
[Install]
WantedBy=default.target
重新加载生效
sudo systemctl daemon-reload
sudo systemctl restart ollama
2)方法二(跳过)
可以在我们docker启动MaxKB时传入ollama的环境变量,eg:
# docker run -e OLLAMA_HOST=<your server ip> <your-docker-image>
# eg:
sudo docker run -d --name=maxkb -p 8080:8080 -e OLLAMA_HOST=172.20.48.1 -v ~/.maxkb:/var/lib/postgresql/data cr2.fit2cloud.com/1panel/maxkb
如果你使用的是docker-compose.yaml,可以像如下加入参数即可
version: '3.8'
services:
maxkb:
image: cr2.fit2cloud.com/1panel/maxkb
container_name: maxkb
ports:
- "8080:8080"
environment:
- OLLAMA_HOST=172.20.48.1
volumes:
- ~/.maxkb:/var/lib/postgresql/data
- /etc/hosts:/etc/hosts:ro
restart: always
OLlama环境变量配置文件参考
4.4、创建问答系统应用
让我们问一个知识库中的知识,做一个测试
(通过本文的指南,你可以在 Windows 环境下成功搭建一个基于 MaxKB、Ollama 和 Llama3 的本地私有知识问答系统。这个系统可以帮助你高效管理和利用知识,提高工作效率。希望这篇文章能对你有所帮助!)
参考地址汇总
Llama3也可以从huggingface中找相关微调好的下载
特性 | LangChain | Ollama |
---|---|---|
主要用途 | 构建复杂语言模型驱动的应用程序 | 简化语言模型的部署和管理 |
模型支持 | 多个供应商的模型(OpenAI、Hugging Face 等) | 主要聚焦于特定供应商的模型 |
记忆管理 | 提供对话记忆管理 | 主要关注模型调用和管理 |
工具集成 | 支持集成多种外部工具和 API | 主要提供简化的部署和管理工具 |
工作流管理 | 支持构建和管理复杂工作流 | 提供基本的模型调用和管理功能 |
适用场景 | 聊天机器人、文本生成、数据分析等 | 快速原型开发、模型管理、低延迟服务 |
开发者友好性 | 提供丰富的工具和接口 | 提供简化的 API 和 SDK |