部署基于 LLM 的私有知识库系统 AnythingLLM

451 阅读9分钟

一、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实例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 mirrors.ustc.edu.cn/docker-ce/l… | sudo apt-key add -              

配置仓库源              

sudoaddaptrepository             "deb[arch=amd64]https://mirrors.ustc.edu.cn/dockerce/linux/ubuntu              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": [              
"ustc-edu-cn.mirror.aliyuncs.com/",              
"docker.mirrors.ustc.edu.cn",              
"docker.nju.edu.cn",              
"ccr.ccs.tencentyun.com/",              
"docker.m.daocloud.io/",              
"dockerproxy.com",              
]              
}              

重启              

sudosystemctldaemonreload        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: 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或向量数据库,同时支持多用户管理并设置不同权限。

•官网:anythingllm.com/

•Github:github.com/Mintplex-La…

              

3.2 AnythingLLM 部署  

使用 AnythingLLM 的 Dockerized 版本可以更快、更完整地启动 AnythingLLM。

•系统要求

•至少使用 2GB 的 RAM

•磁盘存储量与您要存储的数据量(文档、向量、模型等)成正比,建议至少使用 10GB    

•支持 amd64 和 arm64 CPU 架构

•启动服务

进入项目目录,执行docker run启动命令,会自动拉取容器并运行

从 Dockerhub 拉取 AnythingLLM 镜像,地址:hub.docker.com/r/mintplexl…

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 STORAGELOCATION:/app/server/storage       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

•访问结果    

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    

首先进入设置 - 外观 - 设置语言为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 的一般知识 和 找到的文档上下文的答案,查询将仅提供找到的文档上下文的答案)、聊天历史记录等,还有向量数据库最大上下文片段、文档相似性阈值设置、代理设置

    

管理员、对话历史记录、代理技能、外观、工具(嵌入式对话历史记录、嵌入式对话、事件日志、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企业节,限时优惠,立即抢购,让你的项目飞速上线!