Skip to content

概览

Cartex 是一个 Python 管道,用于将辅助表、通用备注、图例图示和尺寸卡片中的数据富化到从建筑 PDF 文件中提取的施工清单行。

问题背景

建筑工程量清单文件——窗户清单、门清单、幕墙清单——包含一张主要的条目表,以及辅助参考表、通用备注、图例图示和尺寸详图。人工估算员需要读取主清单行、按编码交叉参考辅助表、应用通用备注中的规则、将样式代码与图例匹配,并从详图卡中提取尺寸。这一过程费时、易错且效率低下。

Cartex 自动化了交叉参考步骤。给定结构化提取数据和用户定义的输出模式,它为每个清单条目生成一行富化数据,从最佳可用来源填充所有目标列。

Cartex 的定位

Cartex 是两阶段管道中的富化层。Cato-v2 负责提取——通过 Gemini 视觉 AI 将 PDF 页面转换为结构化的 ExtractionResult 对象。Cartex 负责富化——接收提取结果并填充用户定义的工程量清单模板。

下图展示了端到端的数据流。

flowchart LR
    PDF["PDF 页面"]
    EXT["提取器<br/>(Cato-v2)"]
    ER["ExtractionResult"]
    ENR["富化器<br/>(Cartex)"]
    OUT["list[EnrichedRow]"]

    PDF --> EXT --> ER --> ENR --> OUT

核心设计决策

专业路由优于单体提示词。 Cartex 不将所有提取数据发送给单个 Gemini 提示词,而是根据提取内容中存在的证据,将任务路由至专注的专业提示词。每个专业策略处理一种富化方式(辅助表查找、文本规则应用、图例匹配等),并发运行。最终由确定性合并步骤汇总输出。

模式驱动输出。 用户提供一个定义目标列的 UserTableSchema。每个专业策略生成符合该模式的行数据。合并步骤确保所有输出行均包含模式中的每一列,即使为空也不例外。

行标识保留。 每条主清单行通过其主键列派生出一个 __row_id__。专业策略必须将该 ID 原样回传至输出的 row_id 字段。若某行没有任何专业策略产生输出,则以空 EnrichedRow(置信度为 0.0)进行恢复——管道永远不会静默丢弃行。