DeepSeek-OCR 嵌入dify工作流
DeepSeek-OCR 嵌入工作dify流详解
DeepSeek-OCR 是 DeepSeek-AI 于 2025 年 10 月开源的一个创新性 OCR(光学字符识别)模型,专注于 Contexts Optical Compression(上下文光学压缩)。它不是传统的 OCR 工具,而是将视觉输入(图像)压缩为少量 视觉 token(vision tokens),然后通过语言模型解码为结构化文本(如 Markdown)。这种“嵌入”(embedding)机制的核心在于将高分辨率图像高效压缩为 LLM(大语言模型)可处理的 token 序列,显著降低序列长度(压缩比可达 10x-20x),同时保持高准确率(压缩 <10x 时 OCR 精度达 97%)。
该模型适用于文档解析、图像文本提取和视觉-语言任务,尤其在 RAG(Retrieval-Augmented Generation)或工作流中嵌入时,能优化长上下文处理。以下基于官方论文(arXiv:2510.18234)和 GitHub/Hugging Face 仓库,详细解释其 嵌入工作流(embedding workflow),包括架构、步骤、代码实现和应用示例。
1. 核心架构概述
DeepSeek-OCR 采用 两阶段管道(two-stage pipeline):视觉编码 + 语言解码。
- DeepEncoder(视觉编码器):从图像生成压缩的视觉 token(embeddings)。它使用卷积层 + Vision Transformer (ViT) 处理高分辨率输入,输出少量 token(每页 100-800 个),激活成本低。
- DeepSeek3B-MoE-A570M(解码器):Mixture-of-Experts (MoE) 语言模型,将视觉 token 投影到文本空间,解码为输出。支持动态分辨率(stitching embeddings)。
- 关键创新:
- 光学压缩:图像作为文本的“压缩层”,视觉 token 比原始文本 token 更紧凑(e.g., 1000 字文章压缩为 100 个视觉 token)。
- LLM-centric:设计为 LLM 的“前端”,无缝集成到工作流中。
- 参数规模:约 3B 参数,高效运行(单 A100 GPU 每日处理 20 万+ 页)。
- 基准性能(OmniDocBench):
- 100 token/页 超过 GOT-OCR2.0(256 token/页)。
- 800 token/页 超过 MinerU2.0(6000+ token/页)。
与传统 OCR 的区别:传统 OCR(如 PaddleOCR)直接提取文本;DeepSeek-OCR 通过视觉嵌入实现压缩,支持复杂布局(表格、图表、化学分子)。
2. 嵌入工作流步骤
工作流从图像输入到文本输出,嵌入发生在编码阶段。以下是端到端流程:
-
输入预处理(Image Preprocessing):
- 调整图像分辨率(e.g., 1024x1024),归一化。
- 支持多分辨率:动态模式下,分块处理并拼接 embeddings。
-
视觉嵌入生成(DeepEncoder Embedding):
- 将图像分块为 patches。
- 通过卷积 + ViT 编码为视觉 embeddings(低维向量表示)。
- 压缩机制:输出 token 数量远少于输入像素(e.g., 高压缩比下激活率低)。
- 输出:视觉 token 序列(e.g., 100 个 token)。
-
投影与桥接(Projection/Bridge):
- 将视觉 token 投影到解码器的 embedding 空间(维度对齐)。
-
解码与输出(Decoding):
- MoE 解码器处理 token + 提示(prompt),生成 Markdown/文本。
- 支持指令:e.g., “Convert to markdown” 或 “Extract text only”。
-
后处理(Post-Processing,可选):
- 精炼输出(e.g., LLM 校正),或集成到下游工作流(如 RAG 检索)。
工作流图示(文本描述):
图像输入 → 预处理 (Resize + Normalize) → DeepEncoder (ViT + Conv → 视觉 Embeddings) ↓
投影桥接 → DeepSeek3B-MoE (解码 + Prompt) → Markdown/文本输出↓ (可选)
后处理 → 集成 (e.g., RAG 索引)
- 压缩效果:视觉 token 长度 = 文本长度 / 压缩比(<10x 时精度高)。
- 端到端延迟:单页 <1s(GPU 上)。
3. 代码实现示例
基于 Hugging Face 仓库,使用 Transformers 库。假设有 GPU(CUDA)环境。
安装依赖(pinned 版本,避免兼容问题):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers==4.44.2 tokenizers==0.19.1
pip install flash-attn --no-build-isolation # 可选,加速注意力
git clone https://github.com/deepseek-ai/DeepSeek-OCR.git
cd DeepSeek-OCR
基本嵌入 + 推理工作流(Python 脚本):
import torch
from transformers import AutoModel, AutoTokenizer
from PIL import Image
import os# 设置 GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0"# 加载模型(嵌入核心)
model_name = "deepseek-ai/DeepSeek-OCR"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(model_name,_attn_implementation="flash_attention_2", # 加速trust_remote_code=True,use_safetensors=True
)
model = model.eval().cuda().to(torch.bfloat16) # 半精度,节省内存# 步骤1: 输入图像
image = Image.open("your_document.jpg") # 支持 JPG/PNG/PDF(需转图像)# 步骤2: 构建提示(定义工作流输出)
prompt = "<image>\nConvert the document to markdown." # 或 "Free OCR. Extract text only."# 步骤3: 嵌入 + 推理
inputs = tokenizer(prompt, images=[image], return_tensors="pt").to("cuda")
with torch.no_grad():outputs = model.generate(**inputs, max_new_tokens=1024, do_sample=False)# 步骤4: 解码输出
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(result) # 输出: Markdown 格式文本
-
批量处理工作流(文件夹处理):
import glob from pathlib import Pathinput_dir = Path("input_images/") output_dir = Path("output_text/")for img_path in input_dir.glob("*.jpg"):# 加载图像、嵌入、解码...output_path = output_dir / f"{img_path.stem}.md"with open(output_path, "w") as f:f.write(result) -
vLLM 加速版(高吞吐):
- 使用仓库的
vllm分支,适合生产工作流(每日 20 万页)。
- 使用仓库的
Docker 部署示例(一键工作流):
使用 DeepSeek OCR App(开源 React + FastAPI 应用):
# docker-compose.yml
services:backend:image: deepseek-ocr-backendbuild: ./backendports: ["8000:8000"]frontend:image: deepseek-ocr-frontendbuild: ./frontendports: ["3000:3000"]
- 运行:
docker-compose up。 - 界面支持拖拽上传、四种模式(Plain OCR、Describe、Find、Freeform)。
4. 在 Dify 工作流中的嵌入建议
基于你之前的 Dify 上下文(Celery 任务、RAG 索引),DeepSeek-OCR 可嵌入 Dify 的 数据集处理 + 索引工作流:
- 步骤集成:
- 文档上传(Celery 任务):触发
add_document_to_index_task,但先用 DeepSeek-OCR 处理图像文档。 - OCR 嵌入:在
DocumentSegment生成前,调用 DeepSeek-OCR 提取文本 + embeddings(替换传统分片)。 - RAG 索引:将视觉 token 直接输入
IndexProcessorFactory,支持父子索引(PARENT_CHILD_INDEX)。 - 追踪:用
process_trace_tasks记录 OCR 耗时/准确率。
- 文档上传(Celery 任务):触发
- 配置(Apollo 或 .env):
DEEPSEEK_OCR_MODEL=deepseek-ai/DeepSeek-OCR COMPRESSION_RATIO=10 # 压缩比 - Celery 扩展任务:
@shared_task(queue="dataset") def ocr_embed_document(image_path):# 调用 DeepSeek-OCR 嵌入result = deepseek_ocr_embed(image_path)# 更新 DocumentSegmentdb.session.commit() - 优势:压缩减少 token 负载,提升 RAG 检索效率;支持复杂文档(如图表)。
5. 注意事项与局限
- 硬件:需 NVIDIA GPU(A100 推荐);ARM(如 NVIDIA Spark)需自定义 Docker。
- 局限:PDF 需预转图像;高压缩 (>20x) 精度降至 60%。
- 资源:
- GitHub: deepseek-ai/DeepSeek-OCR
- Hugging Face: deepseek-ai/DeepSeek-OCR
- 论文: arXiv:2510.18234
- App 示例: DeepSeek OCR App
此工作流高效、开源,适合 Dify 等平台的 AI 文档处理。
DeepSeek-OCR 是否可以解析 Excel 文件(针对公式)?
基于 DeepSeek-OCR 的设计和现有文档,它不能直接解析 Excel 文件(.xlsx 或 .xls),尤其是针对 Excel 中的公式(如 =SUM(A1:A10) 或复杂函数)。下面我详细解释原因、替代方案和处理建议。DeepSeek-OCR 是一个视觉语言模型(VLM),专注于图像和扫描文档的 OCR,而非结构化文件格式如 Excel。
1. DeepSeek-OCR 的核心功能限制
-
输入类型:DeepSeek-OCR 主要处理图像文件(如 PNG、JPEG)或扫描 PDF。它通过视觉编码器(DeepEncoder)将图像压缩为视觉令牌,然后使用 MoE 解码器提取文本、表格、公式等。
- 不支持直接上传 Excel:代码中(如提供的 FastAPI API)使用
UploadFile处理图像(保存为.png),并通过model.infer(image_file=tmp_img)进行推理。Excel 是二进制格式,需要专用解析器(如 openpyxl),而 DeepSeek-OCR 没有内置此功能。
- 不支持直接上传 Excel:代码中(如提供的 FastAPI API)使用
-
针对公式的处理:
- DeepSeek-OCR 擅长解析图像中的数学/化学公式(如 LaTeX 格式的 ( E = mc^2 ) 或积分符号),准确率高达 97%。它可以将图像中的公式转换为结构化输出(如 Markdown 或 JSON)。
- 但不处理 Excel 公式:Excel 公式是字符串表达式(如
=VLOOKUP(...)),存储在单元格元数据中,不是图像。DeepSeek-OCR 无法“看到”或执行这些公式,因为它不是 Excel 引擎。
-
证据:从 DeepSeek 官方文档和基准测试(如 OmniBenchDoc V1.5)中,DeepSeek-OCR 强调处理复杂文档布局(表格、公式、图表),但输入限于视觉内容。没有提及 Excel 文件支持。
2. 如果 Excel 文件包含公式,如何间接处理?
虽然不能直接解析,但可以通过转换步骤间接使用 DeepSeek-OCR 处理 Excel 中的视觉元素(如截图中的公式)。以下是针对公式的实用方案:
-
步骤 1: 转换 Excel 为图像/PDF
- 使用 Python 库(如
openpyxl或pandas)读取 Excel,渲染为图像(每个工作表或选定区域)。 - 示例代码(可在你的环境中运行):
import openpyxl from PIL import Image import matplotlib.pyplot as plt import pandas as pd# 读取 Excel 文件 wb = openpyxl.load_workbook('your_file.xlsx') ws = wb.active # 选择工作表# 提取数据为 DataFrame(忽略公式,只取值) data = ws.values cols = next(data) df = pd.DataFrame(data, columns=cols)# 渲染为图像(可视化公式所在区域) fig, ax = plt.subplots() ax.axis('tight') ax.axis('off') table = ax.table(cellText=df.values, colLabels=df.columns, loc='center') plt.savefig('excel_screenshot.png', bbox_inches='tight', dpi=300) # 保存为高分辨率图像 Image.open('excel_screenshot.png').show() # 查看图像- 这会生成
excel_screenshot.png,其中 Excel 公式显示为渲染后的文本/图像(公式值已计算)。
- 这会生成
- 使用 Python 库(如
-
步骤 2: 使用 DeepSeek-OCR 处理图像
- 将生成的图像上传到你的 FastAPI API(
/api/ocr端点),指定模式如mode=figure_chart(针对公式/图表)或freeform(自定义提示:“Parse the mathematical formulas in this Excel screenshot as LaTeX”)。 - 输出示例:
- 文本:提取的公式字符串。
- 结构化:LaTeX 格式,如
\[ \sum_{i=1}^{n} x_i = S \]。 - 边界框:定位公式位置(如果启用
grounding=True)。
- 将生成的图像上传到你的 FastAPI API(
-
针对 Excel 公式的特殊提示:
- 在
prompt参数中指定:“Extract and explain the Excel formulas in this image, convert to readable math notation if possible.” - DeepSeek-OCR 会尝试“理解”上下文,但由于是图像,它只能提取显示的公式值(非源代码)。例如,如果公式是
=IF(A1>10, "High", "Low"),它可能提取为条件逻辑描述。
- 在
-
局限:
- 公式执行:DeepSeek-OCR 提取但不计算公式(e.g., 不会求值)。需结合 Excel 或 Python(如
xlwings)执行。 - 复杂 Excel:多工作表、宏或隐藏公式无法捕获。
- 准确率:图像质量高时,公式解析达 97%;低分辨率下降至 60%。
- 公式执行:DeepSeek-OCR 提取但不计算公式(e.g., 不会求值)。需结合 Excel 或 Python(如
3. DeepSeek 生态中的 Excel 支持(非 OCR)
从搜索结果看,DeepSeek(非专指 OCR) 有其他工具集成 Excel,但这些是AI 助手,而非 OCR:
- DeepSeek Excel 集成:使用 VBA 或 API(如
DS_Chat公式)生成/解释 Excel 公式。例如,输入=DeepSeek_Explain(A1)解释 VLOOKUP 公式。 支持数据分析、预测,但需 API 密钥。 - 示例:在 Excel 中连接 DeepSeek API 生成蒙特卡洛模拟公式。
- 工具:如 Sourcetable(使用 DeepSeek 分析 Excel 数据),但文件大小有限制。
如果你的需求是生成/解释 Excel 公式(而非从图像提取),推荐这些集成;如果是从扫描/图像中解析,则用上述转换方法。
4. 推荐替代工具
- 直接解析 Excel:使用
openpyxl(读取公式字符串)+sympy(数学公式求值)。- 示例:
import openpyxl wb = openpyxl.load_workbook('your_file.xlsx') cell = wb.active['A1'] # 假设公式在 A1 print(cell.value) # 输出公式字符串,如 '=SUM(B1:B10)' # 使用 sympy 解析数学部分 from sympy import sympify expr = sympify('sum(b1 to b10)') # 简化示例 print(expr.evalf())
- 示例:
- OCR + Excel:PaddleOCR 或 Tesseract 处理图像,然后导入 Excel。
- 全 AI:ChatGPT-4o 或 Claude 支持上传 Excel(有限制),可解释公式。
总结
- DeepSeek-OCR 不能直接解析 Excel 文件,因为它是图像 OCR 工具。但通过截图 + OCR,可以针对图像中的公式进行高精度解析(97% 准确率)。
- 如果你的 Excel 是扫描版(图像),直接上传图像即可;如果是数字版,先转换。
