Week 7:非结构化数据工程

从“原始文档”到“带证据锚点的可检索文档资产”

Week7 不是 PDF 工具横评,也不是 RAG 索引课。

这一周只解决一个关键问题:

企业知识文档进入系统后,如何保留布局、层级、页码、坐标、版本、质量状态,并把每个 chunk 绑定到可回指原文的 evidence anchor。

本周默认 Student Core 路线是 Docling-first 文档解析、结构感知切片、evidence anchor 与质量门禁。Unstructured、OCR、ASR、video、VLM caption 都只作为 optional / Instructor Scale,不作为学员必需路径。

Week7 不生成 embedding、不写 pgvector、不做 hybrid retrieval、不做 reranker、不实现 RAG API。Week8 才开始索引和检索。

本周一句话

把 Week3 已经 ingest 的 raw document asset 升级成 可切片、可质检、可引用、可被 Week8 安全索引的文档资产 v1

本周为什么重要

  • 如果只做 PDF to text,标题层级、表格结构、页码和 bbox 很容易丢。
  • 如果 chunk 没有 evidence anchor,Week8 的 citation 只能变成“看起来像引用”。
  • 如果解析策略和切片策略没有版本,坏案例无法复盘,也无法做回归对比。
  • 如果没有 quality gate,Week8 会把低质量 chunk 直接送进索引。

本周在整门课里的位置

上承 Week03

Week03 负责把文档资产拿进系统:manifest、raw object、knowledge_doc、ingest report。

本周解决

Week7 把 raw document 变成 parsed sections、document chunks、evidence anchors、quality report 和 Week8 ready gate。

接住 Week06

如果 Week06 asset factory 已落地,Week7 可以挂到 Dagster asset graph;如果还没有,先走 devbox CLI fallback。

下接 Week08

Week8 只应该消费通过质量门禁、且能回指原文的 chunks。任何 citation 都必须来自 evidence anchor。

五个课时

课时1|为什么“抽出文本”不等于非结构化数据工程

  • raw document 与 document asset 的区别
  • 为什么 RAG 需要结构保真和 provenance
  • Week7 做什么、不做什么

进入课时 1

课时2|智能文档解析:布局、层级、表格、页码、坐标与 provenance

  • DoclingDocument / Unstructured elements 的取舍
  • parser 输出必须保留哪些 metadata
  • 为什么 OCR / ASR / VLM 不进入 Student Core

进入课时 2

课时3|从 section 到 chunk:结构感知切片与 overlap 边界

  • fixed-size chunk 为什么危险
  • section-aware / table-aware / page-aware 怎么组合
  • chunk strategy version 和稳定 ID

进入课时 3

课时4|Evidence Anchor:让每个 chunk 可以回指原文位置

  • chunk、section、anchor 的职责拆分
  • citation 为什么不能由 LLM 临时发明
  • anchor contract 最少要保留什么

进入课时 4

课时5|解析质量与切片质检:把 Week8 索引准入做成工程门禁

  • metadata completeness / anchor coverage / bbox coverage
  • content-type aware quality gate
  • chunk_quality_report.mdweek8_ready_gate.json

进入课时 5

实验|把 Week3 文档资产升级成 Week8-ready 文档资产

实验目标是跑出 Week7 最小闭环:

  • 读取 Week3 raw document asset
  • 运行 Docling-first parse
  • 生成 normalized sections
  • 生成 section-aware chunks
  • 为每个 chunk 生成 evidence anchor
  • 输出 quality report 与 Week8 ready gate

进入实验

作业|提交文档资产 v1 与质检报告

作业要求你把 Week7 收口成可交接交付物:

  • Week7 execution blueprint
  • schema / contract 校验结果
  • sections / chunks / anchors 样例
  • chunk_quality_report.md
  • week8_ready_gate.json
  • 一份 bad case 复盘与修复建议

进入作业

Week3 → Week7 → Week8 主线图

flowchart LR
    W3["Week03<br/>raw document ingest"] --> RAW["raw_doc_asset<br/>s3://omni-raw-documents"]
    RAW --> PARSE["Week7 parse<br/>Docling-first"]
    PARSE --> SECTION["knowledge_section<br/>layout + hierarchy"]
    SECTION --> CHUNK["document_chunk<br/>section-aware"]
    CHUNK --> ANCHOR["evidence_anchor<br/>page / bbox / source"]
    ANCHOR --> GATE["Week8 ready gate"]
    GATE --> W8["Week08<br/>index / retrieval / RAG"]

本周做 / 不做边界

分类 本周处理方式
必做 parse、normalize sections、structure-aware chunking、evidence anchor、quality report、Week8 ready gate
可选 Unstructured fallback、OCR flag、visual placeholder、ASR/video schema placeholder
明确不做 embedding、pgvector、hybrid retrieval、reranker、RAG API、tool calling、full eval harness
默认路径 Mac + Docker Compose + devbox CLI;Dagster 只是 thin wrapper
数据落点 PostgreSQL + MinIO parsed artifacts;Iceberg optional,不阻塞本周

本周交付物

  • contracts/data/knowledge_section.schema.json
  • contracts/data/document_chunk.schema.json
  • contracts/data/evidence_anchor.schema.json
  • contracts/data/parse_run.schema.json
  • contracts/data/chunk_quality_sample.schema.json
  • pipelines/parse_normalize/run_parse.py
  • artifacts/week07/sections.json
  • artifacts/week07/chunks.json
  • artifacts/week07/evidence_anchors.json
  • reports/week07/chunk_quality_report.md
  • reports/week07/week8_ready_gate.json
  • runbooks/week07-unstructured-data.md
  • docs/blueprints/week07/week07-execution-blueprint.md

关键判断

  • Week7 的核心不是“读出更多文本”,而是让文本、表格和图片占位带着结构、来源、策略版本和质量状态进入 Week8。
  • Evidence anchor 是 citation 的事实来源,LLM 只能消费它,不能发明它。
  • 质量门禁必须按文档类型判断:PDF、HTML、Markdown、DOCX 的 page / bbox 规则不同。
  • 本周先保证 Student Core 可跑,再讨论 OCR、ASR、video、VLM caption 等 Instructor Scale 能力。