CAD Generation · Agent Research Primer

Research Background · 2026

CAD Generation

随着 Coding Agent 研究的快速发展,现有工作日益拥挤,常见基准上的性能也趋于饱和。作为研究者,我们需要寻找更具挑战性和区分度的任务场景。CAD 任务同时考察 Agent 的多模态理解、程序生成、三维空间推理和长程规划等能力。更重要的是,它可以直接服务于实际的工程设计与制造流程。因此,CAD 任务为推进 Coding Agent 的综合能力提供了一个具有实际价值的任务场景。

01
Task Formulations & Benchmark

常见的任务形式和 Benchmark

1.1

基于工程图的 CAD 生成任务

1.1.1

任务形式

输入为工程图,Agent 通过程序生成满足工程图约束的三维 CAD 模型。下图展示了目前质量最高的 CAD Benchmark——CADGenBench 的输入、程序与输出示例。

CADGenBench Case 103 输入工程图
输入|工程图。 多视图、截面、尺寸和工程标注共同定义目标零件。
from build123d import (
    BuildPart, BuildSketch, Plane,
    RectangleRounded, export_step,
    extrude,
)

T = 1.8
TRAY_W = 154.2
TRAY_L = 230.0
CORNER_R = 20.0

def horizontal_rounded_plate(
    width, length, radius, z, thickness
):
    with BuildPart() as p:
        with BuildSketch(Plane.XY.offset(z)):
            RectangleRounded(
                width=width,
                height=length,
                radius=radius,
            )
        extrude(amount=thickness)
    return p.part

part = horizontal_rounded_plate(
    TRAY_W, TRAY_L, CORNER_R, 0.0, T
)
# beads, walls, feet and mounting holes ...
export_step(part, "/workspace/output.step")
程序|build123d。 Agent 将图纸约束转化为参数、特征与布尔操作。
CADGenBench Case 103 自动旋转的三维 CAD 模型↻ Auto rotation
输出|3D CAD。 程序经几何内核执行后生成精确实体;模型会自动旋转,也可点击放大。
1.1.2

Evaluation

Shape Similarity. Surface F1 从候选模型与参考模型的表面采样点,并将距离足够近且法向一致的点记为匹配。其计算方式为:

P = Nmatchedcand / Nsampledcand,   R = Nmatchedref / Nsampledref,   Surface F1 = 2PR / (P + R)

Volume IoU 衡量两个实体所占体积的重合程度,其计算方式为:

Volume IoU = Vol(McandMref) / Vol(McandMref)

Interface Match. 衡量候选模型能否与参考模型适配同一夹具。

Interface Match 中夹具与孔槽组成的 mating group 动态示意图
Interface Match 动态示意。 两个定位销和一个槽键共同组成一个 mating group;候选零件需要适配同一夹具。

Topology Match. 比较候选模型与参考模型的三个 Betti 数:b0 表示连通实体数,b1 表示独立通孔数,b2 表示封闭空腔数。

CAD Score. 最终得分由三项指标加权平均得到。

CAD Score = 0.4 · Sshape + 0.4 · Sinterface + 0.2 · Stopology
1.1.3

现有的前沿模型的性能

下面给出 CADGenBench 的评测结果,展示现有前沿模型在统一的 Coding Agent Harness 下完成 CADGenBench 生成任务的性能。

模型ShapeInterfaceTopologyCAD Score
GPT-5.6 Sol ↗0.3120.3860.6310.405
Claude Opus 5 ↗0.2610.3160.5990.351
Qwen3.8-Max ↗0.2270.3380.5880.344

由表中结果可以看出,即使是当前最前沿的模型,在基于工程图的 CAD 生成任务上,性能仍然有限。

下面选取了一些有趣的 Case,或许可以从中观察到一些现象。由于时间有限,这里尚未进行具体分析。这些 Case 分别对应所有模型均表现良好、模型间差异较大、所有模型均表现不佳,以及较弱模型反而表现更好的情况。

Case 109|三个模型均能较好恢复

同一任务上的分数接近,说明目标结构对当前方法相对友好。

CADGenBench Case 109 输入工程图
Input drawing
GPT-5.6 Sol 在 Case 109 上的生成结果
GPT-5.6 Sol0.881
Claude Opus 5 在 Case 109 上的生成结果
Claude Opus 50.873
Qwen3.8-Max 在 Case 109 上的生成结果
Qwen3.8-Max0.866

Case 101|三个模型的表现差异较大

GPT-5.6 Sol 得分 0.769,Claude Opus 5 与 Qwen3.8-Max 均约为 0.32。

CADGenBench Case 101 输入工程图
Input drawing
GPT-5.6 Sol 在 Case 101 上的生成结果
GPT-5.6 Sol0.769
Claude Opus 5 在 Case 101 上的生成结果
Claude Opus 50.320
Qwen3.8-Max 在 Case 101 上的生成结果
Qwen3.8-Max0.322

Case 120|三个模型均表现不佳

CADGenBench Case 120 输入工程图
Input drawing
GPT-5.6 Sol 在 Case 120 上的生成结果
GPT-5.6 Sol0.181
Claude Opus 5 在 Case 120 上的生成结果
Claude Opus 50.144
Qwen3.8-Max 在 Case 120 上的生成结果
Qwen3.8-Max0.078

Case 134|Qwen3.8-Max 明显领先

CADGenBench Case 134 输入工程图
Input drawing
GPT-5.6 Sol 在 Case 134 上的生成结果
GPT-5.6 Sol0.227
Claude Opus 5 在 Case 134 上的生成结果
Claude Opus 50.243
Qwen3.8-Max 在 Case 134 上的生成结果
Qwen3.8-Max0.403
1.2

基于文本的 CAD 编辑任务

1.2.1

任务形式

输入为已有 CAD 模型和文本编辑指令,Agent 需要在完成指定修改的同时保持其余结构不变,并导出编辑后的 STEP。下图以 CADGenBench Case 203 为例:输入模型包含 7 个叶轮叶片,文本指令要求将叶片数减少到 5 个。

CADGenBench Case 203 编辑前的七叶片叶轮模型
Edit instruction
“Reduce the number of impeller blades from 7 to 5.”
输入|STEP + 文本。 输入一个已有的 STEP 和编辑指令。
GPT-5.5 在 cadgenbench-build123d Case 203 轨迹中生成的五叶片编辑结果↻ Auto rotation
输出|编辑后的 3D CAD。 该轨迹最终导出通过有效性检查的五叶片 STEP。
1.2.2

Edit Pipeline

Agent 对 CAD 的编辑同样可以通过代码实现,CADGenBench Leaderboard 中表现较好的 Harness 也普遍使用这种形式。下面以 Case 203 的真实运行轨迹为例,展示 Pi Agent 一类 Coding Agent 如何进行这种编辑任务。

01

导入并测量 STEP

载入输入模型,并建立后续编辑所需的几何基线。

from build123d import *
from math import atan2, degrees

part = import_step("input.step")

print("volume:", part.volume)
print("faces:", len(part.faces()))
print("bbox:", part.bounding_box())
02

分析 BREP,定位重复叶片

按面中心的角度整理拓扑信息,区分重复叶片与需要保留的轮盘和中心孔。

face_info = []
for index, face in enumerate(part.faces()):
    center = face.center()
    angle = (degrees(atan2(center.Y, center.X)) + 360) % 360
    face_info.append(
        (index, face.geom_type, face.area, center, angle)
    )

for item in sorted(face_info, key=lambda row: row[-1]):
    print(item)
03

尝试局部删除叶片

先直接删除目标叶片对应的 BREP 面组,以尽量保留原始模型。

from OCP.BRepAlgoAPI import BRepAlgoAPI_Defeaturing

operation = BRepAlgoAPI_Defeaturing()
operation.SetShape(part.wrapped)

for face_index in target_blade_face_ids:
    operation.AddFaceToRemove(
        part.faces()[face_index].wrapped
    )

operation.Build()
04

重建五叶片候选模型

保留测得的外轮廓与中心孔尺寸,并用旋转复制生成五个 lofted blade。

# 简化后的代码结构;辅助函数细节省略
BLADE_COUNT = 5
OUTER_RADIUS = 180.0
BORE_RADIUS = 15.0

shroud = build_shroud(
    radius=OUTER_RADIUS,
    bore_radius=BORE_RADIUS,
)

# 叶片截面与 loft 细节在此省略
blade = build_lofted_blade(...)

edited = shroud
for index in range(BLADE_COUNT):
    angle = index * 360.0 / BLADE_COUNT
    edited += blade.rotate(Axis.Z, angle)
05

验证并导出结果

只有通过几何有效性检查的候选模型才会被写入最终 STEP。

if not edited.is_valid:
    raise ValueError("invalid edited solid")

export_step(edited, "output.step")

从上述 Case 可以看出,Agent 能够通过代码导入 STEP,并尝试直接修改其 BREP。然而,该操作因超时而失败,Agent 随后转而重新编写完整的 build123d 建模程序。相较于局部编辑,这种重建策略更容易改变原本无需修改的几何结构,从而引入新的错误。

1.2.3

Evaluation

Edit Shape. 因为在编辑任务中,输入 CAD 和 GT 在形状上已经极为相似,为了避免 Agent 不做修改也获得较高的 Shape Similarity 得分,评测时首先计算原始模型的得分,再评价候选模型相对该 baseline 的提升。

bshape = Sshape(M0, Mref),   Sedit = max(0, (Sshape(Mcand, Mref) − bshape) / (1 − bshape))

Interface Match. 衡量编辑后的模型能否与参考模型适配同一夹具,用于检查修改是否破坏孔、槽和定位结构等工程接口。

Topology Match. 比较编辑结果与参考模型的三个 Betti 数,检查连通实体、独立通孔和封闭空腔的数量是否一致。

Editing CAD Score. 最终得分由归一化后的 Edit Shape、Interface Match 和 Topology Match 加权平均得到。

Editing CAD Score = 0.6 · Sedit + 0.3 · Sinterface + 0.1 · Stopology
1.2.4

现有的前沿模型的性能

下面给出 CADGenBench 的评测结果,展示现有前沿模型在统一的 Coding Agent Harness 下完成 32 个 CAD 编辑任务的性能。

模型Edit ShapeInterfaceTopologyCAD Score
Claude Opus 5 ↗0.4970.8390.8580.635
GPT-5.6 Sol ↗0.4650.8670.9020.629
Qwen3.8-Max ↗0.4150.8110.8650.578

由表中结果可以看出,最优模型的平均 Editing CAD Score 为 0.635。如何准确完成局部修改并避免对其余结构造成影响,仍然是 CAD Agent 面临的主要挑战。

下面给出两个三种模型均满足 CAD Score 大于 0、但 Edit Score 等于 0 的 Case。候选模型虽然有效,并从 Interface Match 和 Topology Match 中获得了分数,但在形状维度上没有相对 no-op baseline 取得有效改进。

Case 201|将中心孔 +X 侧四个非圆形凹槽的侧壁分别向内移动 6 mm

CADGenBench Case 201 编辑任务输入模型
Input STEP
GPT-5.6 Sol 在 Case 201 上的编辑结果
GPT-5.6 SolCAD 0.269Edit 0.000
Claude Opus 5 在 Case 201 上的编辑结果
Claude Opus 5CAD 0.348Edit 0.000
Qwen3.8-Max 在 Case 201 上的编辑结果
Qwen3.8-MaxCAD 0.220Edit 0.000

Case 246|将六边形凸台的高度减少 1 mm

CADGenBench Case 246 编辑任务输入模型
Input STEP
GPT-5.6 Sol 在 Case 246 上的编辑结果
GPT-5.6 SolCAD 0.400Edit 0.000
Claude Opus 5 在 Case 246 上的编辑结果
Claude Opus 5CAD 0.400Edit 0.000
Qwen3.8-Max 在 Case 246 上的编辑结果
Qwen3.8-MaxCAD 0.400Edit 0.000
1.3

基于图像 / 视频的 CAD 编辑任务

1.3.1

多模态编辑请求

专业 CAD 工程师通常不会只在文本框中描述修改。他们会直接与模型交互,指向具体的面和边,绘制手写标注,并通过语音说明希望得到的变化。neuralCAD-Edit 是首个记录这些自然交流方式的 CAD 编辑基准。研究者邀请十位知情同意的专业设计师,在 Autodesk Fusion 中提出并完成三维 CAD 编辑请求。

请求模态 编辑请求 Ground Truth
(请求者)
人类基线编辑
(另一位专家)
视频(记录了用户的绘制过程和语音)+静态绘图(用户画的线不会消失,会持久呈现在页面中)
视频(记录了用户的绘制过程和语音)+临时绘图(用户画的线会在一段时间后消失)
视频(记录了用户的绘制过程和语音)
文本
1.3.2

Evaluation

Chamfer-Dist ↓. 分别从候选模型与 Ground Truth 的表面均匀采样点集 PQ,计算两个方向上的平均最近邻距离并求和。距离越小,说明两个模型的表面越接近。

dCD(P, Q) = 1/|P| ΣpP minqQpq2 + 1/|Q| ΣqQ minpPqp2

Voxel-IoU ↑.

DINO-sim ↑. 对候选模型与 Ground Truth 的等轴测渲染提取 DINOv2 特征,并计算两个特征向量的余弦相似度。得分越高,说明两者在视觉特征上越接近。

sDINO = φ(Icand)Tφ(Igt) / (‖φ(Icand)‖2φ(Igt)‖2)

Human Eval. CAD 专家在查看编辑请求、六个正交视图和一个等轴测视图后,对结果进行评价。Instruction 衡量编辑结果是否遵循请求,Quality 衡量建模质量;两项均采用 1–7 分量表并归一化至 0–1,每个结果由五位专家评价并取中位数。Acceptance 表示 Instruction 与 Quality 均达到 5 分及以上的结果比例。

1.3.3

现有的前沿模型的性能

方法自动指标人工评测
Chamfer-dist ↓Voxel-IoU ↑DINO-sim ↑Validity ↑Instruction ↑Quality ↑Acceptance ↑
GT Human requestor0.740.660.82
Human baseline220.760.931.000.740.660.78
GPT 5.2500.570.660.990.480.390.25
Gemini-3-Pro1100.300.360.580.270.160.10
Claude Sonnet 4.5540.180.250.420.220.100.05

每条请求均由原始请求者和另一位 CAD 专家分别完成,从而同时提供用于自动指标的 Ground Truth 和用于比较编辑能力的人类基线。GPT 5.2、Gemini 3 Pro 和 Claude Sonnet 4.5 在完整请求集上运行,并最多进行十轮检查与修改。下面展示四条请求上的人类与模型结果。

初始模型 Ground Truth
(请求者)
人类基线
(另一位专家)
Claude Sonnet 4.5 Gemini 3 Pro GPT-5.2

模型输出渲染。“初始模型”表示编辑前的状态;每一行对应同一条请求下的人类与 AI 结果。空白单元格表示该模型未为该请求生成有效的 BREP 文件。