核心摘要

AI 图像理解是把视觉输入转换为可靠结构化数据和有依据答案的工程能力。生产系统不应把所有图片直接丢给视觉语言模型,而应先做图像预处理、OCR 和版面分析,再用 VLM 完成推理,用 Schema 校验结构化输出,用置信度评分和人工复核处理不确定案例。本文给出 OCR、文档解析、视觉问答和结构化抽取的生产 Pipeline 设计。

目录

核心要点

  • OCR 不等于图像理解:版面、表格、印章、手写、图表和视觉上下文往往承载真正语义。
  • VLM 必须被证据约束:答案应绑定 OCR span、bbox 和源区域,降低幻觉。
  • 结构化抽取必须做 Schema 校验:生产系统不能只相信模型输出的 JSON。
  • 人工复核是系统能力的一部分:低置信度场景进入人工队列,而不是直接失败。
  • 评估要按文档类型切片:发票、图表、证件、收据、技术图纸的失败模式完全不同。

🔧 实用工具:使用 图片转 Base64 工具 准备本地测试 payload;使用 JSON 格式化工具 检查抽取结果。

图像理解到底是什么

图像理解不只是图片分类。在生产 AI 系统中,它通常包含四类任务:

任务 示例 输出
OCR 读取扫描发票文字 文本 span + bbox
文档解析 抽取发票号和总金额 结构化 JSON
视觉问答 “这张图表说明了什么?” 有依据的答案
视觉搜索 查找相似图纸或页面 排序结果

更完整的多模态架构可参考 多模态 AI 工程实战原生多模态模型 vs 管道方案

Pipeline 架构

flowchart TD A["原始图片或文档页"] --> B["图像预处理"] B --> C["OCR"] B --> D["版面检测"] C --> E["文本 Span"] D --> F["区域与表格"] E --> G["VLM 推理"] F --> G G --> H["结构化输出"] H --> I["Schema 校验"] I --> J{"置信度是否足够"} J -->|"是"| K["发布结果"] J -->|"否"| L["人工复核"]

关键原则是保留中间产物。最终答案出错时,你需要判断是 OCR、版面、Prompt、推理还是校验出了问题。

OCR 与版面分析

OCR 抽取文本,但文档理解需要几何信息。一个文本 span 至少应包含内容、置信度、页码和 bbox。

json
{
  "text": "Total Amount: $1,248.00",
  "confidence": 0.98,
  "page": 1,
  "bbox": [120, 640, 410, 682]
}

版面检测负责识别表格、页眉、页脚、图像、印章、签名和表单字段。

组件 价值
text span 回答 grounding
bbox 可视化引用
表格 财务和运营数据
图表 非文本证据
签名/印章 合规工作流

视觉问答

视觉问答(VQA)允许用户对图片或页面提问。生产规则是:答案必须有证据。

不合格答案:

text
收入可能增长了。

合格答案:

json
{
  "answer": "收入从 Q2 到 Q3 增长了约 18%。",
  "evidence": [
    {"page": 3, "region": [80, 120, 620, 410], "type": "chart"}
  ],
  "confidence": 0.86
}

视觉问答不是让模型自由发挥,而是要求模型基于可定位证据回答。

结构化抽取

结构化抽取将图片转换成符合 Schema 的 JSON。Schema 应明确字段类型:

typescript
interface InvoiceExtraction {
  invoiceNumber: string;
  vendorName: string;
  invoiceDate: string;
  currency: "USD" | "EUR" | "CNY";
  lineItems: Array<{
    description: string;
    quantity: number;
    unitPrice: number;
    amount: number;
  }>;
  totalAmount: number;
  confidence: number;
}

Schema 校验可以拦截很多错误:字段缺失、币种错误、金额不一致、日期非法和类型错乱。

置信度与校验

置信度应综合多个信号:

信号 含义
OCR confidence 文本抽取可靠性
VLM self-score 模型不确定性
Schema validation 结构正确性
arithmetic checks 发票/表格数值一致性
evidence coverage 答案是否有源区域支撑
python
def confidence_score(ocr_conf: float, schema_ok: bool, evidence_count: int) -> float:
    score = 0.5 * ocr_conf
    score += 0.3 if schema_ok else 0.0
    score += min(evidence_count, 3) * 0.05
    return min(score, 1.0)

print(confidence_score(0.94, True, 2))

实现模式

TypeScript API 应同时返回答案和证据:

typescript
interface VisualAnswer {
  answer: string;
  confidence: number;
  citations: Array<{
    page: number;
    bbox: [number, number, number, number];
    sourceType: "ocr" | "table" | "chart" | "image";
  }>;
}

async function answerImageQuestion(imageId: string, question: string): Promise<VisualAnswer> {
  return {
    answer: "这张图表显示 Q3 收入增长。",
    confidence: 0.88,
    citations: [{ page: 1, bbox: [80, 120, 620, 420], sourceType: "chart" }],
  };
}

调试图片 payload 时可以使用 图片转 Base64 工具,但不要在数据库中存储大型 Base64 字符串。生产环境应把文件放入对象存储,再用 URL 或 ID 引用。

评估方法

不同文档类型应分别评估:

数据切片 指标
发票 字段级准确率、总金额一致性
收据 商户/日期/金额准确率
图表 VQA 精确匹配、证据准确率
证件 OCR 字错率、字段精确率
技术图纸 组件关系准确率

不要只看平均准确率。模型可能在收据上表现很好,但在手写表单上表现很差。

最佳实践

  1. 为每个答案保存 OCR span 和 bbox
  2. 在确定性文本抽取足够时,不要盲目使用 VLM
  3. 结构化结果发布前必须做 Schema 校验
  4. 低置信度样本进入人工复核,并沉淀为评测数据
  5. 按文档类型拆分 Prompt、Schema 和指标

常见问题

什么是 AI 图像理解流水线?

它是把原始图片或文档页转换成结构化数据和有依据答案的系统,通常包含预处理、OCR、版面检测、VLM 推理、校验和人工复核。

文档理解应该使用 OCR 还是视觉语言模型?

确定性文本抽取和合规关键字段优先用 OCR;涉及版面、图表、手写和视觉上下文推理时使用 VLM。生产系统通常两者结合。

如何衡量图像理解质量?

可以衡量字段准确率、OCR 字错率、版面 F1、视觉问答精确匹配、幻觉率、置信度校准和人工复核通过率。

如何降低幻觉?

将答案绑定到 OCR span 和视觉区域,要求返回引用,使用 Schema 校验,并把低置信度结果送入人工复核。

最大的生产风险是什么?

最大的风险是静默错误抽取:系统返回看似合理但数值错误的 JSON。应通过证据引用、算术校验、Schema 校验和抽样审计降低风险。

总结

AI 图像理解需要严谨的工程流水线。OCR 和版面分析提供 grounding,VLM 提供推理,Schema 提供结构校验,置信度阈值和人工复核提供质量闭环。它不是一次更聪明的模型调用,而是一套可靠的视觉数据系统。

相关资源