GitHubは、ソフトウェア開発者が生成AIを効果的に利用するためのベストプラクティスを同社が提供するコーディングアシスタントツールである「GitHub Copilot」をテーマに解説した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
GitHubは2023年6月21日(米国時間)、同社の公式ブログで、ソフトウェア開発者が生成AI(人工知能)を効果的に利用するためのベストプラクティスを、「GitHub Copilot」をテーマに解説した。
GitHubは、GitHub CopilotのようなAIを搭載したコーディングアシスタントが、コードベースの文書化から単体テストの生成まで、開発者のワークフローを加速し、開発者が日々のコーディング作業に取り組む方法を変えつつあると述べている。
だが、ソフトウェア開発者が望む出力をコーディングアシスタントが生成しない場面もあるとして、以下の3つを解説した。
生成AIを用いたコーディングアシスタントツールの文脈では、プロンプトおよびプロンプトエンジニアリングは、開発者に尋ねるのか、ツールを構築し微調整している機械学習研究者に尋ねるのかで異なる意味を持つことがある。
プロンプト | プロンプトエンジニアリング | |
---|---|---|
開発者 | コーディングアシスタントから特定の提案を生成させるためのコードブロック、個々のコード行、または開発者が書いた自然言語コメント | 具体的なコーディング案を生成するためのIDE(統合開発環境)上の指示やコメントの提供 |
機械学習研究者 | アルゴリズムによって継続的に生成され、生成AIコーディングツールのモデルに送信される、IDEのコードと関連するコンテキスト(IDEのコメント、オープンファイルのコードなど) | 大規模言語モデルのプロンプト(IDEコードとコンテキストのコンパイル)を生成するアルゴリズムの作成 |
開発者と機械学習研究家による「プロンプト」と「プロンプトエンジニアリング」の解釈の違い |
これは、空のコードベースや空のファイルという状況の場合に特に役立つ。何を作りたいのか、何を達成したいのかが全く分からない場合、AIプログラマーのために目標を設定するのはとても有効だという。
GitHub Copilotに指示する際は、誰かと会話するようなイメージで進めるとよいとした。
例えば、Next.jsでマークダウンエディタを作るときに、次のようなコメントを書くとする。
/* Create a basic markdown editor in Next.js with the following features: - Use react hooks - Create state for markdown with default text "type markdown here" - A text area where users can write markdown - Show a live preview of the markdown text as I type - Support for basic markdown syntax like headers, bold, italics - Use React markdown npm package - The markdown text and resulting HTML should be saved in the component's state and updated in real time */
すると、GitHub Copilot が次のようなコードを生成し、シンプルなマークダウンエディタが30秒以内に完成する。そして、残りの時間でコンポーネントのスタイルを整えることもできる。
生成AIに主な目標を伝えたら、目標を達成するために必要なロジックと手順を明確に記述する。GitHub Copilotの場合、物事を分解することで、利用者の目標を理解しやすくなる(レシピを書くように、個別のステップに分解する)
GitHubは、GitHub Copilotを利用する場合、一度に大量のコードを生成させるのではなく、ステップごとにコードを生成させるべきとした。
例から学ぶことは人間だけでなく、AIにとっても有用だ。AIに対して例を1つか2つだけでも入力すれば、望んでいる結果を手にできる。
GitHubは、会話が科学というより芸術であるように、プロンプトもまた芸術とした上で、もし1回で思い通りのプロンプトが返ってこなかった場合は、上記のベストプラクティスに従ってプロンプトを作り直すべきとした。
GitHub Copilotの場合、目標についてどの詳細を含めるべきかを最初から知るのは容易ではない。関数に何をさせたいかを概説したり、プロンプトの境界を設定したり、または、コメントを言い換えることで関数をより明確にすると、求める結果が得られる場合がある。
GitHub Copilotは隣接タブと呼ばれるテクニックを使い、作業中の単一のファイルだけでなく、IDEで開いているすべてのファイルを処理することで、AIアシスタントがコードを文脈化できるようにしている。ただし、GitHub Copilotが開いているすべてのファイルをコードに必要なコンテキストとみなすことは保証されていない。
GitHub Copilotがコードの文脈を理解しやすくするために開いておくべきタブの正確な数は決まっていないが、1つか2つのファイルやドキュメントタブを開いておくと便利とした。
GitHub Copilotにスネークケースを利用するauthenticate_user関数を入力として与えた場合、以下のような関数に関連するコードの提案を生成したという。
def authenticate_user(username, password): # Code for authenticating the user if is_valid_user(username, password): generate_session_token(username) return True else: return False
これを踏まえGitHubは、分かりやすい関数名や変数名を使用しつつ、一貫したコーディングスタイルとパターンに従うべきとした。
Copyright © ITmedia, Inc. All Rights Reserved.