← Case Studies

IFCファイルを生成AIで扱うためのグラフデータベース活用

「この建物は何部屋ありますか」に、生成AIが毎回同じ答えを返せるか。BIMのIFCファイルをグラフデータベースに展開し、自然言語からの問い合わせがどこまで成立するかを検証しました。

IFCをグラフに置き換えて、BIMに自然言語で聞けるようにする

IFCファイルは、小規模なものでも膨大な情報量をもつ構造であり、生成AIはすぐにハルシネーションを起こしてしまいます。2階建て・8部屋・机14個の小さなモデルであっても、IFCファイルにすると1.23MB・20,765行のテキストになります。

IFCファイルをグラフデータベース上に展開し、生成AIはグラフデータベースにクエリを発行することで正確な情報を取得、返答できる方法を検討・検証しました。

note / ハスキー犬 / 2024年12月23日[BIM×生成AI] IFCファイルを生成AIで扱うためのグラフデータベース活用の検証と考察IFCファイルをグラフデータベースに展開し、生成AIに自然言語で問い合わせられるかを検証した。その過程と結果をまとめた記事である。記事を読む
  • IFCを解析し、要素と関係をそのままグラフDBに展開
  • 自然言語の質問は、LLMがCypherクエリに変換して実行
  • 取れなかった質問も、原因がデータ側の登録漏れだと切り分け

下記はグラフDB、LLMの連携フローです。

ユーザーLLMPythonアプリNeo4j(グラフDB)ユーザーLLMPythonアプリNeo4j(グラフDB)IFCファイルをアップロードifcopenshellで解析Cypherクエリを生成要素と関係性を登録登録完了ここまでが登録。以降が質問に答えるところ「1階の部屋の数は?」と質問質問を受けてCypherクエリを生成クエリをNeo4jに実行該当ノード・関係性を返却取得データをLLMに渡す「1階には8部屋あります」と回答

各ステップに触れると、そこで何が起きているかが出ます

IFCはifcopenshellで解析してNeo4jに入れ、質問は毎回LLMがCypherクエリに直してからグラフに投げます。各ステップに触れると、そこで実際に何をしているかが出ます。

下記はLargeBuilding.ifc をifcopenshellで解析して抜き出した実データです。質問をクリックするとクエリ結果を元に構造情報を取得・可視化できます。

聞いてみる
LargeBuilding.ifc/ノード 128・関係 127 点は掴めます。凡例で種類を隠せます

元のIFCファイルは、公開サンプルの bim-whale-ifc-samples / LargeBuilding.ifc を使っています。

精度はIFCの作られ方に依存します。グラフに載っていない関係は、どれだけ質問を工夫しても取り出せません。実物件の規模ではノードが21,000件を超えるので、そこでもグラフを経由し続けるべきか、IFCへ直接クエリを投げる形に寄せるべきかは、次の検証テーマとして残っています。

次のケーススタディ1発1時間で暗黙知を知見に。ベテランインタビューAI

you×IT業界

ちょっと相談してみたい方、お気軽にどうぞ。