Bootstrap

828华为云征文|部署知识库问答系统 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 计费模式

计费模式包年/包月按需计费
付费方式预付费按照订单的购买周期结算。后付费按照云服务器实际使用时长计费。
计费周期按订单的购买周期计费。秒级计费,按小时结算。
关机是否计费关机对包年/包月的X实例计费无影响。云服务器按订单的购买周期计费。关机后,基础资源(包括vCPU、内存、镜像)不计费。其他绑定资源(如云硬盘、弹性公网IP、带宽等)正常计费。
是否支持变更规格支持变更实例规格。支持变更实例规格。
是否支持备案支持备案。需包月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.456
    b) 输入用户名: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环境

服务器类别系统镜像内网IP地址Docker版本操作系统版本
Flexus云服务器X实例Ubuntu192.168.0.16827.2.0Ubuntu 22.04.4 LTS

使用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 -v
Docker 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 ago
TriggeredBy: * 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 version
Docker 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 -d
Creating network "maxkb_default" with the default driver
Pulling maxkb (cr2.fit2cloud.com/1panel/maxkb:latest)...
latest: Pulling from 1panel/maxkb
8a1e25ce7c4f: Pull complete
b2be002daccf: Pull complete
71dff0956c31: Pull complete
962627501404: Pull complete
c23077a7a05a: Pull complete
40632b8e7084: Pull complete
cfbec5f1dac7: Pull complete
d1743de7c97b: Pull complete
c9cde040a07c: Pull complete
3a23a8d46005: Pull complete
f499f39f0f2d: Pull complete
2cf0f5381fa5: Pull complete
89f512733a11: Pull complete
45deb7326cc7: Pull complete
4da1588ee668: Pull complete
d3f2ea1b2dc4: Pull complete
a651e1af8a2c: Pull complete
b0f10305f06f: Pull complete
25d51f67048a: Pull complete
2b72b0c37d09: Pull complete
Digest: sha256:25a2f81682da5dff39b95aeb331c069eb29449be809b80b8b0105ea3f1f6e064
Status: Downloaded newer image for cr2.fit2cloud.com/1panel/maxkb:latest
Creating maxkb ... 
Creating maxkb ... done
  • 检查容器状态

检查 MaxKB 容器状态,确保容器正常启动

root@flexusx-c6b3:~/maxkb# docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED              STATUS          PORTS                                                 NAMES
b032cd415d31   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-packages

2 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企业节,享受限时优惠,免费试用和专属技术支持,让您的业务更上一层楼。立即行动,体验华为云的高效与便捷,助力您的企业快速成长。

在这里插入图片描述

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;