乐于分享
好东西不私藏

让大模型帮你写Revit插件,能走多远?

让大模型帮你写Revit插件,能走多远?

大模型写Revit插件的发展前景

让大模型帮你写Revit插件,能走多远?


我用AI写Revit插件代码已经有一段时间了。

结论先说:能用,但得会用。

大模型写普通C#没问题,写Revit插件——它会卡在几个地方,卡得让你怀疑人生。搞清楚它能干什么、不能干什么,你才能真正把它变成生产力,而不是调试搭档。

今天聊一个真实的协作流程:从需求到上线,AI参与的每一步是什么样的。


一、为什么Revit插件对AI来说是个麻烦场景

先说清楚这个背景,后面的坑才能看懂。

Revit API 的问题在于:

1. 版本碎片严重

Revit 2019、2020、2023、2024的API有差异,某些接口改了签名、某些方法废弃了新方法替代。AI的训练数据没有明确标注版本,它给你的代码经常是”混搭”——某个方法是2020的,某个是2024的,放在一起编译直接报错。

2. 冷僻接口训练数据少

FilteredElementCollectorTransactionBuiltInParameter 这些高频接口,AI写得还行。但一旦涉及稍微偏门的——比如 ExtensibleStorageDirectShapeFamilyManager——AI开始瞎猜,代码看起来合理,但方法名不存在,或者参数类型对不上。

3. 上下文依赖重

Revit插件的很多操作需要”当前文档状态”,比如活动视图、当前选择集、文档单位设置。这些上下文AI无法感知,它给你的代码经常缺少必要的判空和状态检查,一跑就崩。

知道了这些,你就知道和AI协作的时候,哪些地方要靠它、哪些地方要自己把关。


二、协作流程实测:导出房间数据到Excel

拿一个真实需求举例:把Revit模型里所有房间的编号、名称、面积、楼层导出到Excel

这是最典型的数据提取类插件,逻辑不复杂,但刚好能看出AI的能力边界在哪。

Step 1:需求→让AI生成框架

第一步,把需求描述清楚,让AI给个框架。

提示词这样写(关键):

用Revit 2020 API(.NET Framework 4.8)写一个IExternalCommand,获取项目文档中所有房间的名称、编号、面积(平方米)和所在楼层,返回一个List。不需要Excel导出,只需要数据提取部分,代码要处理房间面积为0的情况(未放置的房间)。

注意几个细节:

  • 明确指定Revit版本
  • 只让它写一部分,不要一次性要求太多
  • 提前说清楚边界条件

AI给出的数据提取代码大概是这样:

var rooms = new FilteredElementCollector(doc)
    .OfCategory(BuiltInCategory.OST_Rooms)
    .WhereElementIsNotElementType()
    .Cast<SpatialElement>()
    .Where(r => r.Area > 0)  // 过滤掉未放置的房间
    .ToList();

var result = new List<RoomData>();
foreach (var room in rooms)
{
    result.Add(new RoomData
    {
        Name     = room.get_Parameter(BuiltInParameter.ROOM_NAME)?.AsString() ?? "",
        Number   = room.get_Parameter(BuiltInParameter.ROOM_NUMBER)?.AsString() ?? "",
        Area     = UnitUtils.ConvertFromInternalUnits(room.Area, UnitTypeId.SquareMeters),
        Level    = (doc.GetElement(room.LevelId) as Level)?.Name ?? "未知楼层"
    });
}

这段代码基本可用,但有一个坑:**UnitTypeId.SquareMeters 是Revit 2021以后的写法**,2020里要用 DisplayUnitType.DUT_SQUARE_METERS。AI混了版本,这里得手动改。

经验: AI给的单位转换代码大概率需要你验版本,这是最常见的坑之一。


Step 2:人工审查,重点看这三个地方

AI生成的代码,不要直接拿去跑。过一遍,重点检查:

① 单位转换所有涉及面积、长度、体积的数值,Revit内部用的是英制单位(英尺、平方英尺),导出前必须换算。AI的换算代码要确认版本。

② 空引用get_Parameter() 返回的 Parameter 对象可能为null,AsString() 之前要判空。AI生成的代码有时候有这个判断,有时候没有——不要赌,自己加上。

③ 未放置房间Area > 0 这个过滤条件AI这次给了,但不是每次都给。未放置的房间没有有效面积,如果不过滤,导出的Excel里会有一堆0数据甚至崩溃。


Step 3:补充细节,这部分AI帮不上忙

数据提取写完了,接下来要把数据写入Excel。

这里分开处理:不要让AI同时写数据提取+Excel导出,容易生成一坨耦合很深的代码,出了问题不好排查。

Excel写入用 EPPlus 或者 ClosedXML 这类库都行,告诉AI你用哪个库,让它单独写Excel写入方法:

// 让AI写这部分,与Revit无关,纯C#逻辑,AI写得很可靠
publicvoidExportToExcel(List<RoomData> data, string filePath)
{
using (var package = new ExcelPackage())
    {
var sheet = package.Workbook.Worksheets.Add("房间数据");

// 写表头
        sheet.Cells[11].Value = "房间名称";
        sheet.Cells[12].Value = "房间编号";
        sheet.Cells[13].Value = "面积(m²)";
        sheet.Cells[14].Value = "楼层";

// 写数据
for (int i = 0; i < data.Count; i++)
        {
            sheet.Cells[i + 21].Value = data[i].Name;
            sheet.Cells[i + 22].Value = data[i].Number;
            sheet.Cells[i + 23].Value = Math.Round(data[i].Area, 2);
            sheet.Cells[i + 24].Value = data[i].Level;
        }

        package.SaveAs(new FileInfo(filePath));
    }
}

这部分AI写得很稳。Excel操作、文件路径处理、集合遍历——纯C#逻辑,跟Revit没关系,AI的表现和写普通C#一样可靠

规律: 越靠近Revit API的代码,AI越容易出错;越是通用C#逻辑,AI越可靠。拆开来写,各自发挥优势。


Step 4:调试阶段,AI的另一个用途

跑起来之后大概率会有报错。这时候AI的用法变了——把报错信息直接粘给它,问为什么

比如:

Autodesk.Revit.Exceptions.InvalidOperationException: The document has no active view.

这类报错AI基本都能解释清楚,而且会给出修复建议。比这个报错,是命令在没有打开视图的状态下执行了,需要在执行前检查 uiDoc.ActiveView 是否为null。

调试阶段让AI当”报错解释器”,效率很高。


三、总结:什么时候用AI、什么时候别信它

用一张表把经验整理出来:

场景
AI可靠度
建议
通用C#逻辑(集合、字符串、IO)
★★★★★
直接用
高频Revit接口(Collector、Transaction)
★★★★☆
用,但验版本
单位换算代码
★★★☆☆
必须手动核对版本
冷僻Revit接口(ExtensibleStorage等)
★★☆☆☆
参考思路,自己查文档
多步骤复杂逻辑(分步写比整体写好)
★★★☆☆
拆小块,分开问
报错解释
★★★★★
非常好用
UI/WPF设计
★★★★☆
可靠,但样式要调整

四、一个实用的提示词模板

最后给一个提示词模板,经过验证,用这个框架问出来的代码质量比随便问好很多:

[场景]:Revit 2020插件开发,.NET Framework 4.8,C#
[需求]:(用一句话描述你要做什么)
[约束]:
  - 只写(某个具体功能),不包含其他部分
  - 处理(某个边界情况)
  - 不要写UI代码
[参考]:(可选,贴一段你现有的相关代码)

越具体,结果越可用。


写在最后

大模型帮你写Revit插件,能走多远?

在数据提取这类场景里,能走完大部分路程——框架、查询逻辑、Excel写入,加起来能节省60%~70%的时间。剩下那30%,是单位换算、版本兼容、边界处理、和真机调试,这部分你得自己搞定。

它不是替代你的工具,是加速你的工具。


优易科技 专注BIM软件研发与数字化建造解决方案

优易BIM助手,懂技术,更懂落地。

欢迎转发