828华为云征文|部署基于 LLM 的私有知识库系统 AnythingLLM

ops/2024/9/29 3:20:27/

部署基于 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即可)、协议端口(协议一般为TCPUDP,端口一般选择你项目需要暴露的端口即可),描述(选填,一般会填写此端口的用途以免忘记了),其他默认点击确定即可。安全组配置主要是暴露端口可以给外网访问。

在这里插入图片描述

如果还不清楚可以参考文档:安全组配置示例

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 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 EngineLoaded: 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.socketDocs: https://docs.docker.comMain PID: 24912 (dockerd)Tasks: 13Memory: 24.7MCPU: 3.778sCGroup: /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企业节,限时优惠,立即抢购,让你的项目飞速上线!

在这里插入图片描述


http://www.ppmy.cn/ops/118227.html

相关文章

Arch - 架构安全性_保密(Confidentiality)

文章目录 OverView导图保密保密强度与成本客户端加密密码存储与验证 Code总结 OverView 即使只限定在“软件架构设计”这个语境下,系统安全仍然是一个很大的话题。 接下来我们将对系统安全架构的各个方面进行详细分析,包括认证、授权、凭证、保密、传输…

解决 Pandas 中的 XLRDError:处理 “Excel xlsx file; not supported” 错误

解决 Pandas 中的 XLRDError:处理 “Excel xlsx file; not supported” 错误 在处理数据分析任务时,使用 Python 的 Pandas 库来读取 Excel 文件是一种常见的做法。然而,从 Pandas 1.2.0 版本开始,默认使用的 xlrd 库不再支持 .x…

Linux驱动开发初识

Linux驱动开发初识 文章目录 Linux驱动开发初识一、驱动的概念1.1 什么是驱动:1.2 驱动的分类: 二、设备的概念2.1 主设备号&次设备号:2.2 设备号的作用: 三、设备驱动整体调用过程3.1 上层用户操控设备的流程:3.2…

深度学习(5):逻辑斯蒂回归Logistic

文章目录 一、逻辑斯蒂回归(Logistic Regression)二、KL 散度(相对熵)三、交叉熵(Cross-Entropy)四、关系五、总结 一、逻辑斯蒂回归(Logistic Regression) 概述 逻辑斯蒂回归是一种…

Elasticsearch在大数据处理中的优势

Elasticsearch 在大数据处理中的优势主要体现在以下几个方面: 1. 分布式架构 水平扩展:Elasticsearch 设计为分布式系统,可以轻松地通过增加节点来水平扩展,处理 PB 级别的数据。数据分片和复制:数据自动分片并跨多个…

AIGC学习笔记—minimind详解+训练+推理

前言 这个开源项目是带我的一个导师,推荐我看的,记录一下整个过程,总结一下收获。这个项目的slogan是“大道至简”,确实很简。作者说是这个项目为了帮助初学者快速入门大语言模型(LLM),通过从零…

韩媒专访CertiK首席商务官:持续关注韩国市场,致力于解决Web3安全及合规问题

作为Web3.0头部安全公司,CertiK在KBW期间联合CertiK Ventures举办的活动引起了业界的广泛关注。CertiK一直以来与韩国地方政府保持着紧密合作关系,在合规领域提供强有力的支持。而近期重磅升级的CertiK Ventures可以更好地支持韩国本地的区块链项目。上述…

前端代码开发规范

前端代码开发规范:提升项目质量与团队协作的基石 在快速迭代的软件开发环境中,前端代码开发规范扮演着至关重要的角色。它不仅有助于提升代码的可读性、可维护性和可扩展性,还能显著增强团队成员之间的协作效率,减少因代码风格不…