🔬

ChatGPTでVCI(VirtualCast Interactive)の開発を加速する!

2023/12/22に公開

この記事はVCI(VirtualCast Interactive) Advent Calendar 2023の22日目です

TL;DR

  • GPTsやCursorを使ったVCI開発の支援
  • Unityの画面スクショでパラメータの解説もらえるのは強い
  • CursorもVCIの公式ドキュメント読ませればかなり使える
  • VCI開発もAIで加速できそう

はじめに

今年はChatGPTをはじめとしたLLMが飛躍した年でしたね。その中でもGitHub Copilotをはじめとして開発の現場で生産性向上として使われるケースも増えてきたと思います。私も最近使っていますがめっちゃ便利! VCIの開発もぜひ支援して欲しいのですが、JavaPythonのようにメジャーでは無い 言語や開発環境/SDKでも果たして支援してもらえるのでしょうか?

という分けでVCIの開発を今のAIはどこまでサポートしてくれるのか? に関して検証してみました。AIcia_Solidさんも「**困ったらAIに聞け!**ef」って言われてましたしね。バーチャル学会で見た!

AIを開発のどこに利用するのか?

私はLLMを開発に利用する事に関しては最近始めたばかりなのですが、それでも以下の点は魅力的に感じます。

  • a) エラーコードを貼り付けてデバッグ支援
  • b) ツールやライブラリの使い方のサポート(含むコードスニペット作成)生成
  • c) 全体のコーディングスタイルの調整

特に、aとbが有用で、例えばエラーが出たら 「エラーを読む前」ChatGPT等に解析させて、そのまま対処方法が得られることもありますし、少なくともエラーコードでググらなくてもエラー内容を把握できます。
また、初めてあるいは普段使わないライブラリなどで、ライブラリの使い方の解説や、やりたい事のサンプルコードないしは自明なコードを生成するのに非常に役立ちます。「頭の中にすでにコードが出来ていてそれを上から出力する状態」見たいな時には不要ですが 「あれどうやるんだっけ?」 レベルでとても役だちます。
フォーマットも例えば「JSでセミコロンがついてないものも全部つける」「キャメルケースからスネークに置き換える」とか柔軟な支持で出来るので結構便利です。

他にもアイデア出し等コーディング等とは違う部分に使う人も多そうですが、今回は割愛します。コーディングという狭い領域でも、日々の生産性をしっかりと上げてくれます。さてUnity+VCIという構成でもこの恩恵は受ける事ができるでしょうか?

UnityでのVCI開発でChatGPTを使えるのか?

まずはChatGPTに聞いてみる

とりあえず素のChatGPTにVCIでOSCを使うサンプルに関して聞いてみました。最近、Gemini化して賢くなったGoogle Bardも気になりますが、ここは手慣れたChatGPT4で行きます。

VirtualCastやVCIに関してちゃんと知ってるのは高評価なんですが、これはUnityの例で欲しい情報ではありません。ChatGPTは多くの専門知を持ってはいますが、それゆえに目的特化の質問への回答は望まない結果になる事があるのでチューニングが必要です。
チューニングとして追加学習(FineTurning)のような大規模な事は不要で、プロンプトエンジニアリングを行います。さらに手軽にGPTsを使ってVCI専用ChatBotを作りました。
https://chat.openai.com/g/g-LFextiUb0-shi-yan-zhong-fei-gong-shi-vciasisutanto
GPTsは「あなたはVirtualCast, VCI, Lua, Unityの専門家で、プログラミングの質問への回答などのサポートをくれます」くらいの文章から適切なプロンプトを自動生成して、専用のChatGPTを簡単に作れるサービスです。今回、それにいくつか公式ページの情報をアップロードして食わしてみました。正味、15分くらいで作ったので練り込みは甘いですが、それでも素のChatGPTより各段と適格な回答をしてくれます。

カスタムしたChatGPTに色々聞いてみる

もう少し深堀していきましょう。例えば、Textで「Hello World」と書いてキューブに貼り付けただけのサンプルを作ります。こういう感じのやつ。

これを特に設定変更せずにVirtualCastToolKitにアップロードすると重力効いてるので、パタンと倒れてしまいます。これだとちょっと面倒なのでとりあえず重力を切ったすると、突然VCIが暴れだし空に舞い上がる... 誰もがこんな経験をしたことはあるはずですよね?

皆はじめ「なんでVCIはすぐに空に飛んでしまうん?」と思うのですが、今はChatGPTがあります。とりあえず、先ほどのVCI向けにカスタムしたGPTに聞いてみましょう。

なんか、いろいろ教えてくれるのですが、どれもピンと来ませんね。もう少しダイレクトな回答は得られないものか? という事でパラメータのスクショを貼ってみます。


質問自体は私が普段使う 「Is Kinematicを無効」 という事に誘導的なのですが、Unityの画面を見て各項目の解説をしてくれるのは非常に便利ですよね! とくに私のようなUnity苦手勢には大助かり。マルチモーダル万歳ですね。

他にもキューブとテキストが近すぎて文字が点滅していたのですが、それに関する質問をしても以下のように回答してくれます。

ある程度、スクショからパラメータは読めてるように感じるので、もう少しVCIに関するドキュメントをGroundingのためにアップロードして食わせると、より的確な回答は返してくれそうです。今は、結構Unityに寄った回答をしている気がするので。

CursorでVCIスクリプトを開発する

まずは準備

CursorはVSCodeからフォークされたAI-first Code Editorです。
https://cursor.sh/
Copilotのようなコード生成支援やChatGPTでの問い合わせが出来ます。単にChatGPTを使うのと違って 「今書いているコード」 というコンテキストを知っているのは非常に便利です。また公式ページのマニュアル等を読ませる事で簡単に最新のライブラリにも対応できます。これによってVCIなど学習量が少ないと思われるAPIにもバッチり対応させることができるわけですね。

まずはVCIのドキュメントを覚えさせましょう。C-lでChatウインドウを開き@Addでドキュメント登録に進めAdd new docsを行います。

VCIの公式ページのリンクを入れます。

こちらでOKをするとクローリングがはじまりおそらくリンクから辿れる同じドメインのドキュメントを自動的に取り込みます。めっちゃ便利!

これで、準備は整いました。

スクリプトを書いてみる

VCIスクリプトは%USER%\AppData\LocalLow\VirtualCast\VirtualCast\EmbeddedScriptWorkspaceにあるmain.luaをデバッグモードでいじりながら開発することが多いと思いますので、これをCusrsorで開きます。
とりあえずHello Worldでも書いておきましょう。C-kでコードジェネレーションのWidgetを開いて 「Hello Worldを書いて」 と支持すると以下のように候補を出してくれます。

これをアクセプトすればそのままコードが追加ないしは変更されます

続いてVCIのドキュメントに基づいてOSCのサンプルを書いてもらいましょう。先ほど登録した@VCIをした後に目的の文章を記述します。

function echo(content)
  print(content)
end
vci.osc.RegisterMethod("/test/echo", echo, {ExportOscType.String})

function show_point(x, y)
  print(x..", "..y)
end
vci.osc.RegisterMethod("/test/showPoint", show_point, {ExportOscType.Float32, ExportOscType.Float32})

なんか、それらしきコードを生成してくれました。ただ、コピペされたコードだけあっても意味が分からないので解説をしてもらいましょう。対象のコードを選択して、C-LでChatに貼り付けドキュメントを参照しつつ意味を問い合わせてみます。

新しいAPIであっても対応できるので、既存のVCIのAPIはもちろん、OSCとかストレージAPIのように今年登場したものにもすぐに対応できるのは非常に便利ですよね。Luaの文法も当然フォローされるので色々捗りそうです。

デバッグ

ではVCIのLuaスクリプトをデバッグする場合はどうすれば良いでしょうか? エラーログをチャットに貼ればいろいろ分析してくれて便利なのですが、通常だとVR空間内のみにエラーが出ているので、ブラウザ経由でこれをPC側で取得できるようにします。
https://wiki.virtualcast.jp/wiki/vci/script/console

これでブラウザでhttp://localhost:8080でVCIのログが表示されるようになります。ポートは任意で自分の利用してるものと被らないようにしてください。

続いて取得したエラーを貼り付けて質問すると以下のような回答が返ってきました。エラーメッセージからかなり詳細の情報を読んでくれていることが分かります。

どうやら今回の原因はハルシネーションで存在しないメソッドを提示されていたようです。この場合、間違ってることを指摘して書き直させるもよし、自分でマニュアル等を読み手で直すもよし、です。状況にあった対応をしましょう。

若干、エラーログをチャットウインドウに貼り付ける手間が面倒なので、Cursor/VSCodeでVCIのログを読むプラグインなんかを作ると大分捗るかもです。HTTPなら結構簡単にできそうですしね。

ハルシネーション(幻覚)のリスクは?

先ほどのデバッグ中にも出ましたがChatGPTはもっともらしいウソを言う癖があり、これをハルシネーション(幻覚) と呼びます。
コード開発での利用だとありがちなのはシンタックスエラーとか存在しないAPIの想像ですね。これはLLMの仕組み上、完全に無くす事は出来ないですが、適切なドキュメントを読み込ませてグラウンディングを行うなどで軽減できる部分が多くあります。

また、Linuxの開発者であるLinusの 私は、AIがなくてもバグが起きているのを毎日見ている。だからあまり心配していない。自分たちが作っているミスにもうまく対応できているのだから が的を射ていますが、特段それは新しいことでは無いんですよね。個人の判断でも間違うし、ググった情報が正しいとは限らない前提で、ソフトウェア開発を行っているので、人間が作った成果物と同程度の信頼性(=つまり誤りの可能性がある)と考えて進めれば問題ないでしょう。適切なレビューやテストで担保で良いと思います。決して神のごとく正解を託宣してくれるものでは無い前提で使えるなら、(少なくともソフトウェア開発においては)現状と比べて著しくリスクが増えるとは考えていません

まとめ

生成AIを用いた開発支援をVCI開発でも受けれるのか? という点を確認してみましたがいかがだったでしょうか? ChatGPT(GPTsでチューニング)で以下の点を確認できました。

  • Unityの画面スクショでパラメータの解説もらえるのは強い
  • CursorもVCIの公式ドキュメント読ませればかなり使える

個人的には粗削りな部分はありつつも、使わない理由は特にないので、自分のスタイルに組み込めそうな感触を得ました。UnityのMuseとかもどうなるか気になっていましたが、GPT4やあるいはGoogleのGeminiのようなマルチモーダルであれば、UnityやおそらくMaya/BlenderなどのGUIのデザインツールにもスクショを使う事で、ある程度使えそうな場面があると学べたのは収穫でした。そこまでいけるとは。
パラメータの最適化とかも色々提示してくれるようになると夢が広がりますね!

今後は、公式がカスタムのChatBotやCursorなどが扱いやすいドキュメント構造を意識してSDKを感がえる時代がやってくるかもですね。VirtualCastToolKitでサポートされないかな...

それでは、Happy Hacking!

Discussion