小規模なRevitの作業をAIで手軽に自動化 –『PromptToRevit』試作版の検証と課題

はじめに

AutodeskのRevit®は建築分野で広く利用されているBIMツールですが、日常的な業務の中で、小規模ながら手作業では煩雑に感じる作業があります。

たとえば以下のような作業です。

  • 一時的に特定の要素を抽出しリスト化する作業
  • 複数のパラメータを簡単に集計したい場合
  • 機能を試験的に試したいが、手軽な方法がないケース

このような作業は、小規模で頻度が低かったり、要件を確定しづらかったりするため、専用ツールを作成しても効果的でないことがあります。一方で、手作業で毎回処理するのも効率的ではありません。この課題への解決策として、今回新しいツールの試作を行いました。


試作したツール「PromptToRevit」について

今回試作した「PromptToRevit」は、ユーザーが自然言語(例えば「全ての窓の面積をリスト化」「壁の体積を確認」など)で入力した指示をAIが解析し、Revit®で操作可能なプログラミング言語であるC#コードを生成、その場ですぐに実行できるプロトタイプです。

このツールには以下のような目的があります。

  • Dynamoや専用アドインにするほどではない小規模でスポット的な作業を、手軽に実行可能にすること。
  • 頻繁に利用する指示は、生成したコードをそのままアドイン開発にも活用できるようにすること。
  • コード生成から実行までを簡単に行えるため、機能の試験やプロトタイピングに役立つこと。
  • 自然言語による簡単な指示で、Revit®に不慣れなユーザーでもBIM情報を手軽に抽出・集計できるようにし、情報活用を促進すること。

試作ツールの操作方法について

今回の試作ツールはユーザーが入力した指示文をAIが解析し、Revit®の操作に必要なC#コードを自動的に生成する仕組みです。

ここで使われているAIは、指示文を意味的に理解し、対応する具体的な操作コードを提示します。その後、生成されたコードをRevit®上で実行することで、指示した操作が即座に反映されるようになっています。

具体的な動作手順は以下の通りです。

操作手順

① ユーザーが指示文を入力する

ユーザーは自然な文章で、以下のような指示を入力します。

  • 「各階の部屋の面積を集計してください。」
  • 「壁と床だけ表示し、半透明にしてください。」

② モデルの選択(使用するAIモデル)

指示文を解析するために、使用するAIのモデルを選択します。

今回の検証では、OpenAI社の提供するAPIを通じて GPT-4.1 というモデルを利用しています。

GPT-4.1はOpenAIが開発した大規模言語モデルで、高度な自然言語処理能力を備えており、文章を理解してそれに適したコードを生成できます。

OpenAI APIの詳細は、OpenAI API 公式ページ をご参照ください。

③ AIが指示文を解析し、コードを生成する

入力された指示文をAIが解釈し、以下の処理を行います。

  • 指示文から「何をしたいのか(意図)」を解析します。
  • Revit APIを利用して処理可能なC#コードを生成します。

④ 生成されたコードをRevit®内で実行する

生成されたC#コードをRevit®の中で実行し、結果を確認します。

  • 集計指示の場合は結果を一覧表示します。
  • 要素の変更や作成の場合は、モデル内に即座に反映します。

⑤ 結果を確認し、必要に応じて修正

結果が意図した通りでなければ、指示文を修正して再実行できます。

また、よく使う処理であれば生成されたコードをそのままアドイン開発にも再利用できます。


試作版の検証結果と課題

検証では「集計」「変更」「作成」の3種類の操作について具体的な指示文を用い、動作確認を行いました。

集計操作の結果

以下の操作では概ね期待通りの結果が得られました。

  • 「この建物の部材の数を集計してください。」 → 壁、ドア、窓、床などの部材数を正しく集計しました。カテゴリは主要なものを自動で判断したようです。
  • 「各階の床の面積の値と合計値を教えてください。」 → 各階の床面積と合計値を適切に集計できました。
  • 「各階の部屋ごとの面積を集計してください。」 → 階ごと、部屋名ごとの面積を正確に集計しました。

変更操作の結果

変更操作では概ね成功しましたが、より効率的な設定方法について改善の余地がありました。

  • 「壁と床のみ表示してください。どちらも半透明にしてください。」 → 壁と床を要素単位で半透明化し表示しましたが、本来はカテゴリ単位での一括設定が望ましいことが分かりました。
  • 「壁種ごとに異なる色に変更してください。」 → 壁種を壁タイプと解釈し色分けしました。ただし、本来はフィルタ機能を使った設定が効率的でした。
  • 「高さ3000mmの壁の高さを1000mm延長してください。」 → 壁の抽出、延長ともに成功しました。単位変換(フィートとミリメートル)も適切に処理されました。(複雑なモデルの場合、変更に伴う隣接部材のエラーが発生するため、この検証は簡易的なモデルで行いました。)

作成操作の結果

作成操作については部分的に成功しましたが、複雑な指示文で課題が見つかりました。

  • 「任意の矩形でRC壁を4枚作成してください。」 → RC壁を「構造マテリアル名にRCやコンクリートが含まれる壁」と解釈し、4枚作成できました。
  • 「既に配置されている壁4枚に対して1枚の壁にはドアと窓、残りの壁には窓を2枚設置してください。」 → 壁は認識しましたが、「残りの壁」という指示をうまく解釈できず、全ての壁に窓を2枚設置する誤りがありました。補足ですが「既に配置されている」という言葉を含めない場合はまた新たに壁を作成しようとする問題も発生していました。そのため先頭に「既に配置されている」とつけています。
  • 「XY方向の通芯を5000mm間隔で10本ずつ作成してください。通芯の名前はXとYを先頭につけて番号を振ってください。」 → 通芯の作成は成功しましたが、X軸とY軸の名称が逆になることもありました。
  • 「通芯の交点に柱を配置してください。」 → 通芯の交点計算と柱配置に成功しました。
  • 「既に配置されている柱の間に梁を配置してください。」 → 柱の高さ取得時に存在しないパラメータを指定し、梁の位置計算にも失敗しました。その結果、梁を配置することはできませんでした。

検証から見えた課題

検証を通して以下の課題が明確になりました。

  • 複雑な指示文におけるAIの解釈精度が不十分で、細かなニュアンスや曖昧な表現を正確に処理できないケースがありました。
  • コード生成時に、Revit®の標準的で効率的な設定方法を考慮しきれておらず、非効率的なコードが生成されるケースがありました。

今後の改善に向けて

今回明らかになった課題を踏まえ、以下の改善を進めていきます。

  • AIモデルの調整を進め、曖昧な表現を含む指示の解釈精度を高める。
  • Revit®で推奨される標準的な操作手順や効率的な設定方法を考慮したコード生成の仕組みを整える。
  • より幅広い指示文に対応できるよう、生成されるコードの性能や安定性を向上させる。

本ツールは現状プロトタイプ段階であり、引き続き検証を重ねていく予定です。


おわりに

今回試作した「PromptToRevit」に関し、実務における活用方法やご要望、ご意見などがございましたら、ぜひお聞かせください。引き続き実務で役立つ技術開発を続けてまいります。

参考