プログラミング
記事内に商品プロモーションを含む場合があります

Google Colabに追加された生成AI機能(Colab AI)を試してみた

tadanori

いつの間にかCoogle Colabにも生成AIによる支援機能が追加されました。この記事では、Colabに追加されたColab AIについて紹介します。

VSCodeなどの開発環境で使えるコード支援AI「Codeium」についてはこちらの記事を参考にしてください。

Codeium|VSCodeで使える無料のコード生成AIを試す
Codeium|VSCodeで使える無料のコード生成AIを試す

Google Colabに生成AI機能が追加

いつの間にかGoogle Colabに生成AIの機能が追加されていました。とりあえず触ってみたので、どのような事ができるかを書きたいと思います。

追記:
 2023/10月時点では、無料のColabユーザーは使えませんでしたが、2024/2月時点では、無料のColabユーザでも使えました。

無料ユーザーは、仕様がたまに変化しているようです。2024/03/06に試した結果では、インライン補完(サジェスト)機能だけ動きませんでした。

追加方法

Colabの「ツール」→「設定」を選択すると、Colab AIの機能に関する項目が追加されています。「生成AI機能の使用に同意している」をチェックすると使えるようになります。とりあえず、説明を読んで同意します。

Google Colabの無料ユーザの場合、以下の画面が表示されます。制限付きで一時的に利用できるということです。

Colab AIを設定する画面(無料)

Colab Pro, Pro+に加入している場合には以下のような画面になります。

Colab AIを設定する画面

これで生成AI機能をつかえるようになります。

Colab AIを使ってみる

Colab AIのチャットボットを試す

とりあえず、右上に追加されたタブから触ってみます。

ColabAIのボタン

すると右側にColab AIとの対話用の画面が表示されます。

Colab AIとの対話画面

ここで、「Pandasのデータフレームに新たな列を追加したい」などの質問を書くとその質問に対する回答が表示されます。

質問の答え

ここで、表示されているコードの横のボタンをクリックすると、コードがコードブロックに追加されます。

コードブロックに追加

Colab AIのタブの機能は、Chat-GPTやBardなどと似た感です。違いは、直接コードブロックにコピーできる点くらいでしょうか。

コードブロックのAIでの生成を試す

コードブロックにも「コーディングを開始するか、AIで生成します」と生成がクリックできるようになっています。

コードブロックのAIで生成

ここで、AIで生成をクリックすると以下のような画面になります。

質問入力が追加されたコードブロック

とりあえず、「関数funcの定義し、既存のデータフレームdfに、関数funcの結果を追加」するコードを生成させてみました。

指示を追加した画面

この質問に対しては「1 of 4」と、4つの生成コードが提案されました。

生成された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

df['x_squared'] = df['x'].apply(func)
指示通り。funcの内容は指示していないので適当に作成されている
def func(x):
  return x + 1

df['new_column'] = df['column'].apply(func)
指示通り。funcの内容は指示していないので適当に作成されている

今回の場合、生成されたコードの4つのうち2つは指示どおりに作成されていました。

サジェスト機能を試す(オートコンプリート機能)

入力を途中まですると、その続きをサジェストする機能もあります(インライン補完機能)。下のキャプチャは、

def gcd(a,b):

まで書いたところで自動で表示された画面です。gcd(a,b)は最大公約数を求める関数のつもりだったので、生成されたコードは正確です。

サジェスト機能1

また、再度入力すると、再帰によるコードが生成されました。こちらも正しいコードです。コードは変化するようです。

サジェスト機能2

このサジェスト機能はGithub Copilotでもお気に入りの機能だったので、これがColabで使えるのは大きいと感じます。

ちなみに、コメントを書いても反応するか試してみました。何度かトライしてみましたが、コメントだけだとサジェストは現れませんでした。

コメントの後に続けてdefまで書いたところでコードが生成されました。関数名がlcm(least common multipleの略)になっているのでコメントの内容は解釈されてコード生成が行われたようです。

ただ、生成されたコードは最小公倍数を求めるコードになっておらず誤ったコードでした。また、戻り値もありません(コメントが「求める関数」であって「返す関数」ではないからだと思われます。ここは指示の問題かもしれません)。この手の定型な関数は、ミスなく実装してほしいです。そのうちちゃんとできるようになることに期待です。

また、何度か同じ操作を試すと(defを入力し直すと)、正しいコードが生成されることもありましたので、毎回間違うわけではなさそうです。

生成AIをつかったコーディングでは、生成されたコードに間違いがあるかもしれないということを意識して、自身でコードを確認する必要があると思います(ここは、Github Copilotも同じですね)

おまけ(AtCoderの問題を解いてみる)

AtCoderのAtCoder Beginners Contest 323のA問題を解かせてみました。

問題文
0 と 1 からなる長さ 16 の文字列 S が与えられます。

2 以上 16 以下のすべての偶数 i について S の i 文字目が 0 ならば Yes を、 そうでないならば No を出力してください。

制約
S は 0 と 1 からなる長さ 16 の文字列

問題文をそのまま投げて出力された結果がこちら

なんか、いろいろ間違ってます。残念ながら、この問題に正解することはできませんでした。

  • 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で重宝しましていたサジェスト機能がついたのが嬉しいです。

この機能があれば、コードの確認の必要はありますが、記述量が一気に減るので開発効率アップ間違いなしだとおもいます。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました