見出し画像

AI(ChatGPT)を使ってシステム開発するコツ

最近、AI(ChatGPT)を使って、小規模なWebアプリを開発してみたので、作りながら感じたことを言語化しておきたく、noteを書いてみます。


※GPTを組み込んだシステムの開発ではなく、ChatGPTと相談しながら開発するお話です。

何を作ったか

AIで生成した大量の画像を仕分けるため、Googleドライブ上に保存してある画像を確認したり削除したりしたかったのですが、下のようにGoogleドライブは1枚ずつ読み込みが発生して使いづらく。

Googleドライブの画面。全体的にモッサリ

そこで、無料のGoogle Apps Scriptで、Googleドライブ上の画像を一覧表示・ダウンロード・削除できるWebアプリを作りました。前回記事

最初に全部読み込んでしまい、一気に確認できる

主な仕様は以下の通り。

画像一覧
・指定したフォルダ配下の画像を全て表示する
・「Update」を押すと、非同期で最新状態に更新する
・ファイル名のリンクを押すとダウンロードする
・画像を押すと、画像ダイアログを表示する
・フォルダやファイルのソート順は、最終更新日時の降順

サイドバー
・画像が存在するフォルダの一覧を表示する
・「削除」を押すと、チェック済みフォルダを削除する
・フォルダ名のリンクを押すと、画像一覧を対象位置にスクロールする

ダイアログ(画像クリック時)
・矢印キー(←→)や矢印リンクを押すと、画像を切り替える
・Enterキーを押すと、画像をダウンロードする

どのように作ったか

Googleドライブと親和性が高そうな、無料で使えるGoogle Apps Script(GAS)を利用しました。

最初にざっくり自分で仕様を考えて、ChatGPTにコードを書いてもらい、確認と修正を繰り返す形で最後まで作成。結果的に、ほぼ全てのコードをChatGPTに書いてもらいました。

作成したコードは、HTMLとスクリプト(gs)ファイルの2つ。自分はHTMLは基本的な知識はありますが、GASは全然詳しくないので、全面的にChatGPTに任せる形になりました。

なお、AIによるコード生成としてはMicrosoftのCopilotも有名ですが、今回はChatGPTに絞った内容です。


体験してわかった、AIによる開発のコツ

AIと開発して感じたコツは、大きく3点。

コツ1.「大きくて複雑なもの」ではなく「小さくてシンプルなもの」を積み上げる

まず、AIは基本的なコードはスラスラと書いてくれます。例えば、「Googleドライブからの画像ファイル情報の取得」だとか、「ファイルのソート」のようなシンプルな機能です。

ドキュメントやサンプルコードを調べなくて済むので、めちゃめちゃ楽でした。そういう調査してる時間って、あまりワクワクしないですし。

画像の取得・判別・表示のコードが一瞬でわかった

もちろん複雑なコードも、指示すれば書いてはくれます。でも、「大きくて複雑なもの」は、AIはまだ苦手なように感じました。

まず、仕様をたくさん伝えても、部分的にしか作ってくれなかったり、そもそも全部作るのを諦めたりします。

諦めが早い

また、細かく指示した内容については修正できても、「指示に含まれない内容」や、「指示の中で重要度が低そうな内容」は、誤っていたり、整合性が取れていない状態によくなります。

特に、影響範囲が広く複雑な修正の場合は、それが顕著になります。修正を依頼しても、堂々巡りに陥ることも。

下手な使い方をすると、AIの間違いに振り回されることに

AIとの会話で「段階的に出力させる」が効果的なことは有名です。これは逆に言うと、人間の会話で重要視される「結論を先に伝える」という伝え方を、AIは得意としていないということ。

人間は、頭の中でロジックを組み立ててから回答します。対してAIは、これまでの会話内容からの推論結果を出力するため、結果を先に出力しても、その根拠となるロジックを組み立てられていません。

だから、複雑な課題になると、根拠の弱い結論が出てきます。そこから理由を聞いても後付けされるだけで、納得できる説明がなかったり。

そこで、例えば「実装(解決)してください」ではなく、「修正確認)すべき箇所を洗い出してください」のように始めることで、確実に前進できるようになります。

1歩ずつ着実に進めていく

ChatGPTでは、会話全体に対して指示を設定できる「Custom instructions」という機能があるので、下のような設定をするのも良いかもしれません。

結論に至るまでのロジックを段階的に説明してから、結論を出力してください

つまりAIと開発するときは、「大きくて複雑なもの」ではなく「小さくてシンプルなもの」を積み上げることを意識した方がよい。小さく作り、細かくフィードバックを繰り返す、アジャイルなイメージです。

段階的な整理は、人がAIの出力内容を理解するためにも有効です。AIに全てを解決できる能力がない以上、しばらくは人間のフォローが必要であり、それには人が出力内容を理解することが求められます。

もちろんAIの性能は、トークン量や学習方法などの変化によって、大きく改善され、人のフォローは不要になっていきます。でも、この本質的な性質は変わらないはずです。


コツ2.作ってもらうだけでなく、アイデアを出してもらう

「AIが開発してくれる」なんて聞くと、つい、「◯◯するコードを作成してください」とお願いしたくなります。伝えたものを何でもガンガン実装してくれるので、「AIを活用しているなぁ」という気分になります。

ド派手になるようにお願いすれば、
一瞬でド派手にしてくれる!

ただ、どんな目的にも、様々な実現手法がありますし、何を実現するのにも、様々な実装方法があるものです。

「作成してください」という指示だけの場合、AIが勝手にそれらを選択して作成しますが、それがベストな選択とは限りません。

そこで、「◯◯できるよう修正してください」ではなく、「◯◯できるようにするには、どんな方法がある?」と聞いてみると、いろいろとアイデアを出してくれます。

思いつかなかったアイデアが出ることも

すると、出てきたアイデアを見て、「じゃあパターン3を実装してみて」といった進め方ができます。AIを効果的に使うには、こうして実装の前段階から使った方が、最終的に良いものができると思いました。

レスポンスを改善したいとき、クリック率を上げたいときなど、ある程度、教科書的にパターン化がされている課題なんかは、特に的確なアイデアを出してくれるはずです。

AIが自然言語で学習している以上、1つ1つの実装を正確に作るよりも、より抽象度の高い内容の方が得意なはずです。細かなコードを書かせるだけではなく、実装パターンや、仕様のアイデア出しから使うべきだと感じました。

AIも所詮は「システム」です。システムが得意な、「パターン出し」や「組み合わせ」といった力を、活用しない手はありません。


コツ3.期待しすぎず、自分で考えてフォローする

AIは、こちらの指示が曖昧でも、ある程度補完して進めてくれます。これは、良い部分でもあり、悪い部分でもあります。

まだ開発内容が固まっていない場合や、考慮不足な点がある場合、AIが補完してくれることで、新しい気づきを得たり、イメージが固まってくることがあります。これは助かります。

細かい例では、下の「全選択」チェックボックスの自動選択/解除の挙動は、自分は何も指定していないのに、勝手に実装してくれたり。

他のチェック状態に応じて、ON/OFFが切り替わる

一方で、目指す姿が決まっている場合は、曖昧な部分をこちらに質問してくれた方が、本来は手戻りなく進められます。だとしても、AIは確認せずに強引にそれっぽい回答を出力しようとします。

下手な使い方をすると、意図しない方向に進んでしまう

また、長めのやり取りをしていると、最初に渡した情報を忘れてしまうことがあります。すると、伝えたはずの前提が考慮されず、勝手に補完された情報によって、変な方向に進んでしまいます。

これらの課題は、プロンプトである程度は制御できますし、トークン量の課題もあるのでそのうち改善されるとは思いますが、現時点では割と致命的な問題だと感じました。

なので、複雑な内容を実現したいときは、可能な範囲で自分で考え、(雑でもいいので)詳細やロジックを説明した方が、早く期待結果に辿り着くことが多かったです。

簡単に実装イメージを伝える

AIとの会話は、期待する回答に向かって、出力される可能性のある空間を絞っていく作業とも言えます。概要や方針を定めた上で、詳細を進める方が、最終的な精度は高まります。

画像生成AIでも、ガチャのようにひたすら生成するより、ControlnetやLoRAなどの機能を使ってサポートした方が望む画像に早く近づくので、似たような話かもしれません。

また、最初の出力がベストだと思わず、AIに再考してもらう機会を与えるのも、フォローの一部と言えるでしょう。意外と改善したりします。

本当は、最初からスマートな方法を提案してほしいけど


AIとの対話で、人間も進化する

ChatGPTは以前からよく使っていますが、今回、こうして開発に使うことで、改めてAIの課題や本質のようなものを強く感じました。

プログラム言語は自然言語と違い、「期待通りに動けば正解」「動かなければ不正解」と基準がハッキリするため、その辺りが目に付きやすくなるのだと思います。

そして、ふわっとした表現になりますが、そんな中でAIのことを、「脳の一部だけを使って会話している人間」のように感じました


知識は膨大なのに、1人では目的地まで辿り着けない。それっぽい感じで話すのは得意なのに、詳細を理解することはできない。そういう存在を、フォローしながら導いていく感覚です。

AIの足りない部分は、自分が補う必要があります。
・情報の不足はないか?
・方向性は合っているか?
・出力する粒度は適切か?
など、AIが活躍できる状態にするために、人が考えなければいけない

それを続けている人と、そうでない人の間には、圧倒的な違いが出てくる。今回の経験で、そう感じました。恐らく「ゴールに辿り着くために必要なことを考える力」が、全然変わってきます。


今は多くの人が、AIが万能であるという印象を持っていそうですが、こうして触っていると、まだかなり人間のフォローが必要なことを実感します。

フォローするのは面倒ですが、AIを使った方が早く結果に辿り着けるので、人はAIを使わざるを得ない。そして誰もが(特に若い世代は)「ゴールに辿り着くために必要なことを考える力」を獲得していくはずです。

いずれ、AIが自動で何でも解決してくれるほどに進化するまでは、この力の価値が高くなる気がしています。

この記事が参加している募集

#AIとやってみた

26,733件

この記事が気に入ったらサポートをしてみませんか?