1K Views
May 11, 23
スライド概要
Frontend engineer @lapras_inc / TypeScript / Vue.js / Firebase / 元消防士
[Minecraft × ChatGPT] マイクラで作りたいものを伝えると魔法の ように作成してくれるコマンドを作る 2022/05/11 ChatGPT Meetup Tokyo #1
@KawamataRyo 👨💻 エンジニア@LAPRAS inc 👪 2児の父(育休1年取得中) 🔥 元消防士 🏄 懸垂, 個人開発
今日話すこと 💬
・コマンドの実装紹介 ・ChatGPT APIのエラーハンドリング ※ ⚠ MinecraftとPythonについての説明は省略して ChatGPTとの接続に焦点を当てて説明します
何を作った?
Minecraft上で作りたいものを伝えると 実際に作ってくれるコマンド 💫
💁 < 空に丸い月を作って!
💁 < 空に丸い月を作って! 🤖 < できました!
他にも色々 ビルを作って ! 国旗を作って! 窓の大きい家を作って!
なぜ作った?
息子(小2)が好きなMinecraftで ええかっこしたい🥹
息子(小2)が好きなMinecraftで ええかっこしたい🥹 実際に尊敬度+20p(?)くらい上昇し、 エンジニアの仕事に少し興味を持ってくれました 🙌
📺 DEMO
どのように実現している?
構成図 Minecraft With Raspberyjammod Command ChatGPT API
構成図 /py magic 空に月を作って!! Commandを起動 Minecraft With Raspberyjammod Command ChatGPT API
構成図 空に月をMinecraftで作る Pythonコードを書いて!! Promptを組み立て送信 Commandを起動 Minecraft With Raspberyjammod Command ChatGPT API
構成図 Promptを組み立て送信 Commandを起動 Minecraft With Raspberyjammod Command コードと説明を返信 ChatGPT API はい。こちらです。 ̀̀̀hogehogè̀̀
構成図 Promptを組み立て送信 Commandを起動 Minecraft With Raspberyjammod コードを抽出して Eval Command exec(responseCode) コードと説明を返信 ChatGPT API
実装イメージ
実装イメージ 引数で受け取った指示をpromptに埋め込み ChatCompletion API に送信 🧙 あなたは優れたPythonプログラマーであり、優れたMinecraft ビルダーでもあります。 Minecraftで「{prompt}」という命令を実現するためのPython コードを教えてください… (略)
実装イメージ API の戻り値から コードブロックのみを抽出
実装イメージ 抽出したコードを Eval して構築物を建設
📺 ここらへんでDEMOの結果確認!!
もし失敗してたら..
工夫したポイントは?
ChatGPTならではのエラーハンドリング 🚨
よく起こるエラー
よく起こるエラー ① コードが抽出できない ChatGPTがコードブロックを 返してくれずコードを抽出できない 申し訳ありませんが、私たちはMinecraftとPythonを組み 合わせた業務には従事しておりません。 また、MinecraftからPythonにアクセスするには、特別な サーバーやツールが… ※ 返答例。色々言い訳してコードを書いてくれない 🤖
よく起こるエラー ② Evalでエラーが発生する ChatGPTが間違ったコードを書いてきて 実行時エラーが発生する こちらです。 ̀̀̀ hoge = 2 bar = fuga + Hog ̀̀̀ 🤖 ※ 返答例。未定義の変数の参照などが多い。
どう解決する? 🤔
そうだ! ChatGPT に任せよう!💪
①コードが抽出できないの解決策
API リクエストの流れ 💁 空に大きな丸い月を作ってください 1回目の APIリクエスト
API リクエストの流れ 💁 空に大きな丸い月を作ってください 申し訳ありませんが、私たちはMinecraftとPythonを組み合わせた業 務には従事しておりません。 また、MinecraftからPythonにアクセスするには、特別なサーバーや 🤖 ツールが… コードが書かれていない😵 1回目の APIレスポンス
API リクエストの流れ 💁 🤖 💁 空に大きな丸い月を作ってください 申し訳ありませんが、私たちはMinecraftとPythonを組み合わせた業 務には従事しておりません。 また、MinecraftからPythonにアクセスするには、特別なサーバーや ツールが… Minecraft上で実行できるPythonコードを書いてください リトライで 前回のやりとり + 依頼文を送る 2回目の APIレスポンス
API リクエストの流れ 💁 🤖 💁 空に大きな丸い月を作ってください 申し訳ありませんが、私たちはMinecraftとPythonを組み合わせた業 務には従事しておりません。 また、MinecraftからPythonにアクセスするには、特別なサーバーや ツールが… Minecraft上で実行できるPythonコードを書いてください 申し訳ございません。わかりました。 以下がMinecraft上で空に丸い月を作るPythonコードです。 ちゃんと書いてくれる..!! ̀̀̀ 🤖 import hoge 2回目の APIレスポンス
ChatGPT API呼び出しの関数を修正
ChatGPT API呼び出しの関数を修正 初期のprompt以外に 追加のメッセージを引数で 設定できるように修正
main関数を修正
main関数を修正 追加メッセージの 配列を初期化 上限回数を超えない限りは、 リトライするようにループを記述
main関数を修正 もしコードが 抽出できない場合は APIの返答と、コード生成の依頼文 を追記して再度問い合わせる
②Evalで実行時エラーの解決策
リクエストの流れ 💁 空に大きな丸い月を作ってください 1回目の APIリクエスト
リクエストの流れ 💁 空に大きな丸い月を作ってください こちらです! ̀̀̀ create̲moon() 🤖 ̀̀̀ 実行時エラーが発生😵 1回目の APIレスポンス
リクエストの流れ 🤖 💁 こちらです! ̀̀̀ create̲moon() ̀̀̀ 実行したところ NameError: name ʻcreate̲moonʼ is not de ned というエラーが発生しました リトライで 前回のやりとり + エラー文を送る 2回目の APIリクエスト fi 💁 空に大きな丸い月を作ってください
リクエストの流れ 💁 🤖 💁 空に大きな丸い月を作ってください こちらです! ̀̀̀ create̲moon() ̀̀̀ 実行したところ NameError: name ʻcreate̲moonʼ is not de ned というエラーが発生しました 申し訳ございません。コードが間違っていました。 コードを書いてくれる!! 以下が修正済みのコードです ̀̀̀ 🤖 import create̲moon from hoge Create̲moon() ̀̀̀ 2回目の APIレスポンス fi エラーを修正した
main関数の修正
main関数の修正 Evalをtry/exceptで囲み 発生した例外をキャッチ
main関数の修正 エラー内容を次のAPI呼び出しの promptに埋め込む!
解決!!✌
まとめ
・Minecraft は楽しい! ・ChatGPTのコードをEvalする際のエラーは、 ハンドリングしてChatGPTに直してもらうと良い!
✏ 今日の話のより詳細なものは記事に!
宣伝!
MacでChatGPT関連の海外サービスを使うときに困る アレを解決するツールを作りました💪