OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  LocalGPT Vision — 面向本地多模态文档理解的轻量方案

LocalGPT Vision — 面向本地多模态文档理解的轻量方案

 
  kite ·  2026-03-20 11:00:24 · 2 次点击  · 0 条评论  

localGPT-Vision

GitHub Stars
GitHub Forks
GitHub Issues
GitHub Pull Requests
Twitter Follow

在 YouTube 上观看视频

localGPT-Vision 是一个端到端的基于视觉的检索增强生成(RAG)系统。它允许用户上传和索引文档(PDF 和图像),就内容提问,并接收回答以及相关的文档片段。检索功能使用 ColqwenColPali 模型执行,检索到的页面会传递给视觉语言模型(VLM)以生成回答。目前,代码支持以下 VLM:

该项目基于 Byaldi 库构建。

目录

功能特性

  • 端到端视觉 RAG:结合视觉文档检索与语言模型,提供全面的答案。
  • 文档上传与索引:上传 PDF 和图像,使用 ColPali 进行索引以供检索。
  • 聊天界面:通过对话界面就上传的文档提问。
  • 会话管理:创建、重命名、切换和删除聊天会话。
  • 模型选择:可在不同的视觉语言模型(Qwen2-VL-7B-Instruct、Google Gemini、OpenAI GPT-4 等)之间选择。
  • 持久化索引:索引保存在磁盘上,并在应用重启时加载。

系统架构

localGPT-Vision 构建为一个端到端的基于视觉的 RAG 系统。其架构包含两个主要组件:

  1. 使用 Colqwen 和 ColPali 进行视觉文档检索
    - ColqwenColPali 是专为高效文档检索设计的视觉编码器,仅使用文档页面的图像表示。
    - 它直接嵌入页面图像,利用布局、字体、图表和表格等视觉线索,无需依赖 OCR 或文本提取。
    - 在索引过程中,文档页面被转换为图像嵌入并存储。
    - 在查询过程中,用户查询与这些嵌入进行匹配,以检索最相关的文档页面。

ColPali

  1. 使用视觉语言模型生成回答
    - 检索到的文档图像被传递给视觉语言模型(VLM)。
    - 支持的模型包括 Qwen2-VL-7B-Instruct、LLAMA3.2、Pixtral、Molmo、Google Gemini 和 OpenAI GPT-4。
    - 这些模型通过理解文档的视觉和文本内容来生成回答。
    - 注意:回答的质量高度依赖于所使用的 VLM 和文档图像的分辨率。

该架构消除了对复杂文本提取流程的需求,并通过考虑文档的视觉元素提供了更全面的理解。您无需像传统 RAG 系统那样处理分块策略、选择嵌入模型或检索策略。

环境要求

  • 系统已安装 Anaconda 或 Miniconda
  • Python 3.10 或更高版本
  • Git(可选,用于克隆仓库)

安装步骤

按照以下步骤在本地机器上设置并运行应用程序。

  1. 克隆仓库
    bash git clone https://github.com/PromtEngineer/localGPT-Vision.git cd localGPT-Vision

  2. 创建 Conda 环境
    bash conda create -n localgpt-vision python=3.10 conda activate localgpt-vision

3a. 安装依赖
bash pip install -r requirements.txt

3b. 从 HuggingFace 安装 Transformers - 开发版本
bash pip uninstall transformers pip install git+https://github.com/huggingface/transformers

  1. 设置环境变量
    设置您的 Google Gemini 和 OpenAI GPT-4 的 API 密钥:

bash export GENAI_API_KEY='your_genai_api_key' export OPENAI_API_KEY='your_openai_api_key' export GROQ_API_KEY='your_groq_api_key'

在 Windows 命令提示符中:
cmd set GENAI_API_KEY=your_genai_api_key set OPENAI_API_KEY=your_openai_api_key set GROQ_API_KEY='your_groq_api_key'

  1. 运行应用程序
    bash python app.py

  2. 访问应用程序
    打开您的网络浏览器并导航到:
    http://localhost:5050/

调试

为了协助调试 localGPT-Vision,需要在您的系统上安装一些额外的依赖项。请按照以下说明设置您的调试环境。

所需软件包

使用以下命令安装必要的软件包:

在 Ubuntu/Debian 系统上

  1. 更新软件包列表

bash sudo apt update

  1. 安装 Poppler 库和工具

这些库对于处理 PDF 文件至关重要。

bash sudo apt install libpoppler-cpp-dev poppler-utils

  1. 验证 pdftoppm 安装

检查版本以确保安装正确:

bash pdftoppm -v

  1. 安装其他依赖项

这些软件包是构建和管理库所必需的。

bash sudo apt install cmake pkgconfig python3-poppler-qt5

### 注意

请确保您有适当的权限在您的机器上运行 sudo 命令。此设置专门针对 Ubuntu/Debian 系统,如果使用不同的 Linux 发行版或 macOS,步骤可能会略有不同。

使用方法

上传和索引文档

  1. 点击“New Chat”开始一个新会话。
  2. 在“Upload and Index Documents”下,点击“Choose Files”并选择您的 PDF 或图像文件。
  3. 点击“Upload and Index”。文档将使用 ColPali 进行索引,并准备好进行查询。

提问

  1. 在“Enter your question here”文本框中,输入与上传文档相关的查询。
  2. 点击“Send”。系统将检索相关的文档页面,并使用选定的视觉语言模型生成回答。

管理会话

  • 重命名会话:点击“Edit Name”,输入新名称,然后点击“Save Name”。
  • 切换会话:点击侧边栏中的会话名称以切换到该会话。
  • 删除会话:点击会话旁边的“Delete”以永久删除它。

设置

  1. 点击导航栏中的“Settings”。
  2. 选择所需的语言模型和图像尺寸。
  3. 点击“Save Settings”。

项目结构

localGPT-Vision/
├── app.py
├── logger.py
├── models/
│   ├── indexer.py
│   ├── retriever.py
│   ├── responder.py
│   ├── model_loader.py
│   └── converters.py
├── sessions/
├── templates/
│   ├── base.html
│   ├── chat.html
│   ├── settings.html
│   └── index.html
├── static/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   └── images/
├── uploaded_documents/
├── byaldi_indices/
├── requirements.txt
├── .gitignore
└── README.md
  • app.py:主 Flask 应用程序。
  • logger.py:配置应用程序日志记录。
  • models/:包含索引、检索和回答的模块。
  • templates/:用于渲染视图的 HTML 模板。
  • static/:静态文件,如 CSS 和 JavaScript。
  • sessions/:存储会话数据。
  • uploaded_documents/:存储上传的文档。
  • .byaldi/:存储由 Byaldi 创建的索引。
  • requirements.txt:Python 依赖项。
  • .gitignore:Git 忽略的文件和目录。
  • README.md:项目文档。

系统工作流

  1. 用户交互:用户通过 Web 界面上传文档并提问。
  2. 使用 ColPali 进行文档索引
    - 上传的文档在必要时转换为 PDF。
    - 使用 ColPali 对文档进行索引,该模型基于文档页面的视觉内容创建嵌入。
    - 索引存储在 byaldi_indices/ 目录中。
  3. 会话管理
    - 每个聊天会话都有唯一的 ID,并存储自己的索引和聊天历史。
    - 会话保存在磁盘上,并在应用重启时加载。
  4. 查询处理
    - 用户查询发送到后端。
    - 查询被嵌入,并与文档页面的视觉嵌入进行匹配以检索相关页面。
  5. 使用视觉语言模型生成回答
    - 检索到的文档图像和用户查询被传递给选定的视觉语言模型(Qwen、Gemini 或 GPT-4)。
    - VLM 通过理解文档的视觉和文本内容来生成回答。
  6. 显示结果
    - 回答和相关的文档片段显示在聊天界面中。
graph TD
    A[用户] -->|上传文档| B(Flask 应用)
    B -->|保存文件| C[uploaded_documents/]
    B -->|转换并使用 ColPali 索引| D[索引模块]
    D -->|创建视觉嵌入| E[byaldi_indices/]
    A -->|提问| B
    B -->|嵌入查询并检索页面| F[检索模块]
    F -->|检索相关页面| E
    F -->|将页面传递给| G[视觉语言模型]
    G -->|生成回答| B
    B -->|显示回答| A
    B -->|保存会话数据| H[sessions/]
    subgraph 后端
        B
        D
        F
        G
    end
    subgraph 存储
        C
        E
        H
    end

贡献指南

欢迎贡献!请遵循以下步骤:

  1. Fork 本仓库。
  2. 为您的功能创建一个新分支:git checkout -b feature-name
  3. 提交您的更改:git commit -am 'Add new feature'
  4. 推送到分支:git push origin feature-name
  5. 提交拉取请求。

Star 历史

Star History Chart

2 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私政策 ·  服务条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 48 ms
Developed with Cursor