Skip to content

lsh-forge/agentic-rag

Repository files navigation

AgenticDoc Logo

AgenticDoc

面向复杂文档的多模态 Agentic RAG 问答系统

Java 17 Spring Boot 3.5 Vue 3 TypeScript 5 Docker Compose

项目介绍  ·  核心设计  ·  研究成果  ·  系统架构  ·  快速部署


项目简介

AgenticDoc 是一个面向 PDF、Word、PPT、Markdown 等复杂文档的开源 RAG 问答系统。

与固定执行“切片、召回、生成”的传统 RAG 流程不同,AgenticDoc 将文档处理拆分为索引密集型按需即时型两条路径,并使用 ReAct Agent 根据问题自主选择语义检索、关键词检索、原文读取和页面视觉分析等工具。

系统不仅关注可提取文本,也保留文档页面截图,能够进一步处理表格、图表、扫描页和复杂版式内容。

核心特性

  • 双模式文档处理:兼顾固定知识库的高频检索与临时文档的即时分析。
  • Agentic RAG:由 Agent 根据问题规划检索过程,而不是依赖单次固定召回。
  • 多模态理解:同时建立文本切片索引和页面图像索引,支持 VLM 页面分析。
  • VLM 智能切片:从页面截图中识别正文、表格、图表和章节结构,生成适合 RAG 的切片。
  • 多种检索工具:支持文本语义检索、图片语义检索、关键词检索、切片读取和页面视觉问答。
  • 文档预处理:支持 Word 转 PDF、PDF 页面渲染、OCR、页面文本提取和跨页切片合并。
  • 流式问答:支持多轮会话、SSE 流式输出和 Agent 工具调用过程展示。
  • 动态模型配置:可配置 Chat、VLM、文本 Embedding 和多模态 Embedding 模型。
  • 远程 PDF 上传:支持输入公开 PDF 链接,后端校验并下载后进入统一处理流程。
  • 任务恢复:文档处理阶段失败后可从当前阶段继续执行。
  • 容器化部署:提供前端、后端、MySQL、Redis 的 Docker Compose 部署方案。

核心设计

设计动机

项目围绕复杂文档 RAG 中的三个问题展开:

  1. 固定检索流程难以适配不同问题:事实查询、关键词定位、跨页理解和图表分析需要不同的检索方式,因此由 Agent 动态选择工具。
  2. 文档内容不只存在于文本层:表格结构、页面布局、流程图和扫描页信息容易在纯文本抽取中丢失,因此同时保留页面截图和视觉分析能力。
  3. 预处理成本与查询成本需要平衡:固定知识库适合提前构建完整索引,临时文档则适合减少预计算并在查询时按需分析,因此形成两条互补的处理路径。

索引密集型

索引密集型适合内容相对固定、需要频繁问答的文档。系统在上传后预先完成较重的处理和索引构建,以降低后续查询成本。

flowchart LR
    A["上传文档"] --> B{"文档类型"}
    B -->|"PDF / Word / PPT"| C["文档转换与页面截图"]
    B -->|"TXT / Markdown"| H["文本切片"]
    C --> D["页面多模态向量化"]
    D --> E["VLM 智能切片"]
    E --> F["跨页切片合并"]
    F --> G["切片文本向量化"]
    H --> G
    G --> I["Redis 向量索引"]
    I --> J["Agent 检索问答"]
Loading

问答阶段可使用的主要工具:

工具 用途
semantic_search 对文本切片执行语义检索
keyword_search 对切片执行精确关键词检索
read_chunk 读取指定切片的完整内容
image_semantic_search 根据自然语言检索相关页面截图
get_chart_page 根据图表编号定位原始页面
visual_qa 使用 VLM 分析页面或页面局部区域

按需即时型

按需即时型适合临时文档、低频问答,或需要频繁核对原始页面的场景。上传阶段只保留页面截图和页面文本,复杂分析推迟到问答阶段执行。

flowchart LR
    A["上传文档"] --> B["文档转换"]
    B --> C["页面截图"]
    C --> D["页面文本解析 / OCR"]
    D --> E["保存页面内容"]
    E --> F["Agent 按需读取"]
    F --> G["文本回答或 VLM 视觉分析"]
Loading

问答阶段可使用的主要工具:

工具 用途
get_document_global_info 获取文档页数、目录和元数据等全局信息
search_keyword_in_pages 在指定页面范围内检索关键词
read_page_text 读取指定页面的解析文本
page_visual_qa 使用 VLM 分析页面截图或局部区域

两种模式如何选择

对比项 索引密集型 按需即时型
适用场景 固定知识库、高频问答 临时文档、低频问答、页面核验
上传处理成本 较高 较低
问答响应速度 通常更快 取决于按需读取和视觉调用
文本语义检索 支持 不预建完整向量索引
页面图像检索 支持 由 Agent 按页读取
VLM 使用阶段 上传切片和问答分析 主要在问答阶段

论文研究成果

本项目对应论文 AgenticDoc: Dual-Regime Information Access for Multimodal Long-Document Question Answering。论文将多模态长文档问答建模为与使用场景相关的信息访问问题:

  • Preprocessed Regime(索引密集型):提前构建语义切片和持久化索引,以预处理成本换取更低的查询延迟与单次推理成本。
  • On-the-Fly Regime(按需即时型):不预建完整语义索引,通过“定位、读取、视觉核验”的渐进式交互即时获取证据。
  • 两种模式共享 ReAct 风格的 Agent 控制器,由模型根据中间观察动态选择工具并逐步收集证据。

AgenticDoc 双模式信息访问框架

论文在六个多模态长文档问答基准上进行了评测,AgenticDoc 的最佳模式取得以下结果:

Benchmark Accuracy 相对最强基线提升
MMLongBench-Doc 81.9 +14.3
FinRAGBench-V 82.3 +3.7
LongDocURL 75.1 +2.8
SlideVQA 93.9 +13.8
DocBench 88.3 +8.4
ViDoSeek 88.6 +9.2

实验进一步表明:

  • 双模式具有互补性:按需即时型适合临时上传和低频查询;索引密集型经过一次性预处理后,查询延迟和单次成本更低,更适合重复访问的文档集合。
  • 多步交互是主要收益来源:在 MMLongBench-Doc 上,将完整多步交互限制为固定的单步检索与读取后,准确率由 80.9 降至最高 39.7
  • 页面视觉核验不可替代:移除页面视觉读取工具后,两种模式的整体准确率分别下降 16.215.4 个点,对图表及版式问题的影响更明显。

具体实验设置、基线和消融分析请阅读完整论文 https://xxxxx

系统架构

flowchart TB
    UI["Vue 3 + TDesign 前端"]
    API["Spring Boot API"]
    AGENT["Alibaba ReactAgent"]
    PIPELINE["文档处理流水线"]
    MODEL["模型注册与动态配置"]
    MYSQL[("MySQL")]
    REDIS[("Redis / RediSearch")]
    FILES[("文档与页面截图")]
    LLM["Chat Model"]
    VLM["Vision Language Model"]
    EMB["Text Embedding"]
    MEMB["Multimodal Embedding"]

    UI -->|REST / SSE| API
    API --> AGENT
    API --> PIPELINE
    API --> MODEL
    AGENT --> MYSQL
    AGENT --> REDIS
    AGENT --> FILES
    PIPELINE --> MYSQL
    PIPELINE --> REDIS
    PIPELINE --> FILES
    MODEL --> LLM
    MODEL --> VLM
    MODEL --> EMB
    MODEL --> MEMB
Loading

技术栈

模块 技术
前端 Vue 3、TypeScript、Vite、TDesign、Axios、Marked
后端 Java 17、Spring Boot 3、Spring AI、Alibaba Graph Agent Framework
数据访问 MyBatis-Plus、MySQL
向量检索 Redis / RediSearch
文档处理 Aspose Words、Apache POI、Apache PDFBox
OCR RapidOCR ONNX
模型接入 OpenAI 兼容协议、DashScope 多模态 Embedding
部署 Docker、Docker Compose、Nginx

支持范围

文档格式

模式 支持格式
索引密集型 pdfdocdocxpptpptxtxtmd
按需即时型 pdfdocdocxpptx
远程链接上传 公开可访问的 pdf 链接

模型类型

类型 用途
CHAT Agent 推理和最终回答
VLM 页面视觉理解、图表分析和智能切片
EMBEDDING 文本切片向量化
MULTIMODAL_EMBEDDING 页面截图向量化和图片语义检索

模型 API Key 不应提交到 Git 仓库。项目初始化脚本中的 sk-xxxxx 仅为占位符,部署后需要在“模型配置”页面填写真实配置并测试连接。

快速开始

环境要求、Docker Compose 配置、启动命令及常见故障处理请阅读:

AgenticDoc 部署与开发指南

项目结构

agentic-rag
├─ agentic-rag-backend/       # Spring Boot 后端
│  └─ src/main/java/.../
│     ├─ ai/                  # 模型工厂、模型注册与多模态服务
│     ├─ base/                # 演示环境、IP 隔离与配额限制
│     ├─ common/              # 公共配置、异常、响应和工具
│     ├─ indexed/             # 索引密集型文档处理与 Agent
│     ├─ ondemand/            # 按需即时型文档处理与 Agent
│     └─ model/               # 模型配置管理
├─ agentic-rag-ui/            # Vue 3 前端
├─ deploy/                    # Docker Compose 部署文件
├─ third_party/               # 第三方本地依赖
├─ Dockerfile.backend
├─ Dockerfile.frontend
└─ 部署手册.md

致谢

本项目使用或参考了以下优秀开源项目与技术:

  • Spring Boot
  • Spring AI
  • Spring AI Alibaba
  • Vue.js
  • TDesign
  • MyBatis-Plus
  • Redis
  • Apache PDFBox
  • Apache POI
  • RapidOCR

About

agentic-rag

Resources

Stars

4 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors