今回は話題のChatGPT(GPT-3.5)を使って、ChatGPTが作成したマクロのコードをそのままFreeCADに適用した場合、ちゃんとモデリングできるかを検証してみました。
因みに、私のプログラミング能力についてはExcelのVBAがそこそこ書けるだけで他の言語については知識ゼロになります。ただ、ChatGPTでコードを作成する場合は、知識がなくてもコードの作成自体は可能で、尚且つ、生成されたコード内には細かくコメントが記載されていたので、どのような処理がされているのかは誰でもある程度は理解できると思います。
果たしてChatGPTで作成したマクロのコードでモデリングができたのか
結論から言うと、想定した形状にモデリングすることができました。
今回簡単な形状で検証してみたかったので、以前私が3Dプリンターで製作したモデルを対象にしてみました。
※どのような指示をChatGPTにしたのかは後述しています。
FreeCADのマクロの使い方
FreeCADのマクロ機能について、簡単に操作方法を説明しておきます。
まず新規ドキュメントの開き、「マクロ…」のアイコン(赤枠)をクリック。
そうすると、下図の画面が表示されるので「作成」をクリック。
ファイル名を入力して「OK」をクリック。
そうすると、マクロのコードが書ける画面になります。
コードが入力できたら、「マクロの実行」のアイコン(赤枠)をクリックすると、マクロが実行されます。
なので、ChatGPTで作成したマクロを実行したい場合は、下図赤枠のCopy codeをクリックして、そのままFreeCADのコード画面でペーストすればOKです。
ChatGPTを使ってマクロのコード作成に挑戦
1.ChatGPTに曖昧な指示をしてみる
まずChatGPTの能力を図るため、曖昧な指示をしてみました。
生成されたコードでマクロ実行してみると、下図のようなモデルを作成できましたが、同時にエラーも表示されてしまいました。
このあと、ChatGPTと何回かやり取りを行いエラーは処理できましたが、上図のクオリティを超える成果物を提案されることはありませんでした。
また、ChatGPTは過去にやり取りした内容を修正できるのですが(赤枠)、同じ指示内容であっても再度送信すると異なるコードを生成してくれます。なので、満足のいく回答が得られるまで繰り返しても良いかと思いますし、やり取りの中で少しずつ要望を追加して、コードを生成して貰っても良いかと思います。
2.ChatGPTに的確な指示をしてみる
曖昧な指示では、こちらが想定していた形状でコードを生成してくれないことが分かったので、次は明確な指示をしてみることにしました。
生成されたコードでマクロ実行してみると、下図のようなモデルを作成できました。
しかし、貫通穴が見るからにφ8ではありませんでした。
なので、ChatGPTにφ8の貫通穴になっていないので、コードを修正するように要望しました。
修正されたコードで実行してみると
想定した形状にモデリングすることができました。
一応、ChatGPTに作成したもらったコードを下記に貼り付けておきます。
※#はコメント
import FreeCAD as App
import Part
import Draft
# 1. 立方体を作成
length = 90 # X軸方向の長さ
width = 30 # Y軸方向の幅
height = 20 # Z軸方向の高さ
box = Part.makeBox(length, width, height)
# 2. 貫通穴を作成
hole_positions = [(10, 15), (30, 15), (50, 15)] # 貫通穴の位置 (X, Y)
hole_radius = 4 # 貫通穴の半径 (φ8の場合、半径4)
↓コード修正前(赤字がミス)
for position in hole_positions:
x, y = position
hole = Part.makeCylinder(hole_radius, height + 1)
hole.translate(App.Vector(x, y, 0))
box = box.cut(hole)
# 3. 凹みを作成
cavity_position = (65, 0) # 凹みの位置 (X, Y)
cavity_size = App.Vector(20, 30, 15) # 凹みのサイズ (X, Y, Z)
cavity = Part.makeBox(cavity_size.x, cavity_size.y, cavity_size.z)
cavity.translate(App.Vector(cavity_position[0], cavity_position[1], 0))
box = box.cut(cavity)
# モデルを表示
Part.show(box)
# ドキュメントをアクティブにする
App.setActiveDocument(“Unnamed”)
App.ActiveDocument=App.getDocument(“Unnamed”)
Gui.ActiveDocument=Gui.getDocument(“Unnamed”)
まとめ
上記で紹介してきたように
・曖昧な指示では、こちらが想定している形状でモデリングしてもらえない。
・ChatGPT任せの指示をしても、うまいこと処理してもらえない。
・明確な指示を与えると、モデリングできる。(間違いはある)
・処理が間違っていても、その後、指摘してあげれば修正してくれる。(こともある)
今回は簡単な形状で検証してみましたが、複雑な形状ほど指示が難しく難易度は上がるだろうなと思いました。また、ChatGPTでコードが作成できるとはいえ、あまり実用的ではないかなと個人的には思いました。
今回とは違った指示出しやアプローチの方法があるかと思いますが、一つの参考になれば幸いです。
コメント