Skip to main content

에이전트에 대한 컨텍스트 전달

Copilot agent를 사용하여 컨텍스트 전달을 사용하는 방법을 알아봅니다.

컨텍스트 전달 정보

GitHub Copilot Extensions은 컨텍스트 전달을 사용하여 특정 컨텍스트 정보에 액세스할 수 있습니다. 컨텍스트 전달을 사용하면 에이전트가 사용자의 현재 파일, 선택한 텍스트 및 리포지토리에 대한 관련 세부 정보를 받을 수 있습니다. 확장과 상호 작용을 할 때 자동으로 수행되지만, 조직 소유 리포지토리에서 사용하기 위해 GitHub App 권한을 통해 명시적 권한 부여가 필요합니다.

Visual Studio Code, Visual Studio, GitHub의 GitHub Copilot Chat과 같은 다양한 클라이언트는 다양한 참조 형식을 통해 컨텍스트를 제공합니다. 예를 들어, IDE는 파일 내용 및 선택 항목과 같은 정보를 보내는 반면, Copilot Chat in GitHub에는 보고 있는 페이지의 현재 URL이 포함됩니다.

필수 조건

Copilot agent이(가) GitHub와 통신하도록 구성하기 전에 Copilot agent이(가) Copilot 플랫폼과 통신하는 방법을 이해해야 합니다. Copilot 플랫폼과 통신하도록 Copilot 에이전트 구성을(를) 참조하세요.

컨텍스트 전달 이해

컨텍스트 전달을 사용하면 에이전트가 사용자의 활성 작업 영역에 대한 정보를 받을 수 있습니다. 에이전트는 사용자의 메시지 목록과 사용자의 현재 환경에 대한 참조를 포함된 여러 SSE(서버에서 보낸 이벤트)를 받습니다. 클라이언트에 따라 다양한 유형의 컨텍스트가 제공됩니다.

다음 표에서는 사용 중인 클라이언트나 IDE를 기반으로 GitHub Copilot Extensions에 전달되는 참조 형식을 보여 줍니다.

클라이언트 또는 IDEclient.fileclient.selectiongithub.repositorygithub.current-url추가 컨텍스트
Visual Studio Code아니요리포지토리 소유자 및 분기
Visual Studio아니요리포지토리 소유자 및 분기
GitHub.com아니요아니요리포지토리 정보 및 기타 GitHub 리소스
GitHub Mobile아니요아니요아니요해당 없음

IDE의 Copilot Chat에 대한 참조 형식

다음 참조 형식은 IDE에서 에이전트에 전달될 수 있습니다.

  • client.file: IDE에서 현재 활성화된 파일의 전체 콘텐츠를 나타냅니다.
  • client.selection: 활성 파일에서 사용자가 강조 표시된 텍스트의 선택된 부분을 나타냅니다.
  • github.repository: 활성 리포지토리에 대한 정보를 제공합니다.

Copilot Chat in GitHub에 대한 참조 형식

다음 참조 형식은 GitHub에서 에이전트로 전달될 수 있습니다.

  • github.current-url: 사용자가 보고 있는 현재 GitHub 페이지의 URL을 나타냅니다.
  • github.repository: 활성 리포지토리에 대한 정보를 제공합니다.

예제 참조

다음 코드는 client.file에 대한 예제 객체를 보여줍니다.

{
    // The reference type.
    "type": "client.file",
    "data": {
        // The full content of the active file. 
        "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "language": "plaintext"
    },
    "id": "relative-path/to/file",
    // `is_implicit` indicates whether the reference was automatically provided by the client (true) or manually attached by the user (false).
    "is_implicit": true,
    "metadata": {
        "display_name": "https://github.com/example-user/example-repository",
        "display_icon": "",
        "display_url": ""
    }
}

다음 코드는 client.selection에 대한 예제 객체를 보여줍니다.

{
    // The reference type.
    "type": "client.selection",
    "data": {
        // The currently selected portion of text.
        "content": "<current selection>",
        "end": {
            "col": 80,
            "line": 10
        },
        "start": {
            "col": 0,
            "line": 0
        }
    },
    "id": "relative-path/to/file",
    // `is_implicit` indicates whether the reference was automatically provided by the client (true) or manually attached by the user (false).
    "is_implicit": true,
    "metadata": {
        "display_name": "https://github.com/example-user/example-repository",
        "display_icon": "",
        "display_url": ""
    }
}

다음 코드는 github.repository에 대한 예제 객체를 보여줍니다.

{
    // The reference type.
    "type": "github.repository",
    "data": {
        "type": "repository",
        "id": "abc-123",
        "name": "example-repository",
        "ownerLogin": "example-user",
        "ownerType": "",
        "readmePath": "",
        "description": "",
        "commitOID": "",
        "ref": "",
        "refInfo": {
            "name": "",
            "type": ""
        },
        "visibility": "",
        "languages": null
    },
    "id": "example-user/example-repository",
    // `is_implicit` is always false for github.repository.
    "is_implicit": false,
    "metadata": {
        "display_name": "https://github.com/example-user/example-repository",
        "display_icon": "",
        "display_url": ""
    }
}

다음 코드는 github.current-url에 대한 예제 객체를 보여줍니다.

{
    // The reference type.
    "type": "github.current-url",
    "data": {
        // The GitHub URL the user was on while chatting with the agent.
        "url": "https://github.com/example-user/example-repository"
    },
    "id": "https://github.com/example-user/example-repository",
    // `is_implicit` is always true for github.current-url.
    "is_implicit": true,
    "metadata": {
        "display_name": "https://github.com/example-user/example-repository",
        "display_icon": "",
        "display_url": ""
    }
}

컨텍스트 전달 설정

IDE 클라이언트를 통한 컨텍스트 전달을 사용하도록 설정하려면 에이전트에 대해 Copilot 편집기 컨텍스트 사용 권한을 구성해야 합니다. 이 권한은 client.fileclient.selection 참조 형식에 대한 액세스만 제어합니다. 에이전트를 설치하고 사용하는 사용자에게는 에이전트가 활성 파일 및 현재 선택 항목 등의 콘텐츠를 포함하는 Copilot 편집기 컨텍스트에 대한 읽기 권한이 있음을 명확하게 알 수 있습니다.

github.current-urlgithub.repository는 Copilot 편집기 컨텍스트의 영향을 받지 않습니다. 이러한 참조 형식은 권한 부여 필터링을 사용하여 타사 에이전트가 액세스 권한이 있는 참조만 받도록 합니다. github.current-urlgithub.repository의 개인정보 보호 관리에 대한 자세한 내용은 개인정보 보호 컨트롤을 참조하세요.

다음 단계에 따라 IDE에서 에이전트로 전달되는 컨텍스트에 필요한 사용 권한을 설정합니다.

  1. 의 페이지 오른쪽 위 모서리에서 프로필 사진을 클릭합니다.
  2. 계정 설정으로 이동합니다.
    • 개인 계정 소유한 앱의 경우 설정을 클릭합니다.
    • 조직이 소유한 앱의 경우:
      1. 사용자의 조직을 클릭합니다.
      2. 조직 오른쪽에서 설정을 클릭합니다.
  3. 왼쪽 사이드바에서 개발자 설정을 클릭합니다.
  4. 왼쪽 사이드바에서 GitHub Apps 을 클릭합니다.
  5. GitHub Apps의 목록에서 컨텍스트 전달에 대해 구성하려는 GitHub App을 클릭합니다.
  6. 왼쪽 탐색 메뉴에서 권한 및 이벤트를 선택합니다.
  7. 계정 사용 권한에서 Copilot 편집기 컨텍스트에 대한 읽기 전용 액세스를 선택합니다.

개인 정보 제어

에이전트와 특정 컨텍스트 세부 정보를 공유하지 않으려는 경우 여러 가지 방법으로 참조 형식을 수정하고 제거할 수 있습니다.

여러 IDE에서 채팅

  • 에이전트에 Copilot 편집기 컨텍스트 읽기 권한이 없으면 모든 client.* 참조가 제거됩니다.
  • 에이전트에 리포지토리에 대한 읽기 권한이 없는 경우 모든 client.* 참조가 제거되고 github.repository 참조는 수정됩니다.

Note

Visual Studio 및 Visual Studio Code는 현재 파일에서 콘텐츠를 제외하는 옵션을 제공합니다. 사용자가 현재 파일에서 콘텐츠를 제외한 경우 client.* 참조 형식이 제거됩니다.

GitHub에서 채팅

  • 에이전트가 현재 GitHub URL과 연결된 리포지토리에 대한 읽기 권한이 없는 경우 github.current-urlgithub.repository 참조가 수정됩니다.
  • 현재 GitHub URL에서 리포지토리 정보를 추출할 수 없는 경우 github.current-url이 수정됩니다.

수정된 참조

권한 부족으로 인해 참조가 수정되면 제외된 정보 유형을 나타내는 자리 표시자로 대체됩니다. 다음 예제에서 type 필드는 참조가 수정되었음을 나타내고 data.type 필드는 원래 참조 형식을 표시했음을 나타냅니다.

{
    "role": "user",
    "content": "Current Date and Time (UTC): 2024-10-22 00:43:14\nCurrent User's Login: monalisa\n",
    "name": "_session",
    "copilot_references": [
        {
            "type": "github.redacted",
            "data": {
                "type": "github.current-url"
            },
            "id": "example-id",
            "is_implicit": true,
            "metadata": {
                "display_name": "",
                "display_icon": "",
                "display_url": ""
            }
        }
    ],
    "copilot_confirmations": null
}

컨텍스트 제외

중요한 정보를 보호하기 위해 특정 시나리오에서는 컨텍스트가 에이전트에 전달되지 않도록 자동으로 방지합니다. 조직에서 Copilot에 대한 콘텐츠 제외 규칙을 설정한 경우 이러한 규칙에 해당하는 파일은 에이전트에게 전달되는 컨텍스트에 포함되지 않습니다.

콘텐츠 제외 규칙에 대한 자세한 내용은 GitHub Copilot에서 콘텐츠 제외을(를) 참조하세요.

대용량 파일

클라이언트에서 설정한 크기 제한을 초과하는 파일은 전송되지 않습니다. 참조에는 파일이 너무 커서 처리할 수 없음을 나타내는 메타데이터가 포함됩니다.

숨김 파일

중요한 구성의 의도하지 않은 공유를 방지하기 위해 점으로 시작하는 파일(예: .env.config)은 기본적으로 제외됩니다. VS Code에서 .copilotignore 파일에 파일이나 디렉토리를 지정하여 해당 파일이나 디렉토리가 Copilot 에이전트로 전송되는 것을 방지할 수 있습니다. 이 클라이언트 쪽 메커니즘은 제외되는 파일을 세부적으로 제어합니다.