はじめに

OpenAIの動画生成モデルであるSoraが、ユーザーの簡単な指示に基づいて、本物そっくりの動画を生成することが出来ます。技術の進歩にはとても驚きますが、魅力的だと思わないでしょうか。最近動向としては、OpenAIがGoogleに対抗し、ChatGPT Searchを発表した一方で、GoogleはOpenAIのo1 previewモデルへの更なる対抗として、高度な推論能力を誇るGemini 2.0を発表しました。このように、名立たる企業同士が互いに意識し合うAI戦争が勃発しているようです。この技術競争の中で、生成AIはすでに世界中の産業を再構築しており、構造エンジニアリング業界も例外ではありません。手作業の省力化から単純作業の自動化まで、AIは更なる可能性を秘めています。しかし実際には、生成AIが最先端の構造計算ツールに効果的に適用された例は多くありません。

生成AIを初歩的なレベルでRESP-F3T(汎用構造解析プログラム)に適用する試みを行い、興味深い結果を得ました。本記事では、生成AIを用いたRESP-F3T用の入力ファイル(ftcファイル)の自動生成と検証についてご紹介します。これは小さな一歩にすぎませんが、将来的な可能性を感じさせる取り組みです。

目的:ftcファイル作成における課題への対応

RESP-F3Tでは、入力ファイル(ftcファイル)をプレーンテキスト形式で記述します。コマンドごとに決まった構文があり、それぞれに必要なパラメータを正しく指定しなければなりません。また、たとえば「Section」コマンドで使用する材料は、事前に「Material」コマンドで定義しておく必要があるように、定義の順序にも依存関係があります。構文ミス、パラメータの欠落、定義順序の不整合は、解析の失敗や不正確な結果につながります。

一方、テキストベースという性質は、生成AIにとってはむしろ扱いやすいものです。生成AI、特に大規模言語モデルは、テキストを読み、文脈を理解し、ルールに従ったテキストを出力することに最も長けています。つまり、RESP-F3Tのようなテキストベースのソフトウェアであれば、AIの強みを最大限に活かすことができると考えました。

そこで、これらの課題を解決する手段として、OpenAIのアシスタントモデル(以下、AIモデルと表記)を活用し、Function Calling や File Search といったAPI機能を組み合わせ、モデルに与える初期の指示(プロンプト)も丁寧に設計することでftcファイルの自動生成を試みました。各技術要素の詳細については次節で紹介します。

Function Calling(関数呼び出し) 

Function Calling(関数呼び出し)とは、AIモデルが「どの関数を、どんな情報で実行すべきか」を判断し、その内容をJSON形式で出力することで、外部のプログラムやツールと連携できる仕組みです。AIモデル自身が関数を実行するのではなく、「この関数をこの引数で実行してほしい」というリクエストを生成し、それをもとにシステム側が実際に関数を実行します。これにより、AIモデルは単なるテキスト生成だけでなく、外部の機能を組み合わせた高度な処理が可能になります。

今回の取り組みでは、RESP-F3Tの構文ルールをAIモデルに直接覚えさせるのは難しいと判断し、代わりに「どの機能(関数)を使うか」をAIモデルに判断させ、実際のftcファイルの記述はPythonで用意した関数側に任せるというアプローチを採用しました。具体的には、節点、境界条件、材料、断面、要素などの各構成要素を定義するPython関数をそれぞれ作成し、それらをFunction Callingに設定しました。AIモデルは、ユーザーの指示をもとに必要な関数を自動で呼び出し、その結果として正しいRESP-F3T形式のコマンドが生成される、という流れを実現しています。

 

関数呼び出しの概要

さらに、生成したftcファイルの内容が RESP-F3T 上で正しく動作するかを確認するため、RESP-F3T を実行するための関数もFunction Callに設定しました。

AI モデルがこの関数を呼び出すと,RESP-F3Tでftcファイルが実行されます。エラーなく実行された場合には、その情報がユーザーに伝えられます。一方で、実行中にエラーが発生した場合には、RESP-F3Tによって出力されるerrファイルの内容をシステムが読み取り、それを AIモデルに返します。AIモデルはそのエラー内容をユーザーに表示し、修正案を提示することができます。

File Search(ファイル検索)

File Searchは、OpenAIのAPI機能の一つで、AIモデルがあらかじめアップロードされたファイルを検索・参照できるようにする仕組みです。これにより、単なるテキスト生成にとどまらず、事前に用意された文書に基づく正確な回答が可能になります。

今回の取り組みでは、RESP-F3Tのマニュアル(PDF)をアップロードし、それをベクターストアに変換しました。ベクターストアとは、ファイルの内容を意味ベースで検索可能な数値ベクトル(埋め込み)として保存するデータベースです。AIモデルはこのベクターストアに対してキーワード検索だけでなく、意味的な類似性に基づく検索も行うことができ、ユーザーの質問に対して該当するコマンドの説明や使用例など、最も関連性の高い情報を取り出して活用します。その結果、ftcファイルの生成時だけでなく、「このコマンドの意味は?」といった一般的な質問にも、正確で文脈に合った回答が可能となります。

OpenAIベクターストアとファイルサーチ概要

プロンプト設計

本取り組みでは、AIモデルの応答品質を大きく左右する「システムプロンプト」の設計が非常に重要な要素となりました。システムプロンプトとは、AIモデルに最初に与える指示文のことで、AIモデルがどのような立場で、どのように振る舞い、何に基づいて応答すべきかを定義するものです。いわば、AIモデルの「初期設定」にあたるものであり、ユーザーとのやりとりの基盤となります。

今回は、RESP-F3Tがスクリプトベースの構造解析プログラムであり、ftcファイルというテキスト形式の入力ファイルを正しい順序と構文で記述する必要があることをAIモデルに理解させるために、丁寧に設計されたプロンプトを使用しました。

プロンプトには、次のような情報が組み込まれています:

  • 役割の明示:AIモデルが「RESP-F3Tの優秀なサポートエンジニア」として振る舞うように指示
  • ftcファイルの形式や構成要素(節点、境界条件、材料、断面性能など)、記述順序、実数・算術の扱い、節点や要素の命名規則などの基本ルール
  • ユーザーの指示内容に応じて適切な関数(ftcコマンドを書き込む関数、RESP-F3T で ftcファイルを実行して検証する関数)を呼び出す指示
  • 情報が不足している場合の対応方針(想定またはユーザーへの確認)
  • 検証中にエラーが発生した場合、修正案を提示すること

 

AIモデルの挙動を試してみる

AIモデルの反応を評価するために、次のような質問をしました。


Q1:Nmmを単位系として、X方向に10m離れた2つの節点を定義し、その境界条件を固定する。


Q2:(Q1の続き)作成したftcファイルに、ヤング率とせん断弾性率を適切な値に設定した'Steel'という名前の材料を追加してください。


Q3:以下の情報を基にftcファイルを生成してください。長さ7m、鋼材、両端が固定された300×300mmの長方形の梁を定義してください。作成したftcファイルを返してください。

 


Q4:(Q3の続き)中央に追加の節点を配置して梁を2つに分割し、3.5m長さの2つの梁要素を定義してください。

※梁を2分割する節点N3が追加されます。なお、追加節点の境界条件が指定していないので、関数呼び出しで設定されたデフォルト値 「FREE 」が定義されています。


Q5:鋼材の材料をコンクリートに変更し、それに伴ってヤング率とせん断弾性率の値を変更してください。(不足情報の例)

材料の詳細が提供されていない場合でも、AIモデルはそれを仮定し、明記しています。

例えば、上記のケースでは、ヤング率とせん断弾性率が与えられていませんが、AIモデルは適切な値を仮定し、明記しています。
※なお、この仮定はGPT4oモデルの理解に基づいております。

コンクリートのヤング率を具体的な値に変更するようAIモデルに指示してみます。

「コンクリート材料のヤング係数を2.50e+10に変更してください。」を指示したことろ、以下のような反応でした。


Q6:(Q5の続き)作成したftcファイルをRESP-F3Tで実行して検証してください。

作成したftcファイルを入力としてRESP-F3Tを実行したところ、エラーもなくうまくいったので、上記のような回答となりました。

ここで、AIモデルがエラーがあった場合に正しく認識するかを確認するため、ftcファイルを編集し(BeamPropertyの定義から断面性能名を削除し)、AIモデルに検証を依頼しました。

その結果、AIモデルは問題を正しく認識し、エラーを表示しただけでなく、改善策も提案しました。さらに、修正したftcファイルを返しました。 

ftcファイルには以下の2つのエラーがあります:

  1. 梁性能の定義不足:行 16 のBeamProperty BeamProp1で、パラメータの数が不足しています。BeamPropertyの定義には、少なくとも断面性能名を指定する必要があります。
  2. 不適切な梁性能参照:行 18 及び 19 で、指定された梁性能BeamProp1が定義されていません

以下の修正を行ってください:


修正内容
BeamProperty BeamProp1に関連付ける断面性能名Rect300x300を追加しました。
上記内容で修正を再度確認してください。必要であれば、ftcファイルを再実行することも可能です。


Q7: 梁を定義してください。

漠然とした(曖昧な)質問に対し、AIモデルは上記のように応答しました。タスクを分解し、プロンプトの指示に従おうと試みましたが、断面定義に誤りがありました。詳細を確認したところ、コマンドを記述する際に関数を呼び出しておらず、マニュアルから関連情報を参照・検索して回答していることがわかりました。

これは、指示が曖昧だったためにAIモデルが「ftcファイルを生成する指示」とは解釈せず、一般的な説明要求として処理した可能性があります。Function Calling は、強制的に呼び出されるものではなく、あくまでAIモデルが「関数を使うべき」と判断した場合にのみ呼び出される仕組みであるため、ユーザーの意図が十分に伝わらないと期待した動作をしない場合があります。このように、関数呼び出しがAIモデルの解釈に依存するという点は、注意すべき潜在的な落とし穴といえます。


結論

本取り組みでは、RESP-F3Tの入力ファイル(ftcファイル)作成における課題を、生成AI(OpenAIのアシスタントモデル)とAPI機能(Function CallingやFile Search)を活用して解決することを試みました。AIモデルはユーザーの指示を受けて、関数呼び出しを通じて必要な構成要素(節点、材料、断面など)を生成し、全体としてよく構造化されたftcファイルを出力できるケースが多数見られました。

特に、Function Calling によりftcの構文やルールに従った記述が安定して行われた点は大きな成果です。さらに、File Search によってRESP-F3Tマニュアルの情報を適宜参照できるようにしたことで、AIモデルは関数の背後にあるコマンドの仕様や使用例も理解した出力ができるようになり、より信頼性の高い回答が可能となりました。

一方で、AIモデルがマニュアルからの情報のみで回答し、関数呼び出しを行わなかったケースも確認されました。これは、関数呼び出しを行うか否かはモデル側の判断に依存しており、ユーザーやシステム側から完全に制御できないというFunction Callingの特性に起因するもので、今後の改善が期待される点です。

今後の見通し:生成AIで新たな可能性を拓く

このプロトタイプは初期段階の探索に過ぎないですが、生成AIの計り知れない可能性を秘めています。ftcファイルの作成を自動化することで、ユーザーの負担を軽減し、エラーを最小限に抑え、構造モデリングにおけるAIの幅広い応用への道を拓きました。

将来的には、解析結果(RESP-F3T が出力する .last ファイル、.story ファイルなど)の処理、ftd ファイル(RESP-F3T の図化ファイル)作成への同様のアプローチの拡張などが考えられますが、より良いアイデアをお持ちの方、そのようなテーマにご興味のある方は、ご連絡頂ければ幸いです。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です