部署知识库问答系统 MaxKB
一、Flexus 云服务器 X 实例介绍
1.1 云服务器介绍
云服务器是一种通过互联网提供虚拟化计算资源的服务,用户可按需租用存储、数据库、网络等资源。它具有高可用性、可扩展性和灵活性,支持按使用量付费,适合各种规模的企业和个人开发者,以实现成本效益和业务敏捷性。
华为云下一代云服务器 Flexus X 实例焕新上线,新产品具备柔性算力,六倍性能,旗舰体验,覆盖高科技、零售、金融、游戏等行业大多数通用工作负载场景,从而帮您快速上云!

Flexus X 实例通过和其他服务组合,具备计算、镜像安装、网络、存储、安全等能力,您可根据业务需要灵活配置各资源。


本次测评使用的规格是:4 核 12G-100G-3M 规格的 Flexus X 实例基础模式

1.2 核心竞争力
• 柔性算力随心配首创 CPU 内存规格灵活定义,突破 1:2 次幂的固有配比,实现 1:3、2:5 等自定义特殊规格,量身匹配业务性能诉求
• 一直加速一直快首创大模型 QoS 保障,智能全域调度,算力分配长稳态运行,一直加速一直快
• 越用越省降本多针对迁移场景智能资源预画像,帮助用户在华为云上推荐匹配的资源规格,降本可达 30%
• 安全可靠更放心拥有国内最大 SRE 团队之一,基于华为云定性运维理念,确保云服务超高可用性
1.3 计费模式
二、Flexus 云服务器 X 实例配置
2.1 重置密码
购买完成后,会短信通过你的云服务器信息,重点是公网 IP 地址和用户名。首先我们需要打开你的服务器控制台,完成重置密码

勾选自动重启,点击确定即可。

2.2 服务器连接
• 方式一:使用控制台提供的 VNC 方式登录
• 方式二:使用 Putty、Xshell 等工具登录 Linux 弹性云服务器,a)下载安装登录工具,例如 Putty。b)输入弹性公网 IP。c)输入用户名:root、密码,单击“确定”。
• 方式三:使用 Linux/Mac OS 系统主机登录 Linux 弹性云服务器。a)执行连接命令。ssh 弹性公网 IP 例如:ssh 123.xxx.xxx.456b)输入用户名:root、密码,登录服务器。
我个人习惯使用 MobaXterm 这款软件,添加 SSH 连接,输出公网 IP、用户名和端口(默认 22),连接即可。

2.3 安全组配置
安全组是一个逻辑上的分组,为同一个 VPC 内的云服务器提供访问策略。用户可以在安全组中定义各种访问规则,当云服务器加入该安全组后,即受到这些访问规则的保护。
系统为每个网卡默认创建一个默认安全组,默认安全组的规则是对出方向上的数据报文全部放行,入方向访问受限。您可以使用默认安全组,也可以根据需要创建自定义的安全组。

主要需要填写优先级(默认填 1 即可)、协议端口信息(一般选择你项目需要暴露的端口即可),其他默认点击确定即可。安全组配置主要是暴露端口可以给外网访问。

如果还不清楚可以参考文档:安全组配置示例
三、部署 MaxKB
3.1 MaxKB 介绍
MaxKB = Max Knowledge Base,是一款基于大语言模型和 RAG 的开源知识库问答系统,广泛应用于企业内部知识库、客户服务、学术研究与教育等场景。
• 开箱即用支持直接上传文档、自动爬取在线文档,支持文本自动拆分、向量化、RAG(检索增强生成),智能问答交互体验好;
• 无缝嵌入支持零编码快速嵌入到第三方业务系统,让已有系统快速拥有智能问答能力,提高用户满意度;
• 灵活编排内置强大的工作流引擎,支持编排 AI 工作流程,满足复杂业务场景下的需求;
• 模型中立支持对接各种大语言模型,包括本地私有大模型(Llama 3 / Qwen 2 等)、国内公共大模型(通义千问/智谱 AI /百度千帆/ Kimi /腾讯混元/ DeepSeek 等)和国外公共大模型(OpenAI / Azure OpenAI / Gemini / Claude 等)。

知识库问答系统 MaxKB 的意义在于,它不仅能够理解自然语言查询,还能从大规模知识库中快速检索相关信息,从而生成高质量的答案。这对于提升客户服务体验、加速企业决策流程、支持科学研究等多个领域都有着重要的应用价值,使得机器能够更加智能地辅助人类解决实际问题。
• 官网:https://maxkb.cn/
• Github:https://github.com/1Panel-dev/MaxKB
3.2 Docker 环境搭建
本次服务器环境是 ubuntu 系统镜像,需要自己安装 docker 环境
使用 apt-get 命令安装 docker 及其配置
#安装必要工具包 $ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common#添加 Docker GPG 秘钥 $ sudo curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -#配置仓库源 $ sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" #更新 apt 包索引 $ sudo apt-get update#安装 docker$ sudo apt-get install docker-ce docker-ce-cli containerd.io#添加 docker 镜像源 $ sudo vim /etc/docker/daemon.json{ "registry-mirrors": [ "https://ustc-edu-cn.mirror.aliyuncs.com/", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn", "https://ccr.ccs.tencentyun.com/", "https://docker.m.daocloud.io/", "https://dockerproxy.com", ]}#重启 $ sudo systemctl daemon-reload$ sudo systemctl restart docker
测试 docker 安装是否成功
root@flexusx-c6b3:~# docker -vDocker version 27.2.0, build 3ab4256```
检查 docker 服务状态
root@flexusx-c6b3:~# systemctl status docker* docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2024-08-30 15:53:45 CST; 17h agoTriggeredBy: * docker.socket Docs: https://docs.docker.com Main PID: 24912 (dockerd) Tasks: 13 Memory: 24.7M CPU: 3.778s CGroup: /system.slice/docker.service `-24912 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
检查 docker compose 版本
root@flexusx-c6b3:~# docker compose versionDocker Compose version v2.29.2
3.3 MaxKB 部署
• 创建 docker-compose.yml
version: "3.5"services: maxkb: image: cr2.fit2cloud.com/1panel/maxkb container_name: maxkb restart: unless-stopped ports: - "3456:8080" volumes: - ./maxkb:/var/lib/postgresql/data - ./python-packages:/opt/maxkb/app/sandbox/python-packages
• volumes:映射容器内部文件路径到本地
• ports:配置访问端口
如果将上述代码片段保存在名为 docker-compose.yml 的文件中,则只需从同一文件夹中运行 docker compose up -d 即可自动拉取 MaxKB 镜像,并创建并启动一个容器。up 表示启动服务,-d 表示在后台执行。docker-compose down 命令用于停止和清理由 docker-compose up 启动的服务。
• 配置安全组
在 Flexus 云服务器 X 实例的安全组管理页面,添加入方向规则,接下来我们启动服务需要监听 3456 端口,所以添加安全组为 TCP:3456 协议端口。

• 启动服务
进入项目目录,执行 docker compose up -d 启动命令,会自动拉取容器并运行
从 Dockerhub 拉取 MaxKB 镜像,地址:https://hub.docker.com/r/1panel/maxkb
root@flexusx-c6b3:~/maxkb# docker-compose up -dCreating network "maxkb_default" with the default driverPulling maxkb (cr2.fit2cloud.com/1panel/maxkb:latest)...latest: Pulling from 1panel/maxkb8a1e25ce7c4f: Pull completeb2be002daccf: Pull complete71dff0956c31: Pull complete962627501404: Pull completec23077a7a05a: Pull complete40632b8e7084: Pull completecfbec5f1dac7: Pull completed1743de7c97b: Pull completec9cde040a07c: Pull complete3a23a8d46005: Pull completef499f39f0f2d: Pull complete2cf0f5381fa5: Pull complete89f512733a11: Pull complete45deb7326cc7: Pull complete4da1588ee668: Pull completed3f2ea1b2dc4: Pull completea651e1af8a2c: Pull completeb0f10305f06f: Pull complete25d51f67048a: Pull complete2b72b0c37d09: Pull completeDigest: sha256:25a2f81682da5dff39b95aeb331c069eb29449be809b80b8b0105ea3f1f6e064Status: Downloaded newer image for cr2.fit2cloud.com/1panel/maxkb:latestCreating maxkb ... Creating maxkb ... done
• 检查容器状态
检查 MaxKB 容器状态,确保容器正常启动
root@flexusx-c6b3:~/maxkb# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb032cd415d31 cr2.fit2cloud.com/1panel/maxkb "bash -c /usr/bin/ru…" About a minute ago Up 53 seconds 5432/tcp, 0.0.0.0:3456->8080/tcp, :::3456->8080/tcp maxkb
• 访问地址
内网:http://localhost:3456 外网:http://公网 IP:3456
• 访问结果

若出现此页面,则部署 maxkb server 成功。
3.4 MaxKB 使用
输入默认的用户名和密码,完成登录
默认登录信息用户名:admin 密码:MaxKB@123..

登录后需要重新修改密码,修改完成后就可以进入主页面了

登录 MaxKB 系统后,可以在系统管理 - 模型设置 中添加模型,也可以在创建应用时再添加模型

在供应商中选择【Ollama】,然后点击【添加模型】,进入 Ollama 表单,点击【添加】后校验通过则添加成功,便可以在应用的 AI 模型列表选择该模型
• 模型名称:MaxKB 中自定义的模型名称。
• 模型类型:大语言模型或向量模型。
• 基础模型:供应商的 LLM 模型,支持自定义输入,但需要与供应商的模型名称保持一致,系统会自动下载部署模型。
• API 域名和 API Key: Ollama 服务地址,例如:http://42.92.198.53:11434。若没有设置 API Key,可以输入任意字符。

这里填入的 API 域名为之前部署的 ollama,可以通过此网址和端口,如http://123.60.144.170:11434,进行测试是否是可用的,出现 Ollama is running 则是可用的

添加完成后,就可以显示在全部模型列表中了,默认是有一个 maxkb-embedding 的向量模型的

打开知识库 页面,点击创建知识库,进入创建知识库页面。输入知识库名称、知识库描述、向量模型、选择通用型知识库类型

然后将离线文档通过拖拽方式或选择文件上传方式进行上传,支持文本文件格式为:Markdown、TXT、PDF、DOCX、HTML

设置分段规则,目前 MaxKB 支持智能分段以及高级分段两种分段方式。
智能分段(1)MarkDown 类型的文件智能分段规则:根据标题逐级下钻式分段(最多支持 6 级标题),每段的字符数最大为 4096 个字符;当最后一级的文本段落字符数超过设置的分段长度时,会查找分段长度以内的回车进行截取。(2)HTML、DOCX 类型的智能分段规则:识别标题格式转换成 markdown 的标题样式;逐级下钻进行分段(最多支持 6 级标题)每段的字符数最大为 4096 个字符。(3)TXT 和 PDF 类型的文件智能分段规则:按照标题 #进行分段,若没有 #标题的则按照字符数 4096 个字符进行分段;查找分段长度以内的回车进行截取。

还可以选择高级分段,需要自己更根据上传的文件设置规则
高级分段用户可以根据文档规范自定义设置分段标识符、分段长度及自动清洗。
• 分段标识支持:#、##、###、####、#####、######、-、空行、回车、空格、分号、逗号、句号,还可以手动输入分段标识符。
• 分段长度:支持最小 50 个字符,最大 4096 个字符。
• 自动清洗:开启后系统会自动去掉重复多余的符号如空格、空行、制表符等。

开始导入后,会先索引中,等待文件状态变成成功即可

点击创建应用,输入应用名称,选择简易配置应用,点击创建

应用创建完成,进入简易配置应用的设置页面,左侧为应用信息,右侧为调试预览界面
• 应用名称:用户提问时对话框的标题和名字。
• 应用描述:对应用场景及用途的描述。
• AI 模型:在【系统设置】-【模型管理】中添加的大语言模型。
• 提示词:系统默认有智能知识库的提示词,用户可以自定义通过调整提示词内容,可以引导大模型聊天方向.
• 多轮对话:开启后当用户提问时,将携带用户在当前会话中最后 3 个问题;不开启则仅向大模型提交当前问题。
• 关联知识库:用户提问后会在关联的知识库中检索分段。
• 开场白:用户打开对话时,系统弹出的问候语。支持 Markdown 格式;[-]后的内容为快捷问题,一行一个。
• 问题优化:对用户提出的问题先进行一次 LLM 优化处理,将优化后的问题在知识库中进行向量化检索;开启后能提高检索知识库的准确度,但由于多一次询问大模型会增加回答问题的时长。

知识库还可以进行参数设置,比如检索模式
• 检索:使用向量模型通过向量距离计算与用户问题最相似的文本分段;
• 全文检索:通过关键词检索,返回包含关键词最多的文本分段;
• 混合检索:同时执行全文检索和向量检索,再进行重排序,从两类查询结果中选择匹配用户问题的最佳结果。

应用信息设置完成后,可以在右侧调试预览中进行提问预览

在应用列表页面,在概览页面点击演示或在浏览器中复制公开访问链接进入问答页面进行提问

访问公开访问链接,可以分享给他人使用

我们来查看下 MaxKB 的映射文件路径下的结构
root@flexusx-c6b3:~/maxkb# tree -L 1.|-- docker-compose.yml|-- maxkb`-- python-packages2 directories, 1 file
• maxkb 即为 postgresql 数据库目录
• python-packages 即为 python 库依赖目录
基于 MaxkB 搭建本地知识库问答系统,能够实现对敏感数据的本地化存储与管理,确保信息安全。同时,该系统支持快速检索与智能生成,帮助企业或个人高效利用已有知识,提升工作效率。适用于教育培训、企业内部知识分享等多种场景,促进知识积累与创新应用。MaxkB 的基本使用就操作到此了,添加模型、添加知识库、添加应用和使用应用操作,其中对文档文件的检索设置还需要仔细研究下,还有更多有趣的设置和功能就需要自行探索了。
四、总结
基于大型语言模型和检索增强生成(RAG, Retrieval-Augmented Generation)的知识库问答系统结合了深度学习的强大文本生成能力和结构化数据的精确检索优势,能够在回答复杂问题时提供更准确、上下文相关的响应。此次使用的 Flexus X 实例配置还是很高的 4 核 12G-100G-3M 规格的基础模式,在回答过程中,输出比较缓慢,我这里将 ollama 部署在了同一个服务器上了,使用的模型的是 llama2:7b,没有限制最大 CPU 和内存使用,使用纯 CPU 推理的,回答问题时 CPU 和内存都会上升,但整体负载评估是运行流畅。

华为云服务器,以卓越的性能和稳定性著称,提供灵活的资源配置,满足不同业务需求。现在正值 828 B2B 企业节,享受限时优惠,免费试用和专属技术支持,让您的业务更上一层楼。立即行动,体验华为云的高效与便捷,助力您的企业快速成长。

