最近、スニペット全体 (多くの場合、自然言語のコメントのみに基づく) を提案してコードの作成を支援する AI である Github Copilot が商用サービスとして利用できるようになったことがわかりました。ベータ アクセスを待つ必要がなくなったので、2 か月間の無料試用版にチェックインしました。
私は言わなければなりません-私の期待は高かったです。以前、OpenAI API で少し遊んだことがあります。 Copilot と同じモデルを使用していると思うので、驚くような体験になる可能性があることはわかっていました。これを Visual Studio Code 拡張機能としてインストールしましたが、新しい仮想同僚にどのように挑戦すればよいか考え始めました。
コミュニティのコメントや記事のいくつかを読んで、Copilot の利点の 1 つは、この AI が現在生きているフラッシュおよびボーン開発者よりも多くのプログラミング言語、フレームワーク、および API を知っていることであることがわかりました。結局のところ、これまでに存在したすべての公開 GitHub リポジトリを使用して学習します。単なる生産性向上ツールではありません。また、新しいことを発見するためのインタラクティブな方法にもなります。
このように活用することを楽しみにしながら、ゲームを構築することにしました。スペース インベーダーのクローンは適切な選択のように思われましたが、これをより興味深いものにするために、いくつかの仮定を立てました。
スクリーン レコーディングを設定し、マイクをオンにしてちょっとした解説を行い、Visual Studio を起動して、最初の要求を書きました。
"""main function for a pygame"""
Copilot はコード行を次々と提供し始めました。大量のインポートを受け入れる提案のリストをタブで入力しました。最初は熱狂的でしたが、同じ 2 行のコードを何度も何度も追加するという無限ループに陥ってしまいました。ダメ。
悪いスタートを切って、私はすぐにやりすぎていることに気付きました。最初に PyGame インポートを追加するように Copilot に依頼し、次にウィンドウを表示する関数を作成するように依頼しました。
その時点で、リクエストをより正確にすることで、結果を改善できることにも気付きました。書きながら
"""create a function showing a game window"""
ほんの一瞬だけ表示され、すぐに終了するという事実を除いて、私はそれを機能させました。それから、自分の期待について非常に率直である必要があると想像しました。それをに変更する
"""create a function showing a game window and then left it open"""
Copilot はコードを拡張して、ウィンドウが閉じないようにする基本的なゲーム ループを追加しました。
相棒とのコミュニケーションが始まったようです。良い!
次のステップは、宇宙船クラスを作成することでした。別のファイルにクラスを作成し、再び別のリクエストを書き始め、別のクールなものを見つけました。 Copilot は、コードだけでなく、私が書いているコメントの内容も提案してくれることがわかりました。宇宙船を動かすために矢印キーを使用するように求め始めたところ、文全体が提案されました。
Copilot がプロジェクトごとに何が起こっているのかを実際に理解できるかどうか、私は少し懐疑的だったと言わざるを得ません。現在編集中のファイルのコードを分析することは 1 つのことです。これらのファイルがどのように相互接続されているかを理解することは、別の難題です。
副操縦士は、「私はあなたをカバーしました」と言います。他のファイルのクラスを認識しており、ゲーム クラスで spaceship を使用しても問題はありませんでした。 Copilot はまた、特定のゲーム ウィンドウ サイズを定義し、それを使用して宇宙船を画面の下部中央に配置していることを発見しました。
「このツールはすごい」と思うはずです。右?
みたいな感じですが、私たちの関係は月明かりとバラだけではありませんでした。 Copilot に作成を依頼した関数の不要なロジックなど、いくつかの問題は些細なものでした。いくつかの提案が遅れており、それらを待つ時間が少し失われました。
自分のミスでイライラすることもありました。関数はファイルの先頭にゼロを返す必要があるというコメントを残し、その下に別のコメントを書いて、なぜコパイロットが関数の最後にゼロを返そうとしているのかを理解していました。しかし、私がほぼ 1 時間かけて解決した問題に比べれば、たいしたことではありませんでした。
船を適切な場所に配置し、そのサイズを 50x50 ピクセルのサイズに設定しようとしていました。私は自分のコメントを非常に多くの方法で定式化しようとしていました。常に同じ結果が得られます。 Copilot が PyGame に存在しないメソッドを使用することを決定したため、コードは機能しませんでした。
ラバのように頑固で、ロードされたスプライト オブジェクトで set_size と set_center を呼び出そうとしましたが、毎回次のようになりました。
AttributeError: 'pygame.Surface' object has no attribute 'set_size'
まったく機能していないコードを常に取得して、リクエストを言い換えようとした回数は数え切れません。すっごくイライラします。
ある時点で、録音をやめて忘れるべきだとさえ思いました。コパイロットにこの目的には適していないというラベルを付けて、実験を終了します。それでも、これを克服する方法がなければならないと感じました。
Copilot を使用していればドキュメントのことは忘れられると思っていましたが、PyGame の基本を理解していなかったのは私のせいでした。シーン上のオブジェクトを移動するのに役立つ Rect の概念を理解していませんでした。ユーティリティ クラスを使用してスプライトをスケーリングする方法がわかりませんでした。
ドキュメントでその情報を見つけると、魔法が解けました。 Surface オブジェクトとして表されるスプライトを Rect から分離し、それらを個別に画面に渡す、コパイロットの異なる戦略を提案することができました。
このコースの残りの部分は簡単でした。作成したコードが多いほど、Copilot は賢くなりました。それが私の心を読み、弾丸とエイリアンを正しい方向に動かしたとき、それは魔法のようでした.コパイロットが自動的に計算して侵入者との弾丸の衝突を合計するスコア カウンターを追加するのは簡単なことでした。
結局、それは成功でした。ゲームは機能しており、すべてをゼロから学習するのに 2 時間もかかりませんでした。 Copilot はコードの少なくとも 99% を作成しました。ドキュメントを調べる必要はほとんどありませんでしたが、それがなければ、新しい友人が提供した誤ったコードに悩まされていたでしょう。
YouTube のこの 2 時間のビデオで、私の努力のすべてを見ることができます。
👉
準備なし、編集なし、トリックなし。純粋な即興。
簡単な警告です - それは感情的です。私は半分の時間、ただ笑ったり、少しずつ正しい方向に進んでいることに完全に興奮したりするだけでイライラします.
また、Github で生成されたソース コードを見つけることもできます。ビデオで述べたように、きれいではありませんが、機能します。
👉 https://github.com/lukasz-wronski/copilot-invaders
楽しんでください。読んでくれてありがとう!