SuperAPI AI 工具集

drawing-analyzer

数据与分析

查看项目

更新于 10-16 02:06

技能介绍

用途

Drawing Analyzer 用于处理建筑图纸 PDF(建筑、结构、MEP、市政等),使 Claude 能够准确回答关于图纸的问题并执行工程量统计(面积、数量、长度等)。建筑图纸对 AI 来说是最糟糕的输入之一:大型 PDF 充满符号和交叉引用,单虚线(冷水)和双虚线(热水)看起来几乎一样但含义完全不同。直接上传 10 MB 的图纸集会导致失败、重复计数,并且每个问题消耗 60-70k token。

该技能用一个原则解决这个问题:脚本做廉价的机械工作,模型做理解工作。每套图纸运行一次索引流程,把巨大的 PDF 转成小型 markdown 索引加上每张图纸的文本和图像。之后每个问题读取这些小型索引,而不是完整 PDF。

注意:不要编写模式匹配脚本来分类图纸(例如“如果标题包含 electrical 则归为电气”)。图纸格式差异太大。分类、交叉引用和符号阅读必须由模型阅读每张图纸来完成。脚本只负责拆分、渲染、提取文本和提取矢量。

主要能力

  • 将合并的 PDF 按图纸拆分,渲染为图像,并提取文本,生成 manifest.json。
  • 由模型逐张阅读图纸文本(必要时查看图像),完成图纸分类(布局图/剖面图/详图/明细表/总说明/图例)和专业归属。
  • 由模型构建交叉引用矩阵,记录每张图纸指向的其他图纸及原因(详图标注、剖面标记、明细表代码如 TD7、F6、“见图纸 X”等)。
  • 由模型构建符号图例,将每个符号/线型/缩写映射到含义,从而区分冷水管和热水管等。
  • 由模型编写主索引,包含每张图纸的一行摘要、整体包摘要和查询规则。
  • 支持工程量统计,优先使用矢量方法提取多边形,并要求进行独立的合理性检查。

使用方式

首次设置

pip install -r "$SKILL_DIR/scripts/requirements.txt"   # PyMuPDF

模式 A — 索引(每套图纸运行一次)

目标:把 merged.pdf 转成 analysis/ 文件夹中的小型可查询产物。

步骤 1 — 拆分、渲染、提取(脚本):

python3 "$SKILL_DIR/scripts/split_pdf.py" <merged.pdf> <project_dir>/analysis

每张图纸生成:sheets/sheet_NNN.pdf、images/sheet_NNN.png(以 Opus 可读取的最大分辨率渲染)、text/sheet_NNN.txt,以及 manifest.json。

步骤 2 — 分类每张图纸(由模型完成,不是脚本):先读取 text/sheet_NNN.txt(成本低),仅在文本不足时才打开 images/sheet_NNN.png。使用 templates/sheet-classification.md 模板写入 analysis/sheet-classification.md。使用 references/drawing-types.md 判断类型(布局图/剖面图/详图/明细表/总说明/图例)和专业。记录图纸编号、标题、比例以及该图纸包含的数据。

步骤 3 — 构建交叉引用矩阵(由模型完成):查找详图标注、剖面标记、明细表代码(如 TD7、F6)和“见图纸 X”注释。按图纸记录它指向哪些其他图纸及原因。使用模板写入 analysis/cross-references.md。

步骤 4 — 构建符号图例(由模型完成):阅读图例/总说明图纸以及图纸内的图例。写入 analysis/symbol-legend.md,将每个符号/线型/缩写映射到含义。这是后续区分冷水管和热水管的关键。

步骤 5 — 编写主索引(由模型完成):使用模板写入 analysis/drawings.md,包含每张图纸的一行摘要、整体包摘要和查询规则。这是每次查询开始时需要读取的文件。

模式 B — 查询(索引后的每个问题)

  1. 读取 analysis/drawings.md(仅在相关时读取 cross-references.md / symbol-legend.md)。不要读取原始 merged.pdf。
  2. 从索引中确定包含答案的具体图纸。
  3. 读取该图纸的 text/sheet_NNN.txt,必要时读取 images/sheet_NNN.png,然后沿交叉引用查找其他图纸(例如平面图上的基础标记 -> 其明细表 -> 其剖面图)。
  4. 对于工程量统计(面积、数量、长度):遵循 references/takeoff-methodology.md。优先使用矢量方法:
python3 "$SKILL_DIR/scripts/extract_vectors.py" <project_dir>/analysis/sheets/sheet_NNN.pdf --scale <units_per_point>

始终运行第二个独立的合理性检查(例如整体建筑尺寸)并进行比较。

回答时给出:数字、置信度(高/中/低)及原因、使用的源图纸。永远不要把精确计数当作确定无疑。明确说明不确定性。

适用场景

  • 需要从建筑图纸 PDF 中提取信息并回答问题的场景。
  • 需要执行工程量统计(面积、数量、长度)的场景。
  • 涉及多专业图纸(建筑、结构、MEP、市政)且需要交叉引用的场景。
  • 需要区分相似符号/线型(如冷水管与热水管)的场景。

限制

  • 分类、交叉引用和符号阅读必须由模型阅读每张图纸完成,不能依赖模式匹配脚本。
  • 图纸格式差异很大,脚本只负责拆分、渲染、提取文本和提取矢量。
  • 工程量统计结果必须标注置信度并明确说明不确定性,不能给出确定无疑的精确计数。
  • 需要先安装 PyMuPDF 依赖。
  • 索引流程每套图纸需要运行一次,之后查询才高效。

文件说明

  • scripts/split_pdf.py — 拆分 + 渲染 + 文本提取(机械)
  • scripts/extract_vectors.py — 用于工程量统计的矢量/多边形提取(机械)
  • references/drawing-types.md — 如何分类和处理每种图纸类型
  • references/takeoff-methodology.md — 带交叉检查的准确计数/面积方法
  • templates/ — 三个索引的 markdown 模板

输出示例

仓库地坪面积 ≈ 13,250 m²(置信度:高)。方法:从 S-201 的地坪轮廓提取多边形,并与 A-101 的整体建筑尺寸交叉核对(13,600 m² 总面积,含外部地坪)。源图纸:S-201、A-101。