RAG教程:探索AnythingLLM和Vector Admin
本教程旨在实现双重目标。首先,它将介绍Mintplex Labs的两个极具创新性的开源项目。这两个项目分别是AnythingLLM和 Vector Admin。AnythingLLM 是一款企业级解决方案,专为创建自定义聊天机器人而设计,支持 RAG 模式;Vector Admin则是一款功能强大的管理 GUI,用于高效管理多个矢量存储库。
本教程的第二个目标是指导您完成本地模型的部署,特别是用于文本嵌入和生成的模型,以及一个矢量存储库,所有这些都旨在与上述解决方案无缝集成。为此,我们将结合使用LocalAI和Chroma。
那么,系好安全带,让我们开始这段充满知识的旅程吧!
安装 Chroma Vectorstore
该过程首先克隆官方存储库并启动 Docker 容器。
git clone https://github.com/chroma-core/chroma.git
cd chroma
docker compose up -d --build
为了验证矢量存储库是否可用,我们连接到其位于以下网址的 API 文档:http://localhost:8000/docs
利用此 API,我们创建了一个名为“playground”的新集合。
curl -X 'POST' 'http://localhost:8000/api/v1/collections?tenant=default_tenant&database=default_database'
-H 'accept: application/json'
-H 'Content-Type: application/json'
-d '{ "name": "playground", "get_or_create": false}'
接下来,我们会检查结果以确保设置正确。
curl http://localhost:8000/api/v1/collections
[
{
"name": "playground",
"id": "0072058d-9a5b-4b96-8693-c314657365c6",
"metadata": {
"hnsw:space": "cosine"
},
"tenant": "default_tenant",
"database": "default_database"
}
]
LocalAI 的实现
接下来,我们的重点转移到建立 LocalAI Docker 容器上。
git clone https://github.com/go-skynet/LocalAI
cd LocalAI
docker compose up -d --pull always
容器运行后,我们开始下载、安装和测试两个特定模型。
我们的第一个模型是来自 Bert 的句子转换器嵌入模型:MiniLM L6。
curl http://localhost:8080/models/apply
-H "Content-Type: application/json"
-d '{ "id": "model-gallery@bert-embeddings" }'
curl http://localhost:8080/v1/embeddings
-H "Content-Type: application/json"
-d '{ "input": "The food was delicious and the waiter...",
"model": "bert-embeddings" }'
{
"created": 1702050873,
"object": "list",
"id": "b11eba4b-d65f-46e1-8b50-38d3251e3b52",
"model": "bert-embeddings",
"data": [
{
"embedding": [
-0.043848168,
0.067443006,
...
0.03223838,
0.013112408,
0.06982294,
-0.017132297,
-0.05828256
],
"index": 0,
"object": "embedding"
}
],
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0
}
}
随后,我们探索了 LLM:Hugging Face 的 Zephyr-7B-β,它是基础 Mistral 7B 模型的改进版本。
curl http://localhost:8080/models/apply
-H "Content-Type: application/json"
-d '{ "id": "huggingface@thebloke__zephyr-7b-beta-gguf__zephyr-7b-beta.q4_k_s.gguf",
"name": "zephyr-7b-beta" }'
curl http://localhost:8080/v1/chat/completions
-H "Content-Type: application/json"
-d '{ "model": "zephyr-7b-beta",
"messages": [{
"role": "user",
"content": "Why is the Earth round?"}],
"temperature": 0.9 }'
{
"created": 1702050808,
"object": "chat.completion",
"id": "67620f7e-0bc0-4402-9a21-878e4c4035ce",
"model": "thebloke__zephyr-7b-beta-gguf__zephyr-7b-beta.q4_k_s.gguf",
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "\nThe Earth appears round because it is
actually a spherical body. This shape is a result of the
gravitational forces acting upon it from all directions. The force
of gravity pulls matter towards the center of the Earth, causing
it to become more compact and round in shape. Additionally, the
Earth's rotation causes it to bulge slightly at the equator,
further contributing to its roundness. While the Earth may appear
flat from a distance, up close it is clear that our planet is
indeed round."
}
}
],
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0
}
}
部署和设置 AnythingLLM
模型和矢量库安装成功后,下一步是部署 AnythingLLM 应用程序。为此,我们将使用 Mintplex Labs 提供的官方 Docker 镜像。
docker pull mintplexlabs/anythingllm:master
docker run -p 3001:3001 mintplexlabs/anythingllm:master
可以通过访问http://localhost:3001来访问该应用程序,在那里我们可以使用直观的 GUI 开始配置过程。
在配置中,我们选择 LocalAI 后端,可通过http://172.17.0.1:8080/v1 URL 访问,并集成 Zephyr 模型。值得注意的是,AnythingLLM 还支持其他后端,例如 OpenAI、Azure OpenAI、Anthropologie Claude 2 和本地可用的LM Studio。
接下来,我们将我们的嵌入模型与同一个 LocalAI 后端保持一致,从而确保系统的一致性。
接下来,我们选择 Chroma 矢量数据库,网址为http://172.17.0.1:8000。值得一提的是,AnythingLLM 也兼容其他矢量存储库,例如 Pinecone、QDrant、Weaviate 和 LanceDB。
AnythingLLM 的自定义选项包括添加徽标以个性化实例。但是,为了简化本教程,我们将跳过此步骤。同样,虽然也提供了配置用户和权限管理的选项,但我们将采用简化的单用户设置。
然后,我们创建了一个名为“Playground”的工作区,这个名字与我们之前的 Chroma 系列的名称相呼应。
AnythingLLM 起始页旨在以类似聊天界面的方式向用户提供初始说明,并可灵活地根据具体需求定制内容。
在我们的“游乐场”工作区中,我们可以上传文档,进一步扩展我们设置的功能。
我们监控日志以确认 AnythingLLM 是否有效地将相应的向量插入到 Chroma 中。
Adding new vectorized document into namespace playground
Chunks created from document: 4
Inserting vectorized chunks into Chroma collection.
Caching vectorized results of custom-documents/techsquad-3163747c-a2e1-459c-92e4-b9ec8a6de366.json to prevent duplicated embedding.
Adding new vectorized document into namespace playground
Chunks created from document: 8
Inserting vectorized chunks into Chroma collection.
Caching vectorized results of custom-documents/techsquad-f8dfa1c0-82d3-48c3-bac4-ceb2693a0fa8.json to prevent duplicated embedding.
此功能使我们能够与文档进行互动对话。
AnythingLLM 的一个有趣特点是能够显示构成其响应基础的内容。
总之,AnythingLLM及其每个工作区都提供了一系列可配置参数。这些参数包括系统提示、响应速度、聊天记录以及文档相似度阈值等,从而实现个性化和高效的用户体验。
安装和配置 Vector Admin
为了完善我们的架构,我们现在专注于安装 Vector Admin GUI,它是一个强大的工具,用于可视化和管理 AnythingLLM 在 Chroma 中存储的矢量。
安装过程涉及使用 Mintplex Labs 提供的 Docker 容器:一个用于 Vector Admin 应用程序,另一个用于 PostgreSQL 数据库,该数据库存储应用程序的配置和聊天记录。
git clone https://github.com/Mintplex-Labs/vector-admin.git
cd vector-admin/docker/
cp .env.example .env
我们修改.env文件,将服务器端口从 3001 调整为 3002,以避免与 AnythingLLM 已占用的端口冲突。在 Linux 系统上,还需要为 PostgreSQL 连接字符串设置默认的 Docker 网关 IP 地址。
SERVER_PORT=3002
DATABASE_CONNECTION_STRING="postgresql://vectoradmin:password@172.17.0.1:5433/vdbms"
此外,我们配置 SYS_EMAIL 和 SYS_PASSWORD 变量,以定义第一个 GUI 连接的凭据。
鉴于默认端口已更改,我们也在 和 中反映了这一docker-compose.yaml修改Dockerfile。
后端配置完成后,我们将注意力转向前端安装。
cd ../frontend/
cp .env.example .env.production
在.env.production文件中,我们将端口更新为与 Docker 网关一致。
GENERATE_SOURCEMAP=false
VITE_API_BASE="http://172.17.0.1:3002/api"
设置完成后,我们构建并启动 Docker 容器。
docker compose up -d --build vector-admin
访问图形用户界面 (GUI) 非常简单,只需访问http://localhost:3002即可。初始连接会使用.env文件中指定的 SYS_EMAIL 和 SYS_PASSWORD 值。这些凭据仅在首次登录时需要,用于通过 GUI 创建主管理员用户并开始配置工具。
在图形用户界面中,第一步是创建组织,然后建立矢量数据库连接。数据库类型我们选择 Chroma,但 Pinecone、QDrant 和 Weaviate 也是兼容选项。
同步工作区数据后,存储在 Chroma 的“playground”集合中的文档和矢量图就会显示出来。
还可以获取这些向量的详细信息以进行深入分析。
关于功能说明:目前通过 Vector Admin 直接编辑矢量内容的功能有限,因为它使用了 OpenAI 的嵌入模型。由于我们选择了 s-BERT MiniLM,因此无法使用此功能。如果我们选择 OpenAI 的模型,则可以上传新文档并将矢量嵌入到 Chroma 中。
Vector Admin 还拥有用户管理和高级工具等附加功能,包括相似性搜索中的自动漂移检测、即将推出的快照以及组织(以及扩展的向量存储)之间的迁移功能。
该工具尤其值得称道之处在于它能够完全控制传播媒介,从而大大简化其管理。
今天的探索就到此结束。正如演示所示,Mintplex Labs 的工具 AnythingLLM 和 Vector Admin 可以轻松设置 RAG 模式,使用户能够以对话的方式与文档互动。这些项目正在积极发展,未来还将推出更多新功能。因此,值得定期查看它们的路线图,并开始使用这些工具以交互方式处理文件。
文章来源:https://dev.to/worldlinetech/rag-tutorial-exploring-anythingllm-and-vector-admin-4i3c


















