記事のサムネイル

OpenAI o1-miniで素因数分解ゲームを作る。-AIとの付き合い方-

今回は9/12にリリースされて今話題のOpenAIのo1を用いて、ゲームを作った話をしたいと思います。

o1-miniによるプログラミングは精度が高すぎました。プログラミング歴1年の自分では到底歯が立たないでしょうね。

僕は一応建築学生なので、実際はプログラミング経験3ヶ月くらいの実力しかないと思いますが、

この実装は、「建築法規」という必修授業の最中に作ったものになります。大丈夫です。コードを書くのは全部AIなので、耳では授業を聞いていました。

覚えていた話はハンムラビ法典の建築法律ぐらいですが笑笑

建築業者が不適切な施工を行い、その結果として建物が崩壊し、所有者が死亡した場合、その建築業者は死刑に処される。

ハンムラビ法典

おそろしいい。

死には死を

脱線してしまいました。それではやっていきましょう。

会話の流れと最終的なコーディングをこちらで紹介したいと思います。


自分:なんか面白いゲームを作りたい

o1-mini:

1. ゲームのコンセプトを考える。まずはどんなゲームを作りたいかを明確にしましょう。以下の質問を自分に問いかけてみてください。 2. アイデア出し 3. ゲームデザインの計画、4. ツールと技術の選定・・・

自分:素因数分解ゲームを作りたい。クオリティの高いpythonコードを書いて。


??????

急にどうした。

今回はゲームを作りたいくらいの高い抽象度だったので、AIにアイデア求めます。これは自分は普段からよくやりますね。

1秒考えて無理だったらまずAIに聞く。

そんな中、ダラダラと出力されるAIの回答を眺めていると、急に案が浮かんできました。(AIが提案してきた具体案から素因数分解を選んだのではありません。新たに浮かんできたのです)

そう、こういう事が頻繁に起きるのです。なぜでしょうか。わかりません。でもよく起こります。

僕は「考えしろ」をAIに求めるようにしています。

授業のレポートや実験の考察なんかも一緒です。とりあえず、授業資料や実験結果をAIに読み込ませ、何か出力させます。

そこには「考えしろ」がねむっているのです。その火種を大切にし、自分の意見へと火起こし・昇華させていきます。

はっきり言って、まだ実験の考察とかのクオリティは僕の1/5くらいです。僕が実験をしているので当たり前ですが。

しかしRAGとかを使えば、僕と同じくらいの文章は今のAIモデル(GPT o1-previewとか)でも書けそうです。あくまでただ単位を取るためではなく、「建築の学習」をしているので、それは行いませんが。

RAG(Retrieval-Augmented Generation、検索拡張生成)とは、外部の情報を検索し、その情報を基に大規模言語モデル(LLM)が回答を生成する技術です。このアプローチは、特に生成AIの精度を向上させるために注目されています。

検索AI・Gensparkに「RAGとは」と聞いた出力。すごい大体あってます。

つまり、考察をするための外部情報(図書館に眠ってる実験書や建築論文集など)を与えるのです。授業資料や実験結果もRAGの一部に該当しますが、もっと大規模にやります。

言ってしまえば、僕も脳みそに溜まってる「今まで学んできたこと」から情報を引っ張り出して考察を書いているので、仕組みは同じですが...

脱線しすぎました。つまり、AIは考えしろを与えてくれるものとして最適なのです。AIはとりあえず「何か」を出力するため。(しないといけない)

あと、大事なことを言い忘れてました。GPTは会話を続けて、一緒に答えを出力するものです。一回の出力で終わらせてはいけません。(しかし、o1には推論フェーズというモードがあり、かなり1人で考え込んでくれます。

実はo1はGPTではないことが噂されています。GPT o1-miniじゃなくて、o1-miniなのです。下写真。会話型ではなくなるのかもしれません。

モデル選択の画面
モデル選択の画面

o1-mini: Pythonで素因数分解ゲームを作成するのは素晴らしいアイデアです!ここでは、Pygameを使用して・・・・
・・・・
コードの詳細説明
・・・・・


記載しませんが、230行くらいのコードを出力してくれました。詳細説明までしてくれる!

これをvisual studio codeにコピペして実装しました。

Visual Studio Codeでの実装画面
Visual Studio Codeでの実装画面

うーん。日本語対応していないし、、、

しかし、230行のコードをエラーなく実装できることはとてもすごいことです。(どこまでをエラーと呼ぶかですが)

人間には到底無理なことです。


自分:日本語対応されてない

o1-mini:
Pygameで日本語を表示するには、日本語フォントを使用する必要があります。デフォルトのフォントは日本語の表示に対応していないため、日本語フォントファイル(たとえば、Noto Sans JPやMeiryoなど)を指定することで対応できます。

解決策

1. 日本語フォントファイルを用意:
・お使いのシステムに日本語フォントファイルがあれば、それを使用できます。なければ、Google Fontsから Noto Sans JPをダウンロードできます。

2. フォントの指定を変更:
・ダウンロードしたフォントファイルをプロジェクトのディレクトリに配置します。ここでは例として、NotoSansJP-Regular.otfというフォントを使うとします。

3. コードの修正:
・日本語フォントを読み込むように、pygame.font.Fontの部分を修正します。

・・・・・・

自分:英語でいいよ。


親切に日本語対応の方法を教えてくれましたが、色々めんどくさそうだったので、英語にしました。

「日本語で頑張って実装するのではなく、英語に変えちゃおう。英語の勉強になるぜー。」くらいAIに言ってほしかったですが笑笑

まあ、「自分:日本語対応されてない」これには「日本語対応に修正しろ」という含みがあると感じるのは当然です。僕が悪いです。

英語に変えちゃおう。この脱ルール見たいな考え方は人間(というより、ゲーム制作というプロセスの最上流のポジション)の特権な気がします。

こんなニュースもあり、驚いてますが笑笑

システムが自分の実験コードを変更して、問題への対処時間の延長を試み始めるという、想定外の事態に遭遇した。

sanakaAIこのリンクより

o1-mini:
・・・コード生成・・・


素因数分解ゲーム画面2回目
2回目

自分:数の候補は1~11の素数までにして、それぞれのボタンを押すとその数で今ある数を割っていくスタイルにしたい。

o1-mini:
・・コード生成・・


素因数分解ゲーム画面3回目
3回目

ギャグセンス高い!!!!

ここで、29(素数)を出してきました。少し自分も強めに当たります。笑ってあげる余裕のない人間であるということが次のプロンプトに現れてます。


自分:29を1~11の素数で割れるわけないじゃん。1~11の素数で割れる数を出して。あと条件は100以上999以下であること

o1-mini:
・・コード生成・・

自分:・・・

・・・

・・・

自分:evel10:みたいな表示いらない。あと、画面に表示されるのは2秒後だけど、内部では計算されて次の問題に行けるようにして。あと、問題が解けたら次の問題に自動で行くようにして

・・・・

・・・


とな感じで、いろんな機能を追加していき以下ができました。10往復くらいしたかなあ。

なかなか良い出来です。(自分の素因数分解が下手というのは無視してください)

皆さんもぜひAIと一緒にプロダクト作成してみてください!!!