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 中的三个问题展开:
- 固定检索流程难以适配不同问题:事实查询、关键词定位、跨页理解和图表分析需要不同的检索方式,因此由 Agent 动态选择工具。
- 文档内容不只存在于文本层:表格结构、页面布局、流程图和扫描页信息容易在纯文本抽取中丢失,因此同时保留页面截图和视觉分析能力。
- 预处理成本与查询成本需要平衡:固定知识库适合提前构建完整索引,临时文档则适合减少预计算并在查询时按需分析,因此形成两条互补的处理路径。
索引密集型适合内容相对固定、需要频繁问答的文档。系统在上传后预先完成较重的处理和索引构建,以降低后续查询成本。
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 检索问答"]
问答阶段可使用的主要工具:
| 工具 | 用途 |
|---|---|
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 视觉分析"]
问答阶段可使用的主要工具:
| 工具 | 用途 |
|---|---|
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 的最佳模式取得以下结果:
| 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.2和15.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
| 模块 | 技术 |
|---|---|
| 前端 | 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 |
| 模式 | 支持格式 |
|---|---|
| 索引密集型 | pdf、doc、docx、ppt、pptx、txt、md |
| 按需即时型 | pdf、doc、docx、pptx |
| 远程链接上传 | 公开可访问的 pdf 链接 |
| 类型 | 用途 |
|---|---|
CHAT |
Agent 推理和最终回答 |
VLM |
页面视觉理解、图表分析和智能切片 |
EMBEDDING |
文本切片向量化 |
MULTIMODAL_EMBEDDING |
页面截图向量化和图片语义检索 |
模型 API Key 不应提交到 Git 仓库。项目初始化脚本中的 sk-xxxxx 仅为占位符,部署后需要在“模型配置”页面填写真实配置并测试连接。
环境要求、Docker Compose 配置、启动命令及常见故障处理请阅读:
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
