A cartoon person holding hands with a robot both with multiple speech bubbles

GitHub Copilot がデータを処理する方法

Ryan Salva
Ryan Salva // VP of Product // GitHub

GitHub Copilot の導入を検討するとき、GitHub Copilot がどのようなデータを収集し、そのデータがどのように使用、転送、保存されるのか、またそのデータのライフサイクルがどのように管理されるのか、疑問に思うかもしれません。このガイドでは、GitHub Copilot のデータ パイプラインについて説明し、可能な限り正確なコードの提案と応答を提供するために使用されているデータの安全性がどのように保たれているのかを説明します。


このガイドでは、GitHub Copilot で次のことを行う仕組みを紹介します。

  • コンテキストを収集してプロンプト、コード提案、回答を改善する

  • リクエスト中にデータを利用および破棄する

  • バグ、脆弱性、不正利用から保護する

  • パブリック コードに一致するコード提案をフィルタリングする


コード エディタ、コマンド ライン、GitHub.com など、どこで GitHub Copilot を利用する場合でも、データ パイプラインはユーザー入力、インプット強化とプロンプト生成のツール、その中核となる大規模言語モデル (LLM) といういくつかの異なる要素で構成されます。 

大まかに言えば、GitHub Copilot ではインプットとコンテキストを収集し、それらの要素を基にプロンプトを構築して、LLM に送信します。その後、LLM が回答またはコード提案を生成してユーザーに返します。

Diagram showing how the code editor connects to a proxy which connects to GitHub Copilot

コード エディタがプロキシに接続され、プロキシが GitHub Copilot LLM に接続される仕組みを示す図

1. GitHub Copilot がコンテキストを収集してプロンプトを構築

人間と同様に、LLM はコンテキストが多いほど適切な回答を提示します。GitHub Copilot でコンテキストを収集するプロセスは、GitHub Copilot を利用している場所を問わずエンドユーザーが開始します。GitHub Copilot では、プロジェクト内の編集中のファイルや隣接または関連するファイルのコンテンツ、リポジトリ URL、ファイル パスなど、関連するコンテキストを特定するためのさまざまな要素を収集します。GitHub Copilot Chat では、ハイライトされたコードや、過去の質問と回答もコンテキストに含めることができます。コンテキスト除外設定を更新すれば、GitHub Copilot で特定のコンテンツをコード補完用のコンテキストとして使用しないようにすることができます。GitHub Copilot でのコードと顧客データの処理方法に関する詳細については、GitHub Copilot Trust Center をご覧ください。 

GitHub Copilot でコンテキストを収集して利用する仕組みを理解しておくと、開発者が最適な回答を得られるようになります。たとえば、開発者がコード エディタでビジネス ロジックが記載されたファイルを開いている場合は、そのビジネス ロジックの動作が記載されたユニット テストを含むファイルも開く必要があります。GitHub Copilot はそのコンテキストを追加してプロンプトを構築します。

2. プロンプトに有害表現、関連性、ハッキングの試行に対するテストを実施

プロンプトが構築されると、GitHub が所有する Microsoft Azure テナントでホストされるプロキシ サーバーに安全に送信されます。トラフィックは容量に応じたリージョンに転送されるため、トラフィックが 1 つのリージョンに留まることは保証できません。プロキシでは、まずヘイト スピーチ、性的コンテンツ、暴力、自傷行為の兆候といった有害表現と、関連性についてのテストを実施します。弊社では、GitHub Copilot をモデルの悪用や下品な表現、コードやソフトウェア開発とは無関係の質問に対応させたくないと考えています。同時に、コードの動作や提案の生成方法に関する情報を公開するようモデルを誘導する試みを検出してブロックすることにより、プロンプトのハッキングから保護しています。

全てのテストに合格すると、プロンプトが大規模言語モデルに送信されます。

3. モデルが回答を生成 

プロキシ サーバーや GitHub Copilot API と同様に、GitHub Copilot LLM は GitHub が所有する Azure テナントでホストされます。これらの LLM は、OpenAI によって作成された AI モデルで構成されています。AI モデルは自然言語テキストと一般提供されているソースのソース コード (GitHub のパブリック リポジトリのコードなど) を学習しています。

この時点でのデータの処理方法は、いくつかの設定オプションと、利用している具体的な GitHub Copilot 機能によって異なります。 

  • コード エディタ内の GitHub Copilot では、基本的な LLM のトレーニングのためにプロンプト (コードや、提案を提供することを目的に使用されるその他のコンテキストなど) が保持されることはありません。プロンプトは、提案が返された時点で破棄されます。GitHub Copilot Individual サブクスライバーはプロンプトの GitHub への共有をオプトアウトできます。オプトアウトしない場合、プロンプトは GitHub の基本モデルを調整するために使用されます。 

  • コード エディタ外の GitHub Copilot (CLI、Mobile、GitHub.com の GitHub Copilot Chat など) ではプロンプト、提案、回答が保持されるため、会話履歴が保持され、ページ ナビゲーション イベントやブラウザー セッションが継続します。ただし、GitHub の基本モデルのトレーニングのためにプロンプト、提案、回答が保持されることはありません。 

安全で責任あるデータ処理方法の詳細については、GitHub Copilot Trust Centerをご覧ください。

4. コード品質、特定の一意の識別子、パブリック コードとの一致について GitHub Copilot の回答をテスト

モデルによって生成された各回答は、後処理のためにプロキシ サーバーを通過します。ここで、プロンプトと同様に有害表現と関連性のチェックを行います。それ以外にも 3 つのチェック項目を通過する必要があります。

  • コード品質: コード提案に明らかなバグや、クロスサイト スクリプティングや SQL インジェクションのような一般的なセキュリティの脆弱性がないかどうかをテストします。 

  • 一意の識別子: メール アドレス、GitHub URL、IP アドレス、ハードコードされた認証情報など、特定の一意の識別子を含む回答を排除します。

  • パブリック コードに一致する提案 (設定に応じて任意): コード提案は常にモデルが合成するもので、リポジトリからコピーして貼り付けることはありませんが、パブリック コードに一致する回答をモデルが偶発的に合成することがないように対策を行っています。オプションとして、管理者は GitHub.com のパブリック コードに一致し、150 文字を超える全てのコード提案をブロックするフィルターを有効にすることができます。この仕組みの詳細については続きをご覧ください。 

回答が有害表現、関連性、コード品質、一意の識別子、パブリック コードに一致する提案のいずれかのフィルターを通過しない場合は、排除されるか、完全に破棄されます。5 つのテスト全てを通過した回答がユーザーに返されます。 

GitHub Copilot で一致するコードを特定する仕組み

先へ進む前に、パブリック コード フィルターについてもう少し詳しく説明します。

GitHub の調査では、GitHub Copilot の提案の約 1% がパブリック コードと一致することが分かっています。注意すべきなのは、これらの一致が全ての提案全体で均等に分散しているものではないということです。一致が特に多くみられるのは、開発者が新しいプロジェクトやファイルを開始したときなど、GitHub Copilot でコンテキストが不足している場合です。既存のアプリケーション コードがコンテキストを提供する場合、一致はほぼみられません。 

コンテキストにかかわらず、パブリック コード フィルターは全ての空白 (タブ、スペースなど) を除外し、150 文字を超える提案を GitHub.com の全てのパブリック データのインデックスと比較して、コードの一致を特定します。フィルターが有効になっている場合、開発者はパブリック コーパスに一致がない一意の提案のみを受け取ります。一致がある場合は GitHub Copilot がその提案を破棄し、キューの次のコードに進みます。 

5. GitHub Copilot がユーザーに回答またはコード提案を返す

最後に、回答またはコード提案がユーザーに返されます。提案がコード エディタに返される場合、モデルは複数の提案を生成し、開発者は受け入れる提案と却下する提案を選択できます。一部の統合開発者環境 (VS Code、Visual Studio、JetBrains IDE など) では、開発者は単語単位で一部の提案を受け入れることも選択できます。提案を受け入れると、そのコードを編集できます。 

その後、このプロセスをもう一度開始します。


GitHub Copilot では、明確に定義されたタスクでの開発生産性が最大 55% 向上することが示されています。ただし、速度向上が全てではありません。開発者を対象に調査を行って開発工程の下流での影響を調べると、GitHub Copilot の影響をより明確に把握できます。

次の内容: GitHub Copilot の影響を測定する

GitHub Copilot の使用を開始する