LLMWare 使用 Docker 与 Docker Compose 快速搭建多数据库 RAG 实验环境
【免费下载链接】llmwareUnified framework for building enterprise RAG pipelines with small, specialized models项目地址: https://gitcode.com/GitHub_Trending/ll/llmware
本文基于 llmware 仓库中的 Docker 入门指南 展开,介绍如何在 Linux 环境下安装 Python/Docker/Docker Compose,并借助仓库内置的docker-compose-*.yaml文件快速拉起 Mongo、Postgres/PG Vector、Neo4j、Milvus、Qdrant、Redis 六种数据库容器,最后通过仓库示例脚本验证向量嵌入写入链路是否打通。读完后你可以独立完成容器化 RAG 环境的搭建、验证与清理。
1. 前置准备:Python 与 Pip
llmware 的 Python 运行环境通常随 Linux 发行版自带。安装并升级 Pip 的命令如下(以 Debian/Ubuntu 的 apt 为例):
sudo apt-get update sudo apt-get -y install python3-pip pip3 install --upgrade pip如果系统尚未安装python3,需要先安装 Python 解释器。仓库的容器镜像基于 Python 3.11 构建(见下文 Dockerfile 中的python:3.11-bookworm基础镜像),因此宿主机使用 3.11 及以上版本最为贴合。
2. 安装 Docker 与 Docker Compose 并验证
要使用 llmware 仓库中的 Docker Compose 文件,需要安装最新版 Docker 与 Docker Compose。安装思路可概括为两步:
- 安装 Docker Engine(必需):添加 Docker 官方 apt 源,安装
docker-ce及相关包,然后启用服务(sudo systemctl enable --now docker)。 - 安装 Docker Compose(可选但强烈建议):下载 Compose 二进制插件并放入
/usr/local/lib/docker/cli-plugins/(或旧版docker-compose命令的下载方式,二进制下载地址以 Docker 官方 compose releases 页面为准)。
安装完成后验证 Docker 服务状态:
sudo systemctl status docker看到active (running)即表示守护进程正常。若 Compose 是作为 CLI 插件安装的,可用docker compose version验证;若是独立二进制,则用docker-compose version。
3. 仓库内置的 Compose 文件矩阵
文档指出 Compose 文件“当前支持 6 种数据库系统”。在仓库中,这些编排文件全部位于 scripts/docker/ 目录下,命名格式为docker-compose-数据库名.yaml。与文档所述六类数据库的对应关系如下:
| 数据库系统 | 角色 | Compose 文件 | 容器镜像(版本) | 暴露端口 |
|---|---|---|---|---|
| Mongo | 活动数据库(文本集合) | docker-compose.yaml、docker-compose_mongo_milvus.yaml、docker-compose-qdrant.yaml | mongo:5.0.10 | 27017 |
| Postgres / PG Vector | 活动数据库 + 向量数据库 | docker-compose-pgvector.yaml | ankane/pgvector | 5432 |
| Neo4j | 向量数据库 | docker-compose-neo4j.yaml | neo4j:5.15.0-community | 7474、7687 |
| Milvus | 向量数据库 | docker-compose.yaml、docker-compose_mongo_milvus.yaml | milvusdb/milvus:v2.3.0(standalone) | 19530、9091 |
| Qdrant | 向量数据库 | docker-compose-qdrant.yaml | qdrant/qdrant:latest | 6333、6334 |
| Redis | 向量数据库 | docker-compose-redis-stack.yaml | redis/redis-stack-server:latest | 6379 |
两点角色划分需要牢记(文档原话的展开):
- Mongo 和 Postgres 用作“活动数据库”(active database / collection db),存储 Library 的文本集合(chunks、文档元数据等);
- PG Vector、Neo4j、Milvus、Qdrant、Redis 用作“向量数据库”(vector db),存储向量嵌入。其中 PG Vector 是 Postgres 的别名,即同一个 Postgres 容器既可做活动数据库,也可通过 pgvector 扩展承担向量检索。
3.1 主 Compose 文件:一栈拉起 Mongo + Milvus + Neo4j
docker-compose.yaml 是最完整的开发栈,定义了以下服务:
- llmware 开发容器:使用镜像
provocoai/llmware:dev-01,通过network_mode: service:mongodb与 mongodb 容器共享网络命名空间(从源码结构看,这样容器内可直接以本地回环访问 Mongo),并以command: sleep infinity挂起等待人工进入调试; - mongodb:
mongo:5.0.10,数据卷llmware-mongodb:/data/db,端口27017:27017,注释中预留了MONGO_INITDB_ROOT_USERNAME/PASSWORD等环境变量用于开启认证; - Milvus standalone 三件套:
etcd(quay.io/coreos/etcd:v3.5.5,负责元数据)、minio(minio/minio:RELEASE.2023-03-20T20-16-18Z,负责对象存储)、milvus(milvusdb/milvus:v2.3.0,milvus run standalone启动,depends_on声明了对 etcd 与 minio 的依赖,并对 9091 端口的/healthz做 90 秒起跳的健康检查); - dev-neo4j:
neo4j:5.15.0-community,NEO4J_AUTH=none关闭认证(仅限开发),数据目录挂载$HOME/neo4j/data。
3.2 单库 Compose 文件的关键配置
各单库文件都刻意保持“最小可用”配置,值得注意的细节:
- docker-compose-pgvector.yaml:镜像为
ankane/pgvector(预装 pgvector 扩展的 Postgres 发行版),设置POSTGRES_DB=postgres、POSTGRES_USER=postgres、空密码与POSTGRES_HOST_AUTH_METHOD=trust,并挂载./init.sql到/docker-entrypoint-initdb.d/供容器首次启动时初始化扩展。trust认证只适用于本地实验; - docker-compose-qdrant.yaml:同时编排了 mongodb + qdrant 两个服务——即“活动数据库 + 向量数据库”一次性拉起,qdrant 服务通过内联
configs指定log_level: INFO,数据持久化在qdrant_data卷; - docker-compose-redis-stack.yaml:使用
redis/redis-stack-server:latest,并通过REDIS_ARGS=--enable-debug-command yes --enable-module-command yes显式开启模块命令——这是 Redis 作为向量库(redis-stack 自带向量检索模块)可被 llmware 驱动使用的前提; - docker-compose_mongo_milvus.yaml:主文件的精简子集,仅含 mongodb + etcd + minio + milvus 四个服务,适合只测 Mongo/PG 活动库配 Milvus 向量库的场景。
3.3 附带的 Dockerfile
仓库还提供 scripts/docker/Dockerfile 用于构建 llmware 自身镜像,关键步骤包括:
- 基于
python:3.11-bookworm,安装git、bash、postgresql、libpq-dev、build-essential、musl-dev等编译与数据库客户端依赖; - 将 llmware 仓库克隆到镜像内
/llmware,并执行pip install --no-cache-dir -r requirements.txt; - 创建非 root 用户
llmware(UID/GID 1000)并切换USER,工作目录设为/llmware,默认命令为/bin/bash。
这解释了主 Compose 文件为何能把sleep infinity容器当作开发环境直接使用——镜像内已含完整的 llmware 依赖。
4. 启动并检查容器
进入仓库目录,确认能看到docker-compose-*.yaml系列文件(位于scripts/docker/下)。启动任意一个 Compose 文件:
docker-compose -f docker-compose-pgvector.yaml up -d(-f参数换成目标文件名即可;Compose 插件语法docker compose -f ... up -d等效。)然后检查容器是否运行:
docker ps注意:docker ps只列出当前运行中的容器;加-a标志(docker ps -a)可列出所有容器(包括已停止的)。对于多服务栈(如 Mongo+Milvus),建议用docker compose -f <file> ps查看带健康检查状态的完整拓扑,Milvus 的健康检查有 90 秒start_period,启动初期短暂非 healthy 属正常现象。
5. 用嵌入示例验证数据库连通性
文档推荐的验证方式是修改仓库中的嵌入示例。原文档引用fast_start/example-2-build_embeddings.py,在当前仓库中该文件位于 solutions/rag/example-2-build_embeddings.py。需要改动的三处(行号以当前仓库版本为准):
- 活动数据库:第 143 行
LLMWareConfig().set_active_db("sqlite"),改为"mongo"或"postgres"(二选一,取决于你拉起的是哪个活动库容器); - 向量数据库:第 153 行
LLMWareConfig().set_vector_db("chromadb"),改为"pg_vector"、"neo4j"、"milvus"、"qdrant"或"redis"之一; - 库名:第 162 行
library = setup_library("example2_library")。
配置层面对取值有白名单校验:从源码结构看,llmware/configs.py 中set_active_db()与set_vector_db()都会把传入值与cls._supported["collection_db"]/cls._supported["vector_db"]支持的列表比对,不支持的名称会抛出LLMWareException(提示selected db is not supported),因此填错别名会在启动阶段立即报错,而不是静默写入错误数据库。
运行该示例后,终端会输出嵌入生成进度(示例内部调用library.install_new_embedding(embedding_model_name=..., vector_db=..., batch_size=100),完成后用Query(library).semantic_query(...)执行一次语义查询验证)。若出现如下错误:
llmware.exceptions.EmbeddingModelNotFoundException: Embedding model for 'example2_library' could not be located说明该库名下已有残留的嵌入记录冲突,按文档建议,为第 162 行传入的库名换一个唯一名称即可。
另外注意:示例默认使用mini-lm-sbert(sentence-transformers 类)嵌入模型,需先pip3 install torch transformers;若改用 OpenAI 嵌入模型,则按示例注释改为text-embedding-ada-002并配置 API Key。
6. 停止与删除容器
停止容器:
docker stop container_ID_OR_container_name删除容器(删除不会自动删除数据卷,如需彻底清理数据再执行docker volume rm或docker compose -f <file> down -v):
docker rm container_ID_OR_container_name传入容器 ID 或名称均可。查找容器的 ID / 名称:
docker ps -a7. 实践注意事项与适用边界
结合各 Compose 文件的实际配置,使用这些编排文件前需注意以下前提与限制:
- 均为开发配置:PG Vector 使用
trust空密码认证、Neo4j 设置NEO4J_AUTH=none、Mongo 默认未启用MONGO_INITDB_ROOT_*认证、MinIO 使用默认minioadmin/minioadmin凭据(见 docker-compose.yaml)。这些配置只适用于本地实验环境,不可直接用于生产; - 端口冲突:六个数据库的端口(27017 / 5432 / 7474、7687 / 19530、9091、9000、9001 / 6333、6334 / 6379)若与宿主机已有服务冲突,需修改对应 Compose 文件的
ports映射; - 数据持久化:各文件均使用具名卷(
llmware-mongodb、llmware-etcd、llmware-minio、llmware-milvus、qdrant_data、redis_data等)或绑定挂载($HOME/neo4j/data)保存数据,重复up -d不会丢数据; - 资源占用:Milvus 栈包含 etcd、MinIO、Milvus 三个服务且健康检查周期较长,建议在内存不低于 8GB 的机器上运行完整主栈,或使用单库文件做更轻量的验证;
- 版本锁定:镜像版本以当前 Compose 文件为准(Mongo 5.0.10、Neo4j 5.15.0、Milvus v2.3.0 等),升级镜像版本时留意与 llmware 驱动的兼容性。
按以上步骤,你可以在一台干净的 Linux 机器上完成:环境准备 → 容器拉起 → 活动库/向量库配置 → 嵌入写入与语义查询验证 → 容器清理的完整闭环,为后续在 llmware 中开展 RAG 管道开发提供可复现的数据库底座。
【免费下载链接】llmwareUnified framework for building enterprise RAG pipelines with small, specialized models项目地址: https://gitcode.com/GitHub_Trending/ll/llmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考