828华为云征文|部署基于 LLM 的私有知识库系统 AnythingLLM
部署基于 LLM 的私有知识库系统 AnythingLLM
- 一、Flexus云服务器X实例介绍
- 二、Flexus云服务器X实例配置
- 2.1 重置密码
- 2.2 服务器连接
- 2.3 安全组配置
- 2.4 Docker 环境搭建
- 三、Flexus云服务器X实例部署 AnythingLLM
- 3.1 AnythingLLM 介绍
- 3.2 AnythingLLM 部署
- 3.3 AnythingLLM 使用
- 四、总结
一、Flexus云服务器X实例介绍
云服务器,如同虚拟的超级计算机,是云计算技术的核心组成部分。它通过网络提供计算资源,包括处理器、内存、存储和操作系统等,用户可以根据需求灵活配置和扩展。云服务器具备高可用性、弹性伸缩和快速部署等特点,适用于各种规模的企业和开发者,无论是网站托管、数据分析还是应用开发,都能提供稳定、高效的支持。
华为云下一代云服务器Flexus X实例
焕新上线,新产品搭配弹性伸缩服务AS及负载均衡服务ELB,可以实现基于业务负载的快速弹缩,从容应对多变的市场业务压力,覆盖高科技、零售、金融、游戏等行业大多数通用工作负载场景。
Flexus X实例通过和其他服务组合,具备计算、镜像安装、网络、存储、安全等能力,您可根据业务需要灵活配置各资源。
本次测评使用的规格是:4核12G-100G-3M规格
的Flexus X实例基础模式
二、Flexus云服务器X实例配置
2.1 重置密码
购买服务器的时候可以提前设置用户名和密码,因为我这里跳过了,所以购买完成后需要重置密码,会短信或站内消息通过你的云服务器信息,重点是公网IP地址
和用户名,首先打开你的服务器控制台,选择重置密码
勾选自动重启,点击确定即可
2.2 服务器连接
华为云服务器提供了多种链接方式,如使用控制台提供的VNC方式登录、使用Linux/Mac OS系统主机登录Linux弹性云服务器(即ssh root@192.168.48.78
命令)或者使用Putty、Xshell等工具登录Linux弹性云服务器。
我个人习惯使用 MobaXterm
这款软件,添加SSH连接,输出公网IP
、用户名和端口(默认22),连接即可。
2.3 安全组配置
安全组是一个逻辑上的分组,为同一个VPC内的云服务器提供访问策略
。用户可以在安全组中定义各种访问规则,当云服务器加入该安全组后,即受到这些访问规则的保护。
系统为每个网卡默认创建一个默认安全组,默认安全组的规则是对出方向上的数据报文全部放行,入方向访问受限。您可以使用默认安全组,也可以根据需要创建自定义的安全组
。
主要需要填写优先级
(默认填1即可)、协议端口
(协议一般为TCP
或UDP
,端口一般选择你项目需要暴露的端口即可),描述
(选填,一般会填写此端口的用途以免忘记了),其他默认点击确定即可。安全组配置主要是暴露端口可以给外网访问。
如果还不清楚可以参考文档:安全组配置示例
2.4 Docker 环境搭建
本次服务器环境是ubuntu系统镜像,需要自己安装docker环境
服务器类别 | 系统镜像 | 内网IP地址 | Docker版本 | 操作系统版本 |
---|---|---|---|---|
Flexus云服务器X实例 | Ubuntu | 192.168.0.168 | 27.2.0 | Ubuntu 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
三、Flexus云服务器X实例部署 AnythingLLM
3.1 AnythingLLM 介绍
AnythingLLM是一个全栈应用程序,您可以使用现成的商业大语言模型或流行的开源大语言模型,再结合向量数据库解决方案构建一个私有ChatGPT,不再受制于人:您可以本地运行,也可以远程托管,并能够与您提供的任何文档智能聊天。
AnythingLLM将您的文档划分为称为workspaces (工作区)的对象。工作区的功能类似于线程,同时增加了文档的容器化,。工作区可以共享文档,但工作区之间的内容不会互相干扰或污染,因此您可以保持每个工作区的上下文清晰。
- 工作区内的智能体Agent(浏览网页、运行代码等)
- 为您的网站定制的可嵌入聊天窗口
- 支持多种文档类型(PDF、TXT、DOCX等)
- 通过简单的用户界面管理向量数据库中的文档
- 两种对话模式:聊天和查询。聊天模式保留先前的对话记录。查询模式则是是针对您的文档做简单问答
- 聊天中会提供所引用的相应文档内容
- 100%云部署就绪,部署你自己的LLM模型
- 管理超大文档时高效、低耗。只需要一次就可以嵌入(Embedding)一个庞大的文档或文字记录。比其他文档聊天机器人解决方案节省90%的成本。
- 全套的开发人员API,用于自定义集成!
AnythingLLM 这是一个全栈应用程序,可以将任何文档、资源(如网址链接、音频、视频)或内容片段转换为上下文,以便任何大语言模型(LLM)在聊天期间作为参考使用。此应用程序允许您选择使用哪个LLM或向量数据库,同时支持多用户管理并设置不同权限。
- 官网:https://anythingllm.com/
- Github:https://github.com/Mintplex-Labs/anything-llm
3.2 AnythingLLM 部署
使用 AnythingLLM 的 Dockerized 版本可以更快、更完整地启动 AnythingLLM。
- 系统要求
- 至少使用 2GB 的 RAM
- 磁盘存储量与您要存储的数据量(文档、向量、模型等)成正比,建议至少使用 10GB
- 支持 amd64 和 arm64 CPU 架构
- 启动服务
进入项目目录,执行docker run
启动命令,会自动拉取容器并运行
从 Dockerhub 拉取 AnythingLLM 镜像,地址:https://hub.docker.com/r/mintplexlabs/anythingllm
root@flexusx-c6b3:~/anythingllm# export STORAGE_LOCATION=$HOME/anythingllm && \
> mkdir -p $STORAGE_LOCATION && \
> touch "$STORAGE_LOCATION/.env" && \
> docker run -d -p 3001:3001 \
> --add-host=host.docker.internal:host-gateway \
> --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
Unable to find image 'mintplexlabs/anythingllm:latest' locally
latest: Pulling from mintplexlabs/anythingllm
3713021b0277: Already exists
4f4fb700ef54: Pull complete
78a198160648: Already exists
a27ed7bc25cf: Already exists
6d83ddae0691: Already exists
79e719e81afe: Already exists
817d5df44fb0: Already exists
a6b336ff6d2b: Already exists
a4b82c0d7dcf: Pull complete
a9ba2c1d3aa1: Pull complete
1c79ea6c8bb3: Pull complete
a925f6236313: Pull complete
597083986aa8: Pull complete
a085406b6ece: Pull complete
be39880fa762: Pull complete
Digest: sha256:92babe26fb5faf4b66f82da41982c1e42663b83cfe524d8620acb769e5606fd6
Status: Downloaded newer image for mintplexlabs/anythingllm:latest
2d12595ad9823dc4f38bf61f64791bb3b082e87cc4b39d9f6f5a8e8b11158ed0
- 配置安全组
在Flexus云服务器X实例的安全组管理页面,添加入方向规则,接下来我们启动服务需要监听3001端口,所以添加安全组为TCP:3001
协议端口。
- 检查容器状态
检查 AnythingLLM 容器状态,确保容器正常启动
root@flexusx-c6b3:~/anythingllm# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82c056f55e5c mintplexlabs/anythingllm "/bin/bash /usr/loca…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:3001->3001/tcp, :::3001->3001/tcp affectionate_cori
若运行docker ps
查看,出现运行的容器状态然后又消失的话,查看日志出现如下报错
anything-llm | Error: SQLite database error
anything-llm | attempt to write a readonly database
anything-llm | 0: sql_schema_connector::sql_migration_persistence::initialize
anything-llm | with namespaces=None
anything-llm | at schema-engine/connectors/sql-schema-connector/src/sql_migration_persistence.rs:14
anything-llm | 1: schema_core::state::ApplyMigrations
anything-llm | at schema-engine/core/src/state.rs:201
请执行下面命令修改目录权限解决问题
chmod -R 777 /root/anythingllm
- 访问地址
内网:http://localhost:3001
外网:http://公网IP:3001
- 访问结果
若出现此页面,则部署 AnythingLLM server 成功。
3.3 AnythingLLM 使用
首次进入会进行一些初始化的设置,点击Get Started
进入选择具体的LLM,AnythingLLM 可以与许多 LLM 提供商合作,这将是处理聊天的服务
我这里选择Local AI
,在 Local AI Base Url
填写之前部署的Ollama
服务地址:http://123.60.144.170:11434/v1
,然后会识别到模型为 llama2
,填写 Token context window
大小,Key
可以不用填写,点击下一步
用户设置,需要确定是否多人使用、是否需要设置密码,我这里仅自己使用并设置访问密码
LLM Selection
是你的模型和聊天只能在运行 LocalAI 的服务器上访问,当然你也可以使用 OpenAI,使用更强大的云端模型,提供基础模型支持,但这样的话,就不是完全本地化的私有部署了。Embedding 配置
是你的文档文本已私密嵌入到 AnythingLLM 的此实例中。矢量数据库
是你的向量和文档文本将私密存储在 AnythingLLM 的此实例上。
关于用户体验反馈信息,可以跳过调查
创建你的第一个工作区并开始使用 AnythingLLM
创建完成后,进入AnythingLLM 的聊天界面,这您使用 AnythingLLM 时花费最多时间的地方,因此需要该熟悉基本功能
首先进入设置 - 外观 - 设置语言为Chinese
,这里的汉化并不完全,还是有很多英文的地方,但是不影响使用甚至可以使用翻译插件
主界面主要是工作区、消息区和文档、设置区
点击工作区,开启一个Chat Thread
,我们可以上传文档或者直接对话
例如直接对话,是通过选择的LLM模型推理返回的,对话结果取决于大模型的能力,我这里使用的 llama ,中文能力一般
也可以上传文档,需要将文档加入到工作区才可以在对话中引用到
上传本地的一个PDF文档,选择加到工作区
还可以通过数据连接器直接获取解析网络内容,例如Gihub、Youtube、或者抓取网站内容的
等待抓取网站内容结束后,添加到工作区
可以直接引用抓取的数据来回答
还可以直接在消息对话框,选择文件上传后,直接对话,我们可以查看日志解析文档成功的
[collector] info: [SUCCESS]: apple_intelligence_foundation_language_models.pdf converted & ready for embedding.
[backend] info: [CollectorApi] Document apple_intelligence_foundation_language_models.pdf uploaded processed and successfully. It is now available in documents.
工作区设置,可以修改工作区名称和头像,删除工作区,自定义建议的聊天消息
工作区的聊天设置,LLM 提供者选择、聊天模式切换(聊天将提供 LLM 的一般知识 和 找到的文档上下文的答案,查询将仅提供找到的文档上下文的答案)、聊天历史记录等,还有向量数据库最大上下文片段、文档相似性阈值设置、代理设置
AnythingLLM 的设置包含人工智能提供商(LLM 首选项、向量数据库、Embedder 首选项、文本分割、语音和讲话、转录模型)
管理员、对话历史记录、代理技能、外观、工具(嵌入式对话历史记录、嵌入式对话、事件日志、API 密钥、浏览器扩展)、用户与安全、实验功能
传统LLM在专业场景的局限性,但通过检索增强生成(RAG)作为解决方案,通过Ollama和AnythingLLM实现在本地构建私有知识库,以提高大模型在特定领域的准确性和数据安全性,测试结果显示,结合RAG的LLM在回答问题时更为精确。AnythingLLM 界面中文支持不是很完全,上手操作不难,但是如果想要好的效果,需要调节参数和数据库匹配方式就需要看看说明文档了,更多有趣的设置和功能就需要自行探索了。
四、总结
AnythingLLM是一款多功能人工智能应用,旨在为用户提供一个统一的平台来处理多种类型的文档和模型。无论是在Windows、MacOS,还是Linux系统上,用户都可以通过简单的“一键安装”来获取完整的工具套件。它支持包括PDF、Word文档等多种格式的文件处理,并允许用户连接各种自定义或开源的语言模型,如GPT-4、Llama、Mistral等,因此用户不再受到单一模型的约束。此外,AnythingLLM能够完全在本地运行,只与用户明确连接的服务进行交互,这大大增强了数据的隐私保护。此次使用的Flexus X实例
配置还是很高的4核12G-100G-3M规格
的基础模式
,尽管本地运行ollama模型,也能在推理过程中抗住压力,稳定输出,尽管输出缓慢,CPU和内存占用也没有超过60%,整体体验很好。
喜欢用Docker部署有趣项目?华为云服务器助你轻松实现!高性能、高可靠,支持一键部署Docker环境,快速启动你的创意项目。现在华为云服务器正进行828 B2B企业节
,限时优惠,立即抢购,让你的项目飞速上线!