当前位置: 首页 > news >正文

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. 嵌入工作流步骤

工作流从图像输入到文本输出,嵌入发生在编码阶段。以下是端到端流程:

  1. 输入预处理(Image Preprocessing)

    • 调整图像分辨率(e.g., 1024x1024),归一化。
    • 支持多分辨率:动态模式下,分块处理并拼接 embeddings。
  2. 视觉嵌入生成(DeepEncoder Embedding)

    • 将图像分块为 patches。
    • 通过卷积 + ViT 编码为视觉 embeddings(低维向量表示)。
    • 压缩机制:输出 token 数量远少于输入像素(e.g., 高压缩比下激活率低)。
    • 输出:视觉 token 序列(e.g., 100 个 token)。
  3. 投影与桥接(Projection/Bridge)

    • 将视觉 token 投影到解码器的 embedding 空间(维度对齐)。
  4. 解码与输出(Decoding)

    • MoE 解码器处理 token + 提示(prompt),生成 Markdown/文本。
    • 支持指令:e.g., “Convert to markdown” 或 “Extract text only”。
  5. 后处理(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 的 数据集处理 + 索引工作流

  • 步骤集成
    1. 文档上传(Celery 任务):触发 add_document_to_index_task,但先用 DeepSeek-OCR 处理图像文档。
    2. OCR 嵌入:在 DocumentSegment 生成前,调用 DeepSeek-OCR 提取文本 + embeddings(替换传统分片)。
    3. RAG 索引:将视觉 token 直接输入 IndexProcessorFactory,支持父子索引(PARENT_CHILD_INDEX)。
    4. 追踪:用 process_trace_tasks 记录 OCR 耗时/准确率。
  • 配置(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 没有内置此功能。
  • 针对公式的处理

    • 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 库(如 openpyxlpandas)读取 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 公式显示为渲染后的文本/图像(公式值已计算)。
  • 步骤 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)。
  • 针对 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%。
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 是扫描版(图像),直接上传图像即可;如果是数字版,先转换。
http://www.dtcms.com/a/520233.html

相关文章:

  • Linux小课堂: Vim与Emacs之Linux文本编辑器的双雄格局及Vim安装启动详解
  • 江宁外贸网站建设国内付费代理ip哪个好
  • 多种大连网站建设景观设计公司理念
  • KP201FLGA电机驱动电源方案SOT23-6恒压恒流恒功率电路原理图分析
  • Hadoop报错 Couldn‘t find datanode to read file from. Forbidden
  • 【案例实战】HarmonyOS分布式购物车:多设备无缝协同的电商体验
  • OpenCV工程中直接包含调用vs2022
  • 怎么看一个网站用什么做的北京建设公司有哪些
  • 上海交大刘鹏飞:智能不在于数据堆砌,78个样本训练出超强Agent,数据效率提升128倍
  • SpringAI1-快速⼊⻔
  • 本地局域网邮件管理系统:从原理到实现的完整指南
  • 面向小样本蜂窝网络故障诊断的模型与知识互增强方法
  • 上海网站推广方法河北石家庄属于几线城市
  • 专业购物网站建设哪家好免费找客户网站
  • 受欢迎的网站开发php源码搭建网站流程
  • 第八章 排序——课后习题解练【数据结构(c语言版 第2版)】
  • 如果有大量的key需要设置同一时间过期,一般需要注意什么?
  • 【nvidia-GB200】(2) 18 台 GB200 服务器集群 NCCL All-to-All 性能深度测评:72 张 GPU 多对多通信的效率与潜力
  • MYSQL数据库--基本练习
  • Harbor VS Hadess,开源制品管理工具一文详细对比分析
  • 查找企业信息的网站哪个好广州网站外包
  • 基于3D激光点云的障碍物检测与跟踪---(3)基于匈牙利算法的障碍物跟踪
  • 虚拟化技术实践指南:KVM 与 VMware ESXi 部署全流程
  • 你的地图,你做主!视频汇聚平台EasyCVR解锁多源地图自由,打造监控“全域一张图”
  • Prometheus(四)—— Alertmanager完整部署指南:邮件+钉钉告警全流程落地
  • Fakebook.
  • (11)(2.1.7) FETtec OneWire ESCs
  • 红⿊树实现
  • HTML DOM 简介
  • 介绍东莞网站建设的ppt济南网站建设方案咨询