GitHub Copilot ユーザー プロンプト プロセス フロー

完了

このユニットでは、GitHub Copilot がプロンプトをスマートで使いやすいコードに変える方法について説明します。 基本的に、GitHub Copilot はそのデータ フローの中でプロンプトを受け取ってコード提案または応答を返します。 このプロセスには、インバウンドとアウトバウンドのフローがあると考えられます。

インバウンド フロー:

GitHub Copilot インバウンド フローのイラスト。

Copilot がユーザーのプロンプトを処理してコード提案を生成するために実行するすべての手順を見てみましょう。

1. 安全なプロンプト送信とコンテキスト収集

このプロセスは、HTTPS 経由でのユーザー プロンプトの安全な送信から始まります。 これにより、自然言語コメントが GitHub Copilot のサーバーに安全かつ機密性の高い方法で送信され、機密情報が保護されます。

GitHub Copilot は、ユーザー プロンプトを安全に受け取ります。これは、コード内で提供される Copilot チャットや自然言語のコメントである可能性があります。

同時に、Copilot は次のコンテキストの詳細を収集します。

  • カーソル位置の前後のコード。これはプロンプトの直近のコンテキストを理解するのに役立ちます。
  • 編集するファイルのファイル名と種類。これにより、特定のファイルの種類に合わせてコード提案を調整できます。
  • 隣接する開いているタブに関する情報。生成されたコードが同じプロジェクト内の他のコード セグメントと確実に一致するようにします。
  • プロジェクト構造とファイル パスに関する情報
  • プログラミング言語とフレームワークに関する情報
  • Fill-in-the-Middle (FIM) 手法を使用する前処理。これで先行と後続両方のコード コンテキストが考慮されるようになるため、実質的にモデルの理解が拡大し、したがって Copilot はより広範なコンテキストを利用して、より正確で関連性の高いコード提案を生成できます。

これらのステップで、ユーザーの概要レベルの要求が具体的なコーディング タスクに変換されます。

2. プロキシ フィルター

コンテキストが収集されてプロンプトが構築されると、プロンプトは GitHub 所有の Microsoft Azure テナントでホストされているプロキシ サーバーに安全に渡されます。 このプロキシでトラフィックがフィルター処理されるので、プロンプトのハッキングや、モデルがコード提案を生成する方法の詳細を明らかにするようにシステムを操作するという試みは阻止されます。

3. 有害性フィルタリング

Copilot には、意図の抽出とコード生成に進む前にコンテンツ フィルタリング メカニズムが組み込まれており、生成されたコードと応答に次のものが含まれたりレベル上げされたりしないようにします。

  • ヘイト スピーチと不適切なコンテンツ:Copilot には、ヘイト スピーチや不快感を与える言葉など、有害または不快感を与える可能性のある不適切なコンテンツの取り込みを検出して防止するためのアルゴリズムが採用されています。
  • 個人データ:Copilot は、ユーザーのプライバシーとデータのセキュリティを保護するために、名前、住所、ID 番号などの個人データを積極的に除外します。

4. LLM によるコード生成

最後に、フィルター処理されて分析されたプロンプトが LLM モデルに渡され、このモデルによって適切なコード提案が生成されます。 この提案は、プロンプトとその周囲のコンテキストに対する Copilot の理解に基づいているため、生成されるコードは確実に関連性が高く、実用的で、プロジェクト固有の要件に沿ったものとなります。

アウトバウンド フロー:

GitHub Copilot アウトバウンド フローのイラスト。

5. 後処理と応答の検証

モデルによって応答が生成された後に、有害または不快感を与える生成済みコンテンツがある場合は有害性フィルターによってそのコンテンツが削除されます。 その後で、プロキシ サーバーによって最終チェックが行われ、これでコードの品質、セキュリティ、および倫理観が確実になります。 これらのチェックは次のとおりです。

  • コードの品質:応答に一般的なバグや脆弱性、たとえばクロスサイト スクリプティング (XSS) や SQL インジェクションがないかどうかを調べます。これで、生成されたコードが堅牢で安全であることが保証されます。
  • 一般公開されているコードとの一致 (省略可能):管理者は、Copilot からの 150 文字を超える提案が GitHub で一般公開されている既存のコードによく似ている場合にその提案を返さないようにするフィルターを、必要に応じて有効にすることができます。 これを使用すると、偶然の一致がオリジナルのコンテンツとして提案されるのを防ぐことができます。 応答の中に、このチェックに不合格となる部分がある場合は、その部分が切り詰められるか破棄されます。

6.提案の提示とフィードバック ループの開始

すべてのフィルターを通過した応答のみがユーザーに提示されます。 続いて、次のことを実現するための Copilot のフィードバック ループがユーザーのアクションに基づいて開始します。

  • 受け入れられた提案から知識を増やします。
  • 提案の変更と拒否を通じて学習し、改善します。

7.後続のプロンプトに対して繰り返す

このプロセスは、さらにプロンプトを提供するたびに繰り返され、Copilot はユーザー要求を継続的に処理し、その意図を理解し、応答してコードを生成します。 Copilot は、時間の経過とともに、コンテキストの詳細を含む累積フィードバックと対話データを適用して、ユーザーの意図に対する理解を深め、コード生成機能を改善します。