Google Colabの生成AI機能によるコード作成支援の使い方
Google Colabに生成AIによる支援機能が追加されて1年が経ちました。当初はColab AIという名前でしたが、現在はGeminiとなり、無料ユーザーもこの機能を利用できるようになっています。本記事では、Colabの生成AIの使い方と具体例を紹介します。特に、サジェスト機能は非常に便利で、使って損はないと感じました。
VSCodeなどの開発環境で使えるコード支援AI「Codeium」についてはこちらの記事を参考にしてください。
Google Colabに生成AI機能が追加
無料で使えるGoogle Colabも生成AIの機能が追加されました。この記事では、この機能を使って色々試してみた結果をまとめました。
とりあえず、どんなことができるのかを書きたいと思います。
追記:
2023/10月時点では、無料のColabユーザーは使えませんでしたが、2024/2月時点では、無料のColabユーザでも使えました。
仕様は常に変化しているようです。2024/03/06に試した結果では、インライン補完(サジェスト)機能だけ動きませんでした。
とりあえず、2024年9月時点の無料版のGoogle Colabに基づいて記事を更新しています。
追加方法
Colabの「ツール」→「設定」を選択すると、「AIアシスタント」の機能に関する項目が追加されています。「生成AI機能の使用に同意している」をチェックすると使えるようになります。とりあえず、説明を読んで同意します。
これで生成AI機能をつかえるようになります。
Colab AIを使ってみる
Colab AIからGeminiに表記が変化していますが、この記事ではColab AIを使います(一部Geminiと書いている部分もあります)。
Colab AIのチャットボットを試す
とりあえず、右上に追加されたタブから触ってみます。
すると右側にGeminiとの対話用の画面が表示されます。
ここで、「Pandasのデータフレームに新たな列を追加したい」などの質問を書くとその質問に対する回答が表示されます。
ここで、表示されているコードの横のボタンをクリックすると、コードがコードブロックに追加されます。
Geminiのタブの機能は、Chat-GPTやBardなどと似た感です。違いは、直接コードブロックにコピーできる点くらいでしょうか。
コードブロックのAIでの生成を試す
コードブロックにも「コーディングを開始するか、AIで生成します」と生成がクリックできるようになっています。
ここで、AIで生成をクリックすると以下のような画面になります。
とりあえず、「関数funcの定義し、既存のデータフレームdfに、関数funcの結果を追加」するコードを生成させてみました。
この質問に対しては「1 of 1」と、1つの生成コードしか提案されませんでしたが、複数のパターンが提案されることもあります。
結果を見ると正しそうです。
生成された4つのコードは以下の通りです。1つ目と2つ目のコードは、funcの定義がないので、意図したコードにはなっていません。以下、生成されたコード一覧です。
生成されたコード | コメント |
df['new_column'] = df.apply(func, axis=1) | funcの定義がない |
df['func_result'] = df.apply(func, axis=1) | funcの定義がない |
def func(x): return x ** 2 | 指示通り。funcの内容は指示していないので適当に作成されている |
def func(x): | 指示通り。funcの内容は指示していないので適当に作成されている |
サジェスト機能を試す(オートコンプリート機能)
入力を途中まですると、その続きをサジェストする機能もあります(インライン補完機能)。下のキャプチャは、
def gcd(a,b):
まで書いたところで自動で表示された画面です。gcd(a,b)は最大公約数を求める関数のつもりだったので、生成されたコードは正確です。
また、再度入力すると、再帰によるコードが生成されました。こちらも正しいコードです。コードは変化するようです。
個人的には、このサジェスト機能が生成AIを使ったコーディング補助の一番のメリットだと思っています。これがあるかないかで、コーディングの効率が全然違います。Colabでも使えるのはかなり嬉しいです。
ちなみに、コメントを書いても反応するか試してみました。以前(2023年)は、コメントでコードは生成されていませんでしたが、コメントからコードを生成することができるようです。着実に便利になっています。
注意点としては、生成AIを使ったコーディングアシストでは、「生成されたコードに間違いがあるかもしれない」ということを常に意識すべきです。コードは自動生成してくれますが、コード自体の確認は毎回行った方が良いです(これは、どの生成AIを使っても同じです)
おまけ(AtCoderの問題を解いてみる)
AtCoderのAtCoder Beginners Contest 323のA問題を解かせてみました。
問題文
0 と 1 からなる長さ 16 の文字列 S が与えられます。
2 以上 16 以下のすべての偶数 i について S の i 文字目が 0 ならば Yes を、 そうでないならば No を出力してください。
制約
S は 0 と 1 からなる長さ 16 の文字列
問題文をそのまま投げて出力された結果がこちら
2024/9月に記事を更新しました。その時に同じ問題を投げてみましたが、結果は全く同じでした。
なんか、いろいろ間違ってます。残念ながら、この問題に正解することはできませんでした。
- rangeがおかしい
range(2,17,2)だと、2,4,6,8,10,12,14,16と配列外参照が発生する(入力は16文字だからS[0]〜S[15]まで)。また、0-indexなので、偶数iは、1,3,5,7,9,11,13,15になる - Yes, Noがたくさん表示される
0を見つける度にYesを、それ以外ではNoが表示される。表示してもループする(ストップしない)ので、繰り返しYes, Noが表示される
rangeをlen(S)
ではなく直接数値で書いているのを見て、制約をちゃんと理解していることに結構驚きました。ただ、コードが間違っているのが残念ですが。
S = input()
for i in range(2, 17, 2):
if S[i] == '0':
print('Yes')
else:
print('No')
ちなみに、正解は例えばこんな感じです(上のコードを手で修正しました)。
S = input()
for i in range(1, 16, 2):
if S[i] == '1':
print('No')
exit(0)
print('Yes')
まぁ、生成AIのアシストが強いのは、「定型的な処理」なので、この手は間違ってもしょうがないとは思いますが。
まとめ
Google ColabのColab AI機能を試した結果について記事にしました。とりあえず、サジェストはGithub Copilotで重宝しましていたサジェスト機能がついたのが嬉しいです。
この機能があれば、コードの確認の必要はありますが、記述量が一気に減るので開発効率アップ間違いなしだとおもいます。