출처 : https://resources.github.com/learn/pathways/copilot/essentials/how-github-copilot-handles-data/
본 글은 위의 How Github Copilot handles data 를 Copilot를 활용해 번역한 글입니다.
GitHub Copilot을 도입하면서 어떤 데이터를 수집하고, 그 데이터가 어떻게 사용, 전송, 저장되며, 그 수명 주기가 어디서 끝나는지 궁금할 수 있습니다. 이 가이드에서는 GitHub Copilot의 데이터 파이프라인을 설명하고, 가장 정확한 코드 제안과 응답을 제공하는 동안 데이터를 안전하게 유지하는 방법을 설명합니다.
GitHub Copilot을 코드 편집기, 명령줄, GitHub.com 또는 다른 곳에서 사용하는 경우, 데이터 파이프라인은 사용자 입력, 입력 강화 및 프롬프트 구성 도구, 그리고 핵심에 있는 대형 언어 모델(LLM)로 구성됩니다.
간단히 말해, GitHub Copilot은 입력과 컨텍스트를 수집하고, 이를 사용하여 프롬프트를 작성한 다음 LLM에 보냅니다. LLM은 응답이나 코드 제안을 공식화하여 사용자에게 반환합니다.
코드 편집기가 프록시를 통해 GitHub Copilot LLM에 연결되는 다이어그램을 보여줍니다.
사람과 마찬가지로, LLM은 더 많은 컨텍스트를 가질 때 더 나은 답변을 제공합니다. GitHub Copilot의 경우, 컨텍스트 수집 과정은 사용자가 GitHub Copilot과 상호작용하는 곳에서 시작됩니다. GitHub Copilot은 편집 중인 파일의 내용, 프로젝트 내의 인접하거나 관련된 파일, 저장소 URL 또는 파일 경로 등 다양한 요소를 수집하여 관련 컨텍스트를 식별할 수 있습니다. GitHub Copilot Chat에서는 강조 표시된 코드와 이전 질문 및 응답도 컨텍스트에 포함될 수 있습니다. 코드 완성을 위한 컨텍스트로 특정 콘텐츠를 사용하지 않도록 하려면 콘텐츠 제외 설정을 업데이트할 수 있습니다. GitHub Copilot이 코드 및 고객 데이터를 처리하는 방법에 대한 자세한 내용은 GitHub Copilot 신뢰 센터를 방문하십시오.
GitHub Copilot이 컨텍스트를 수집하고 사용하는 방법을 이해하면 개발자와 사용자가 최상의 응답을 받을 수 있습니다. 예를 들어, 개발자가 코드 편집기에서 비즈니스 로직을 설명하는 파일을 열어두면, 비즈니스 로직이 어떻게 작동해야 하는지 설명하는 단위 테스트 파일도 열어두어야 합니다. 그러면 GitHub Copilot이 해당 컨텍스트를 포함하여 프롬프트를 작성합니다.
프롬프트가 작성되면 GitHub 소유의 Microsoft Azure 테넌트에 호스팅된 프록시 서비스로 안전하게 전달됩니다. 트래픽은 용량에 따라 지역으로 라우팅되며, 특정 지역 내에 트래픽이 머물 것이라고 보장할 수 없습니다. 프록시에서 먼저 프롬프트를 유해 언어(예: 증오 발언, 성적 콘텐츠, 폭력, 자해 증거)와 관련성에 대해 테스트합니다. GitHub Copilot이 모델 유인, 저속한 언어 또는 코드 및 소프트웨어 개발과 관련 없는 질문에 관여하지 않도록 합니다. 동시에 모델이 코드 작동 방식과 제안 생성 방식을 드러내도록 속이려는 시도를 감지하고 차단하여 프롬프트 해킹을 방지합니다.
모든 테스트를 통과하면 프롬프트는 대형 언어 모델로 전달됩니다.
프록시 서버와 GitHub Copilot API처럼, GitHub Copilot LLM은 GitHub 소유의 Azure 테넌트에 호스팅됩니다. 이 LLM은 OpenAI가 만든 AI 모델로, GitHub의 공개 저장소에 있는 코드를 포함한 공개 소스의 자연어 텍스트와 소스 코드를 학습했습니다.
이 시점에서 데이터가 처리되는 방식은 몇 가지 구성 옵션과 사용 중인 특정 GitHub Copilot 기능에 따라 다릅니다.
코드 편집기에서의 GitHub Copilot은 기본 LLM을 훈련하기 위해 프롬프트(제안을 제공하기 위해 사용되는 코드 또는 기타 컨텍스트)를 보유하지 않습니다. 제안이 반환되면 프롬프트는 폐기됩니다. GitHub Copilot 개인 구독자는 프롬프트를 GitHub와 공유하지 않도록 선택할 수 있으며, 그렇지 않으면 GitHub의 기본 모델을 미세 조정하는 데 사용됩니다.
코드 편집기 외부의 GitHub Copilot(명령줄 인터페이스, 모바일, GitHub.com의 GitHub Copilot Chat 포함)은 페이지 탐색 이벤트 및 브라우저 세션 간의 연속성을 제공하기 위해 프롬프트, 제안 및 응답을 보유하지만, GitHub의 기본 모델을 훈련하기 위해 프롬프트, 제안 또는 응답을 보유하지 않습니다.
모델이 생성한 각 응답은 후처리를 위해 프록시 서버를 통과합니다. 여기서 응답은 프롬프트와 마찬가지로 유해 언어와 관련성에 대해 검사되며, 추가로 세 가지 검사를 통과해야 합니다:
응답이 유해 언어, 관련성, 코드 품질, 고유 식별자 또는 공개 코드와 일치하는 제안 중 하나라도 실패하면 잘리거나 완전히 폐기됩니다. 다섯 가지 테스트를 모두 통과한 응답만 사용자가 받을 수 있습니다.
이전에 설명한 것처럼, 공개 코드 필터에 대해 조금 더 이야기해보겠습니다.
연구에 따르면 GitHub Copilot의 제안 중 약 1%가 공개 코드와 일치합니다. 중요한 점은 이러한 일치가 모든 제안에 고르게 분포하지 않는다는 것입니다. GitHub Copilot이 컨텍스트가 부족할 때, 예를 들어 개발자가 새 프로젝트나 파일을 시작할 때 일치가 더 자주 발생합니다. 기존 애플리케이션 코드가 컨텍스트를 제공할 때는 거의 일치하지 않습니다.
컨텍스트와 상관없이, 공개 코드 필터는 모든 공백(예: 탭, 공백)을 제거하고 GitHub.com의 모든 공개 데이터 인덱스와 150자 이상의 제안을 비교하여 일치하는 코드를 식별합니다. 필터가 활성화되면 개발자는 공개 데이터와 일치하지 않는 고유한 제안만 받게 됩니다. 일치하는 경우, GitHub Copilot은 해당 제안을 폐기하고 다음 제안으로 넘어갑니다.
마지막으로, 응답 또는 코드 제안이 사용자에게 반환됩니다. 코드 편집기에서 제안이 반환되는 경우, 모델은 여러 제안을 생성할 수 있으며, 개발자는 수락할 제안과 거부할 제안을 선택할 수 있습니다. 일부 IDE(예: VS Code, Visual Studio, JetBrains IDE)에서는 개발자가 단어별로 부분 제안을 수락할 수도 있습니다. 수락되면 코드를 편집할 수 있습니다.
그리고 이 과정은 다시 시작됩니다.
GitHub Copilot은 잘 정의된 작업에서 개발자의 생산성을 최대 55%까지 향상시키는 것으로 나타났지만, 속도 향상만이 전부는 아닙니다. 개발자 설문 조사와 다운스트림 영향을 살펴보는 것이 GitHub Copilot의 영향을 더 명확하게 파악하는 데 도움이 될 수 있습니다