ソフトウェア

プログラミングでAIアシスタントをより信頼できるパートナーに変えるプロンプトエンジニアリングの基礎


ChatGPTやClaude、GeminiなどのAIチャットボットは、ソフトウェアのプログラムを書くコーディング能力が日に日に進化しており、人間が自然言語で指示を出してAIにコードを書かせる「バイブコーディング」も普及しつつあります。ただし、AIが何でも勝手にやってくれるわけではなく、人間がいかにAIに正しく指示(プロンプト)を入力できるかどうかで、出力されるコードの品質も大きく異なります。Aiが望ましい出力を生成できるようにプロンプトを工夫するプロンプトエンジニアリングの基礎について、Googleのエンジニアリングリーダーであるアディ・オスマーニ氏が自身のブログで解説しています。

The Prompt Engineering Playbook for Programmers
https://addyo.substack.com/p/the-prompt-engineering-playbook-for

まず、オスマーニ氏は効果的なコードプロンプトの基礎を語る上で、以下の7つの原則を挙げています。

・豊富なコンテキストを提供する
・目標や質問を具体的にする
・複雑なタスクを分割する
・入力/出力の例や期待される動作を含める
・対話を反復し洗練させる
・コードの明確性と一貫性を維持する
・役割やペルソナを活用する


コーディングでAIを活用する状況はさまざまですが、いずれにしてもこの7つの原則は常に念頭に置くことが重要です。

◆バグの発見と修正
バグの発見と修正を行う上でAIに体系的に支援を求める方法としては、「何が間違っていて、コードが何をすべきかを記述し、常に正確なエラーメッセージや不正な動作を含めることが重要」とオスマーニ氏は述べています。明確なエラーメッセージが表示されず出力が間違っている場合など、難解なバグに対しては、「この関数を行ごとに実行し、各ステップでの変数の値を追跡してください。正しく蓄積されていません。ロジックはどこで間違っていますか?」というように、AIにコードの実行を順を追って説明するように促すことが有効です。

また、実際のコードベースが大きい場合でも、バグが小さなスニペットで実証できる場合は、そのコードを抽出または簡略化してAIに提供します。そして、「この問題の原因は何で、どうすれば修正できますか?」のように、必要なことを直接尋ねることが効果的。AIの最初の回答が不明確であったり、部分的にしか役に立たなかったりする場合は、ためらわずにフォローアップの質問を行います。

とにかくAIアシスタントを使ったデバッグでは、コードの詳細と指示が不可欠。「このコードが動きません。助けてください」ではなく、「この関数はこういうもので、こういう目的のために導入していますが、✕✕✕という状況では○○○というエラーが発生します」というように、状況と症状を提示し、的確に質問をしなければなりません。


◆コードのリファクタリングと最適化
そして、コードのリファクタリングと最適化をAIに行ってもらうためには、プロンプトでリファクタリングの目標を明示的に述べ、必須なコードコンテキストを提供することが重要だとオスマーニ氏は述べています。単に「このコードをリファクタリングして」と言うのではなく、可読性の向上、複雑さの軽減、パフォーマンスの最適化など、具体的な目標を伝える必要があるというわけです。リファクタリングしたい関数やセクション、そして関連する周囲のコンテキストを含めることも大事で、言語やフレームワークにも言及するべき。

また、AIのリファクタリングから学び、その正確性を検証するためには、変更点の説明を求めることも有効だとのこと。この際に重要なのが、上記の原則に挙げられている「役割やペルソナを活用する」です。オスマーニ氏によると、プロンプトでAIにコードレビュアーやシニアエンジニアの役割を演じるよう指示することで、その後の回答の内容がより洞察に満ちたものになることがあるそうです。


◆新機能を実装する
まず、構築したいものを平易な言葉で概説し、必要であれば小さなタスクに分割した後、各タスクに対して焦点を絞ったプロンプトで取り組みます。また、既存プロジェクトに機能を追加する場合、関連するコンテキストや参照コードを提供し、類似の機能がプロジェクト内でどのように実装されているかを示すと非常に役立ちます。プロジェクトのコーディングスタイルやアーキテクチャに言及するべき。

もちろん、「JavaScriptで数値を受け取り、USD形式の文字列を返す関数 formatPrice(amount) を実装してください。例:formatPrice(2.5)は'\$2.50'を返します」というように期待される入力/出力や使用例を提供することも重要。結果が望むものでない場合、より詳細な情報や制約を加えてプロンプトを明確なものに書き直す必要もあります。


そして、統合開発環境(IDE)でCopilotなどのツールを使用する際、コメントやTODOをインラインプロンプトとして使用し、AIに補完させることが効果的なワークフローだとオスマーニ氏は述べています。

◆よくあるダメなプロンプトのパターン
オスマーニ氏は、質の低い応答をAIにさせてしまうようなダメなプロンプトのよくあるパターンもまとめています。

・「動きません、直してください」など、具体的な情報が何もない。
・一度に多くのことをAIに要求し過ぎる。
・大量の情報を提示するだけして、肝心の質問がない。
・「この関数を速くしてください」というような、何をもって成功とするのかの定義が定量化されていない。
・AIからの明確化の要求やこれまでの出力した内容を無視している。
・指示のスタイルやフォーマットが一貫していない。
・「さっきの出力」「あの関数」など、参照が明確ではない言葉を使う。


最後に、オスマーニ氏は「プロンプトを書き直すための戦術的アプローチ」として、AIが異なる問題を解決しようとしていたか、エラーを生成したか、あるいはフィットしない解決策を提示したかなど、具体的な不一致点を特定するべきだと述べています。

また、「解決策はJavaScriptではなくTypeScriptであるべきです。型注釈を含めてください」といった形で、欠けていた要件や誤解された点を明確に伝え、新しいプロンプトで要件の追加を強調することが重要だとのこと。AIが複雑な要求で繰り返し失敗する場合は要求を細分化して質問を重ね、状況を明確にすることも有効です。それでも行き詰まった場合は、それまでのチャット履歴をクリアして、一からプロンプトを入力し直すこともありだとオスマーニ氏は語りました。

この記事のタイトルとURLをコピーする

・関連記事
AIコーディングアシスタントがコードを書くのを拒否しプログラミングを学ぶようユーザーにアドバイス - GIGAZINE

AIを操る「プロンプトエンジニア」がAIによって駆逐されつつある - GIGAZINE

自分自身のコードを書き換えてどんどん賢くなるAI「ダーウィン・ゲーデルマシン」とは? - GIGAZINE

イーロン・マスクの人工知能企業xAIがプロンプトエンジニアリング用統合開発環境「PromptIDE」を発表 - GIGAZINE

破産したAI企業が提供していたコーディングAIが実は700人のエンジニアによる人力サービスだったと判明 - GIGAZINE

in ソフトウェア, Posted by log1i_yk

You can read the machine translated English article The Basics of Prompt Engineering: Turnin….