이 문서는 Visual Studio Code의 Github Copilot 확장 기능에 대한 분석입니다.
macOS 환경에서 VS Code Extensions는 다음 디렉터리에 위치합니다:
버전 1.92.177 분석
Copilot Chat에 대한 분석은 README_COPILOT_CHAT.md를 참조하십시오.
프롬프트(Prompts)
Github Copilot 확장 기능은 세 가지 유형의 프롬프트를 생성합니다.
프롬프트 1: 단일 파일(Single file)
가장 간단한 경우로, file1.py라는 하나의 파일만 사용합니다.
- filename:
file1.py
- file content:
# Print hello, world
사용자가 # Print hello, world 뒤에 Enter를 누르면, 확장 기능은 다음 프롬프트를 생성합니다:
파일의 경로는 프롬프트의 일부가 됩니다.
프롬프트 2: 다중 파일(Multiple files)
이제 file2.py 파일을 편집하는 약간 더 복잡한 두 개의 파일 케이스를 고려해 보겠습니다.
이 경우, 확장 기능은 다음 프롬프트를 생성합니다:
유사한 내용을 가진 파일도 프롬프트에 포함됩니다.
프롬프트 3: 중간 채우기(Fill in the middle)
Copilot은 Fill in the Middle을 지원합니다. 이는 확장 기능이 커서 위치의 앞뒤 코드를 모델로 전송한다는 의미입니다.
- filename:
file3.py
- file content:
# Test prefix\n# Test suffix
사용자가 # Test prefix 뒤에 Enter를 누르면, 확장 기능은 다음 접두사(prefix)와 다음 접미사(suffix)를 생성합니다:
그리고
통신(Communication)
언어 모델(Language model)
완성(completion)을 생성하기 위해, 확장 기능은 엔드포인트 https://copilot-proxy.githubusercontent.com/v1/engines/copilot-codex/completions로 POST 요청을 전송합니다.
요청을 보낸 후, 엔드포인트는 다음 응답을 반환합니다.
원격 측정 (Telemetry)
The Github Copilot 확장 기능은 https://dc.services.visualstudio.com 엔드포인트로 원격 측정 데이터를 전송합니다:
심층 분석
어휘 (Vocabulary)
확장 기능은 두 개의 어휘 파일(vocabulary files)을 포함하고 있습니다.
| 파일명 | 어휘 크기 | 설명 |
|---|
vocab_cushman001.bpe | 50,276 | 이 어휘는 GPT-2 어휘를 기반으로 합니다 |
vocab_cushman002.bpe | 100,000 | 이 어휘는 새롭고 더 이상 GPT-2 어휘를 기반으로 하지 않습니다 |
최소 프롬프트 문자 수 (Min prompt chars)
프롬프트가 모델로 전송되기 전에 프롬프트의 길이는 >= 10 문자가 되어야 합니다.
if ((_ > 0 ? n.length : d) < t.MIN_PROMPT_CHARS)
return t._contextTooShort;
편집 중인 파일에 대해 다음 정보가 수집됩니다:
const m = {
uri: d.toString(),
source: t,
...
인접 파일 (Neighbor Files)
확장 기능은 이전에 접근했던 파일을 기억합니다. getNeighborFiles 함수는 truncateDocs 함수를 호출하며, truncateDocs 함수의 입력값은 접근 시간별로 정렬된 파일입니다.
모든 파일의 결합 크기가 200,000을 초과하면 추가적인 파일들은 무시됩니다. truncateDocs 함수는 축소된 파일 목록을 반환합니다.
Copilot 성능
우리는 copilot 모델 cushman-ml을 HumanEval 데이터셋으로 평가했습니다. 164개의 프로그래밍 문제 중, 이 모델은 56.10%를 해결할 수 있습니다.
| 모델 이름 | Pass@1 | 날짜 | 설명 |
| :--- | :--- | :--- |
| code-cushman-001 | 32.93% | 2022-10-23 | https://openai.com/api/
| code-davinci-002 | 46.95% | 2022-10-23 | https://openai.com/api/
| cushman-ml | 56.10% | 2022-10-23 | Copilot
평가 실행의 완성본 (Completions of the evaluation run): 2022-10-23-samples-cushman-ml.jsonl