jolibrain/colette

Multimodal RAG to search and interact locally with technical documents of any kind

Colette – 自托管视觉-RAG平台

是什么 – Colette 是一个开源、自托管的检索增强生成(RAG)系统,允许您在不将任何数据发送到外部API的情况下索引和查询技术文档。其独特之处在于 视觉-RAG:文档的每一页都被视为图像,因此表格、图表、示意图和布局得以完整保留,并可通过基于视觉的嵌入进行搜索。

核心功能

  • 视觉-RAG(V-RAG) – 使用视觉嵌入模型(如 gme-Qwen2-VL)和多模态大语言模型(如 Qwen3-VL)对页面级图像进行嵌入并检索。
  • 混合检索 – 并行运行向量搜索引擎(ChromaDB/ColDB)和BM25词法引擎(Tantivy),适用于产品代码、零件编号等场景。
  • HyDE(假设文档嵌入) – 可选地,使用LLM生成一个简短的“假设答案”,并嵌入该答案而非原始问题,从而提升技术查询的召回率。
  • 纯文本RAG – 使用 unstructured + langchain 的经典流程,适用于无需基于图像处理的文档。
  • 多后端LLM支持 – 支持HuggingFace、vLLM、Ollama以及自定义的 vllm_client
  • 图像生成 – 通过 diffusers 集成Stable Diffusion,支持视觉输出。
  • 布局检测 – 自动将页面裁剪为 textfiguretablefull_page 区域,实现对结果的细粒度过滤。
  • Docker化部署 – 提供就绪运行的镜像(colette_gpucolette_gpu_servercolette_ui)及用于构建/发布的CI流水线。

架构快照 – README中包含一张图,展示了三个主要组件:(1) 摄入(PDF → 图像裁剪 → 视觉/文本嵌入),(2) 存储(向量数据库 + BM25索引),(3) 推理(LLM使用检索到的上下文生成答案)。所有组件均可通过JSON文件配置。

典型工作流

  1. 安装 – 推荐使用Docker或Python虚拟环境。需要Python ≥ 3.12、CUDA ≥ 12.1,以及至少24GB VRAM的GPU(或通过配置使用轻量模型)。
  2. 索引colette_cli index … 指向PDF文件夹;系统将创建图像裁剪,运行视觉/文本编码器,并存储嵌入。
  3. 查询colette_cli chat … 或Python API(JSONApiAPIData)发送问题;系统检索相关图像/文本块(嵌入、BM25或混合),并将其输入LLM,返回文本答案及源图像。

技术栈

  • 语言:Python(核心逻辑、CLI、API)和Bash(Docker包装器)。
  • 视觉模型:Qwen风格的多模态编码器。
  • LLM后端:HuggingFace Transformers、vLLM、Ollama。
  • 向量存储:ChromaDB或自定义 coldb
  • 词法搜索:Tantivy(基于Rust的BM25)。
  • 容器化:Docker + Docker-Compose;CI通过Jenkins实现。
  • 可选GPU加速图像生成:Diffusers(Stable Diffusion)。

部署难度 – 中等到高。Docker镜像抽象了大部分依赖,但默认配置需要高端GPU。仓库提供适用于x86、ARM和DGX机器的虚拟环境设置脚本,以及详细的CLI示例和用于调试的Jupyter笔记本。

适用人群

  • 需要查询专有技术手册、航空航天文档、示意图等PDF,且视觉布局至关重要、数据不能离开本地的企业或研究团队。
  • 需要严格保密性的内部知识库助手开发团队。
  • 正在实验多模态RAG流程并希望使用即开即用、可配置的开发栈的开发者。

成熟度 – 项目由Jolibrain、CNES和Airbus支持,包含CI流水线、Docker镜像和较为全面的文档网站。对于自托管使用已具备生产就绪状态,但硬件要求(≥24GB VRAM)限制其仅适用于工作站级或服务器级GPU。


快速开始(Docker)

# 拉取镜像
docker pull docker.jolibrain.com/colette_gpu:latest

# 创建文件夹
mkdir -p models app_colette docs/pdf

# 索引PDF
docker run --gpus all -v $(pwd):/rag -v $(pwd)/docs/pdf:/data -v $(pwd)/models:/app/models \
  docker.jolibrain.com/colette_gpu \
  bash -c "colette_cli index --app-dir /rag/app_colette --data-dir /data --config-file src/colette/config/vrag_default_lite.json --models-dir /app/models"

# 提问
docker run --gpus all -v $(pwd):/rag -v $(pwd)/app_colette:/app/app_colette -v $(pwd)/models:/models \
  docker.jolibrain.com/colette_gpu \
  bash -c "colette_cli chat --app-dir app_colette --models-dir /models --msg \"What are the identified sources of errors of a RAG?\""

资源

相关