AIは「指示の穴」を埋めてくれない
大学に入ってから、周りでもAIを使ってコードを書く人が増えました。私も使っています。
ただ、使っているうちに気づいたことがあります。AIは指示に書かれていないことを、勝手に「よくあるパターン」で埋めてくるということです。
例えば、こんな問題があるとします。
標準入力から整数 A B C が1行・空白区切りで与えられます。
3つの中で最も大きい値を1行で出力してください。
これをAIに、こう頼んだとします。
「3つの数の最大値を出すPythonを書いて」
返ってくるのは、だいたいこういうコードです。
num1 = float(input("1つ目の数を入力してください: "))
num2 = float(input("2つ目の数を入力してください: "))
num3 = float(input("3つ目の数を入力してください: "))
print(f"最大値は {max(num1, num2, num3)} です")
動きはします。でも、この問題では落ちます。
・入力が3行に分かれている(問題は1行・空白区切り)
・float になっている(整数のはず)
・案内文と「最大値は」という余計な出力がある
AIが悪いわけではありません。指示に入出力の形が書かれていないので、AIは一番よく見る「チュートリアルのコード」で穴を埋めただけです。
指示を書き直すと、別のコードが返ってくる
同じAIに、こう頼むとどうなるか。
Python 3で、標準入力から整数 A B C が1行・空白区切りで与えられます。
3つの中で最も大きい値を、数値だけ1行で出力してください。
input() に案内文を付けないでください。
「最大値は」などの説明も出力しないでください。
返ってくるのはこれです。
a, b, c = map(int, input().split())
print(max(a, b, c))
同じ「3つの数の最大値」なのに、指示の書き方だけで別物になりました。
指示に入れるべき4つのこと
私の経験では、この4つが入っていれば、簡単な問題ならほぼ通ります。
1.言語(Python 3、JavaScript など)
2.入力の形(何が、何行で、どう区切られるか)
3.出力の形(何を、何行で、余計な文字を出さないか)
4.やってはいけないこと(案内文を出さない、他の要素を触らない など)
「もっといいコードにして」だけだと、AIは仕様がないので問題ごと作り変えてしまいます。
ただ、指示を書けば何でも通るわけではない
例えばとても複雑な問題や複数のアルゴリズムを組み合わせて解く問題などは、プロンプトが良いだけではなく、AIのモデルがいいという条件が必要になります。問題に限らず、コーディングするうえで答えがない問に対するコードであればなおさらプロンプトが良いだけでは不十分です。自分も実際、競技プログラミングで解けなくて解説を見てもわからない問題をAIに聞いてもAIも勘違いに勘違いを重ねてうまくいかなかった経験があります。
つまり、指示が上手くなれば通る問題は確実に増えますが、それでも限界はあります。最終的には、返ってきたコードが正しいかどうかを自分で判断できる必要があります。
もったいないと思ったこと
私は最近SNSで「プロンプト集」のような、このプロンプトを入力するだけで○○ができるようになるという動画や記事をたくさん見ます。それは確かにできるようになってるのかもしれませんが、よくよく考えるとそれはその人の力ではなく、プロンプトが細かく指示されているのを公開されているのをコピペしただけであって、その人自身の能力ではないと思います。他にも、現在大学生や高校生で高校の宿題や問題、わからない問題などをそのまままるまるAIに投げて「答えがうまく帰ってこない」や「このAIは聞きたいことを返してくれないから使えない」などの声を聞きます。それはそのAIが使えないのではなく、プロンプトがあいまいで何を求めているのかをしっかり書いていないのが問題のパターンもあります。そういうのを見ると現代の飛躍的に進化したAIが「宝の持ち腐れ」のように感じます。
練習する場所を作りました
そう思って、AIへの指示を練習するためのサイトを作りました。
CodeDrill
流れは以下の通りです
1.問題を読む
2.自分で考えたり、AIをふんだんに使ってコードを作成し、提出する
3.自分の提出したコード、あるいは自分のAIに指示したプロンプトをもとにAIにアドバイスがもらえます。
正解コードを集めるサイトではありません。指示が前より良くなったかを確かめる場所として作りました。
今は無料で、1日15回までレビューできます。
今回初めて自分でサーバーを立てて1からサイトを作成しました。身近にはこれを1日で作れる人もいますが、自分はAIを使っても1週間かかりました。考えることも多く、セキュリティ、レイアウト、サーバーの規模、DNS設定などなどがあり、とても大変でしたがいい経験でした。
まだ作り始めたばかりなので、使ってみて分かりにくいところがあれば教えてもらえると嬉しいです。
今回例で出した問題も私のサイトで掲載しているので、一度解いてもらえると助かります。
3つの中で最も大きい値