DeepSeek-OCR驱动的多模态数据分析Agent实战,本文详细阐述如何在数据分析场景中,利用DeepSeek-OCR与LangChain 1.0搭建一套端到端的多模态数据分析Agent。项目中包含开箱即用的源码,可免费获取。
项目功能
核心功能一:使用Vllm启动DeepSeek-OCR模型,并通过多线程实现对复杂图像、PDF、扫描件、手写笔记及旧试卷等各类文档的高精度一键解析。


核心功能二:支持超长文本上下文压缩,并能接入DeepSeek、Qwen3、GPT等多种大模型生成详细分析报告,同时实时输出可视化报表。

核心功能三:动态可视化报表生成,支持多轮追问,并能从不同维度输出BI大屏。


应用场景
- 金融投研与财报解析:基金年报、季报、IPO招股书结构化提取与可视化洞察。
- 企业经营分析:收入、利润、现金流、费用结构的趋势与对比分析及BI呈现。
- 政务与审计:规章制度、预算执行、公共项目报告的证据抽取与要点总结。
- 科研与论文:图表重构、公式与结论抽取,辅助综述与数据复现与再分析。
- 合同与合规:条款聚合、风险条目识别、金额与日期要点检索与审阅。
技术方案
在数据分析领域,OCR(光学字符识别)与计算机视觉技术主要涉及图表识别与重构,核心处理流程如下:
输入:图表图片/ PDF多模态文件 ↓ 【结构检测】识别坐标轴、图例、标题位置 ↓ 【OCR提取】读取文字:轴标签、刻度值、数据标签 ↓ 【图形识别】检测柱子、折线、点的位置和大小 ↓ 【数据计算】根据像素位置和坐标刻度反推数值 ↓ 【重新绘制】用提取的数据重新生成图表
通过「vLLM推理加速 + DeepSeek-OCR页面级解析 + 智能切分并发结构化」三项手段,该方案有效解决了AI数据分析中的三大难题:
- 解决多模态混排难题:DeepSeek-OCR能够精准识别图片/表格/文字/公式,并统一转换为Markdown格式;
- 解决上下文超长难题:通过智能切分、并发抽取和统一JSON Schema,形成紧凑且可检索的上下文;
- 解决可视化解释难题:基于知识库重绘ECharts图表,并生成可交互的结论与说明。
在实际操作中,超长上下文是影响分析效果的主要瓶颈。项目采用“切分-并发-结构化”的三步法来解决此问题:
痛点表现:
- 一份50页PDF可能产生10万字符,直接输入LLM会导致超出上下文窗口并稀释关键信息;
- 表格、数字、结论混杂在文字中,难以快速抽取与对齐;
- 纯文本缺乏层次与分类,难以复用与检索。
三步解决:
- 智能切分:按章节/页码/锚点进行切片,保证片段自洽并携带索引;
- 并发分析:对每个切片并发抽取“摘要、表格/图表、关键指标”;
- 结构化存储:将提取结果写入统一的JSON Schema,支持后续检索与拼接生成。
以一个基金的PDF报告为例,更直观地展示从文档到可视化报告的端到端流程:
┌─────────────────────────────────────────────────┐ │ 输入:PDF文档 + 用户问题 │ │ "分析2024年财务报告,重点关注收入和利润" │ └──────────────────┬──────────────────────────────┘ ↓ 【第1步:文档识别】 DeepSeek-OCR API ↓ 输出:Markdown文本(10万字符) ↓ 【第2步:智能切片】 按标题分割为30个块 ↓ 【第3步:并发结构化提取】 提取:摘要 + 表格 + 关键点 耗时:(并发) ↓ 【第4步:知识库构建】 压缩为紧凑的上下文(2万字符) ↓ 【第5步:LLM生成报告】 输出:HTML + Title + Summary ↓ 【第6步:保存展示】 浏览器打开查看交互式报告 ↓ ┌──────────────────┴──────────────────────────────┐ │ 输出:交互式HTML报告 + 文字分析摘要 │ │ - 7+ 个可视化图表(ECharts) │ │ - 3-5条核心洞察要点 │ │ - 支持交互、导出、分享 │ └─────────────────────────────────────────────────┘
系统架构
项目采用模块化设计,核心结构如下:
DataAnalysis/ # 项目根目录 ├── 📁 backend/ # 后端服务层 │ ├── Data_analysis/ │ │ ├── DeepSeek-OCR-vllm/ # OCR服务 │ │ │ ├── backend_integration_api.py # 🔥 主服务入口 │ │ │ ├── simple_ocr_client.py # OCR推理服务 │ │ │ ├── config.py # OCR配置 │ │ │ └── deepseek_ocr.py # DeepSeek-VL模型封装 │ │ ├── backwark/ # 数据分析核心 │ │ │ ├── Information_structuring.py # 信息结构化 │ │ │ ├── visualizer.py # 可视化生成器 │ │ │ └── pdf_exporter.py # PDF导出 │ │ └── mock_visualizer.py # 测试用模拟器 │ └── 10华夏收入混合型证券投资基金2024年年度报告.pdf # 示例文档 │ └── /tmp/ocr_results/ # 临时结果目录 ├── status_*.json # 任务状态 ├── *_analyzed.json # 结构化结果 └── answer_*.html # 可视化报告
核心模块:
| 模块 | 文件 | 功能 |
|---|---|---|
| 主服务 | backend_integration_api.py | FastAPI服务,协调OCR→结构化→可视化流程 |
| OCR推理 | simple_ocr_client.py | DeepSeek-VL推理服务(运行在 GPU 服务器) |
| 结构化分析 | Information_structuring.py | 使用LLM提取表格、要点、摘要 |
| 可视化 | visualizer.py | 生成 ECharts 交互式报告 |
系统部署
环境配置要求
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Python | ≥ 3.10 | 推荐 3.11 |
| CUDA | ≥ 12.1 | DeepSeek-VL 需要GPU支持 |
| GPU显存 | ≥ 16GB | 推荐 24GB+ |
| 系统内存 | ≥ 16GB | 推荐 32GB+ |
创建虚拟环境并安装依赖
创建并激活虚拟环境,执行:
# 创建新的虚拟环境 conda create -n deepseek_ocr python=3.11 -y # 激活环境 conda activate deepseek_ocr
安装项目依赖,执行:
cd backend/DeepSeek-OCR-vllm pip install -r requirements.txt
配置.env
按照如下说明配置.env服务:
# DeepSeek-OCR 配置 DEEPSEEK_MODEL_PATH=/home/data/nongwa/workspace/model/OCR/DeepSeek-OCR DEEPSEEK_OCR_URL=http://192.168.110.131:8707/ocr DEEPSEEK_OCR_HOST=0.0.0.0 DEEPSEEK_OCR_PORT=8707 # 数据分析配置 DATA_ANALYSIS_BASE_SIZE=1024 DATA_ANALYSIS_IMAGE_SIZE=640 DATA_ANALYSIS_CROP_MODE=true DATA_ANALYSIS_PROMPT="<image>
<|grounding|>Convert the document to markdown." # 信息结构化配置 QWEN_TOKENIZER_PATH=/home/data/nongwa/workspace/Data_analysis/Qwen-tokenizer ANALYSIS_CHUNK_SIZE=1500 ANALYSIS_MAX_WORKERS=10 ANALYSIS_API_KEY=sk-xxx ANALYSIS_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1 ANALYSIS_MODEL_NAME=qwen3-max # 可视化配置 VISUALIZER_API_KEY=sk-xxx VISUALIZER_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1 VISUALIZER_MODEL_NAME=qwen3-max # API服务配置 API_HOST=0.0.0.0 API_PORT=8708 API_DEBUG=false API_RELOAD=false # 文件存储配置 UPLOAD_DIR=/home/MuyuWorkSpace/03_DataAnalysis/backend/Data_analysis/output/ocr_uploads RESULTS_DIR=/home/MuyuWorkSpace/03_DataAnalysis/backend/Data_analysis/output/ocr_results TEMP_DIR=/home/MuyuWorkSpace/03_DataAnalysis/backend/Data_analysis/output/ocr_temp # 文件处理限制 MAX_FILE_SIZE_MB=100 SUPPORTED_EXTENSIONS=.jpg,.jpeg,.png,.pdf,.txt,.md # 并发和性能配置 MAX_CONCURRENT_REQUESTS=5 REQUEST_TIMEOUT=300 CLEANUP_INTERVAL_HOURS=24 # 开发环境配置 ENVIRONMENT=development LOG_LEVEL=info
启动主服务
启动后端服务,需确保在deepseek_ocr虚拟环境中,并进入项目目录,然后执行:
# 确保在 deepseek_ocr 虚拟环境中 conda activate deepseek_ocr # 进入项目目录 cd /home/MuyuWorkSpace/03_DataAnalysis/backend/Data_analysis/DeepSeek-OCR-vllm # 启动主服务 python backend_integration_api.py
启动前端服务
接下来进入前端目录,安装Node.js依赖:
# 进入前端目录 cd ./frontend # 安装依赖(首次运行需要,耗时约2-5分钟) npm install # 启动前端服务 npm run dev
