前言
AnythingLLM 是一个开源项目,旨在简化将本地文档和数据源转化为可检索、可交互知识库的过程。它允许用户利用大语言模型(LLM)的能力,基于自身的私有数据进行智能问答、语义搜索等操作。其技术架构包含以下三方面:
- Embedding 模型:使用 Embedding 模型将文本转换为向量表示,以便在向量空间中进行相似度计算。常见的 Embedding 模型如 BGE - M3 等,能够捕捉文本的语义信息,提高检索的准确性。
- 向量数据库:用于存储和管理文本向量,支持高效的向量搜索。AnythingLLM 可以集成多种向量数据库,如 Chroma、Milvus 等,根据实际需求选择合适的数据库来满足性能和规模的要求。
- 大语言模型(LLM):负责根据检索到的相关内容生成自然语言回答。用户可以选择不同的 LLM,如 OpenAI 的 GPT 系列、国产的通义千问、文心一言等,或者使用开源的 LLM 模型。
客户在搭建完具备推理训练基本能力的私有 DeepSeek 服务后,往往需要外挂知识库以达到应答更专业的目的。外挂知识库涉及到 Embedding 模型以及向量数据库这两大部分。本文档结合 GPU 物理机提供的 DeepSeek 服务,结合 Anything LLM,介绍如何使用云主机外挂 Embedding 模型以及向量数据库。
准备
- 创建一台物理机并搭建DeepSeek服务,参考NVIDIA GPU物理机搭建DeepSeek指南(单机版)。
- 安全组放开Anything LLM云主机的弹性IP+端口8000,参考安全组-物理机-用户指南-安全 - 天翼云。
部署Anything LLM
-
创建通用云主机
创建步骤请参考创建弹性云主机-弹性云主机-快速入门 - 天翼云,此处以“s8r.large.2”规格,“Ubuntu Server 22.04 64”镜像为例部署。
-
部署docker软件
#备份软件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #替换软件源,在编辑器中删除原内容添加备份源配置 sudo vim /etc/apt/sources.list #更新软件包索引 sudo apt update #安装 Docker 依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common -y #添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg #添加 Docker 软件源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update #安装 Docker 引擎 sudo apt install docker-ce docker-ce-cli containerd.io -y #启动并设置 Docker 服务 sudo systemctl start docker sudo systemctl enable docker
说明后续使用docker拉取镜像时,可将其配置为国内源以提升镜像拉取速度。
-
部署Anything LLM
docker pull mintplexlabs/anythingllm export STORAGE_LOCATION=$HOME/anythingllm && \ mkdir -p $STORAGE_LOCATION && \ touch "$STORAGE_LOCATION/.env" && \ docker run -u root -d -p 3001:3001 \ #指定宿主机核容器内服务到的端口映射,可自主选择 --cap-add SYS_ADMIN \ # Docker 命令中的一个选项,用于给容器添加额外的 Linux 内核能力 -v ${STORAGE_LOCATION}:/app/server/storage \ #服务启动数据宿主机目录和容器目录的映射 -v ${STORAGE_LOCATION}/.env:/app/server/.env \ #服务启动环境变量配置文件,宿主机和容器的映射 -e STORAGE_DIR="/app/server/storage" \ #容器内的环境变量,指定服务数据在容器内存放目录 mintplexlabs/anythingllm
-
登录Anything LLM
接入GPU物理机提供的DS模型
-
登录Anything LLM,选择设置LLM首选项。
-
设置“Local AI Base URL",其中”Local AI Base URL“填充GPU物理机DS地址和端口,然后保存。
Embedding模型
不同的任务需要不同的模型和数据库支持。如信息检索任务,需要 embedding 模型能准确捕捉文本语义信息,向量数据库具备高效的检索功能;对于推荐系统任务,模型要能挖掘用户和物品的潜在特征,数据库要支持快速的相似性计算。
Anything LLM支持多种Embedding模型引擎,包括AnythingLLM Native Embedder (default)、OpenAI、Azure OpenAI、LocalAi (all)、Ollama (all)、LM Studio (all)、Cohere。下面以LocalAi (all)使用BGE - M3模型为例说明,其他请参考对应软件官网安装使用。
-
创建GPU云主机并开放安全组规则。
BGE - M3 是一款文本嵌入模型,在部署使用时,云主机配置会受任务类型(如推理、训练)、数据规模、并发请求数量等因素影响。如果是训练任务建议使用1张A100,其他任务可根据实际需求创建规格。创建步骤请参考创建配备GPU驱动的GPU云主机(Linux)-GPU云主机-用户指南-创建GPU云主机 - 天翼云。
安全组放开Anything LLM云主机弹性IP+端口8000,参考添加安全组规则-弹性云主机-用户指南-安全-安全组-配置安全组规则 - 天翼云。
-
下载模型
2.1.安装依赖包
参考文档在天翼云使用vLLM运行DeepSeek的最佳实践-32B等版本-自定义部署DeepSeek-步骤三:手动部署DeepSeek -> 1.安装依赖包。
2.2.下载BGE - M3模型
将以下内容保存为 model_download.py 文件,参数 cache_dir 为模型的下载路径,您可以按需修改,需确保存储空间足够存放模型。
from modelscope import snapshot_download model_dir = snapshot_download('BAAI/bge-m3', cache_dir='/root/model-path', revision='master')
运行该文件,启动模型下载。
python model_download.py
2.3.运行模型
vllm serve BAAI/bge-m3 --served-model-name bge-m3 --gpu-memory-utilization 0.95 --enforce
-
配置Embedding模型引擎
-
使用Embedding模型引擎
向量数据库
Anything LLM支持多种向量数据库,包含LanceDB (default)、Astra DB、Pinecone、Chroma、Weaviate、Qdrant、Milvus、Zilliz。以下为各个向量数据库的对比描述:
向量数据库 | 开源/闭源 | 主要特点 | 支持语言 | 部署方式 | 性能优化 | 索引算法 | 使用场景 |
---|---|---|---|---|---|---|---|
LanceDB | 开源 | 基于 Rust,支持多模态数据,零拷贝、自动版本控制 | Python、JavaScript/TypeScript | 本地、云 | GPU 加速 | HNSW、IVF等 | AI 应用、多模态数据检索 |
Astra DB | 闭源(云服务) | 高可用性、弹性扩展,支持多模态数据 | Python、Java、JavaScript等 | 云服务 | 分布式优化 | HNSW等 | 需要高可用性和弹性扩展的应用 |
Pinecone | 闭源(云服务) | 高性能向量搜索,支持 GPU 和 TPU 加速 | Python、JavaScript等 | 云服务 | GPU/TPU 加速 | HNSW、IVF等 | 大规模向量搜索 |
Chroma | 开源 | 适用于语义搜索和相似性匹配,支持单机和分布式部署 | Python、JavaScript等 | 本地、云 | 并行查询优化 | HNSW等 | AI 应用、语义搜索 |
Weaviate | 开源 | 云原生,支持多模态数据,模块化设计 | Python、JavaScript、Java等 | 本地、云 | 高效查询优化 | HNSW等 | 多模态数据检索、推荐系统 |
Qdrant | 开源 | 高效向量检索,支持加密和安全访问控制 | Python、JavaScript等 | 本地、云 | 并行查询优化 | HNSW等 | 高性能向量检索 |
Milvus | 开源 | 分布式向量数据库,支持大规模数据查询 | Python、Java、C++等 | 本地、云 | GPU 加速 | HNSW、IVF等 | 人工智能、推荐系统 |
Zilliz | 开源(云服务) | 基于 Milvus,深度优化,支持云原生部署 | Python、Java等 | 云服务 | 高性能优化 | HNSW等 | 云原生向量检索 |
下面以Chroma为例进行说明,其他请参考对应软件官网安装使用。
-
创建一台挂载XSSD云盘的本地盘云主机/通用云主机,并增加Anything LLM云主机弹性IP+端口8000 的安全组规则。创建步骤请参考创建弹性云主机-弹性云主机-快速入门 - 天翼云,增加安全组规则参考添加安全组规则-弹性云主机-用户指南-安全-安全组-配置安全组规则 - 天翼云。
-
安装向量数据库
docker pull chromadb/chroma:latest docker run -d --name chroma -p 8000:8000 chromadb/chroma:latest
-
配置向量数据库
-
使用
4.1.创建工作区,聊天查询“哪吒之魔童闹海票房收入”,回答结果没有相关知识库引入,且出现了论述错误。
4.2.准备知识库,内容如下:
4.3.导入知识库,向量使用默认向量。
4.4.继续聊天查询“哪吒之魔童闹海票房收入”,回答结果存在相关知识库引入,且论述正确。