What I learned by putting GitHub Copilot behind a MitM proxy

개요

GitHub Copilot을 Man-in-the-Middle(MITM) 프록시 뒤에 두는 실험을 통해 AI 코딩 도구의 내부 작동 방식과 컨텍스트 활용 방안에 대한 기술적 인사이트를 얻었습니다.

주요 내용

* Electron 기반 애플리케이션의 네트워크 트래픽 가로채기: VS Code와 같은 Electron 기반 애플리케이션은 Chromium의 네트워크 스택 또는 Node.js의 http/https/fetch 모듈을 통해 외부와 통신합니다. mitmproxy와 같은 MITM 프록시를 설정하고 VS Code의 네트워크 설정을 수정하여 이 트래픽을 가로챌 수 있습니다.
* Copilot 부트스트랩 단계의 네트워크 요청: Copilot은 시작 시 인증 및 세션 관리, 설정 및 정책 확인, 모델 검색, 리포지토리 및 세션 컨텍스트 수집 등 다양한 HTTP 요청을 수행합니다.
* 프롬프트 기반 모델 라우팅: 사용자의 프롬프트는 코드 생성, 디버깅, 추론, 도구 사용 등 가능한 의도로 분류됩니다. 이 분류 결과는 작업을 수행할 적절한 모델을 결정하는 데 사용됩니다.
* 코드 컨텍스트 주입 및 민감 정보 처리: Copilot은 현재 파일의 내용을 인라인 완성 프롬프트에 컨텍스트로 주입합니다. .env 파일과 같이 잠재적으로 민감한 파일의 편집만으로는 직접적인 HTTP 요청이 발생하지 않지만, 다른 파일에서 발생하는 타이핑으로 인해 해당 파일의 컨텍스트가 전송될 수 있습니다.
* session_store_sql 도구와 로컬 데이터베이스 활용: Copilot은 session_store_sql 도구를 통해 로컬 SQLite 데이터베이스(session-store.db)와 상호작용합니다. 이 데이터베이스에는 이전 프롬프트, LLM 응답, 작업한 세션 요약, 리포지토리 및 브랜치 정보가 저장되어 있어 Copilot이 쿼리 가능한 기록으로 활용합니다.
* 데이터 저장 및 처리 방식: session-store.db의 user_message 및 assistant_response 열은 별도의 마스킹이나 제거 절차 없이 일반 텍스트로 저장됩니다. 이는 의도적인 설계로, 민감한 정보가 포함될 수 있는 데이터가 그대로 저장됨을 의미합니다.
* 컨텍스트의 중요성 증대: AI 코딩 도구는 사용자의 작업 공간, 최근 편집 내용, 대화 기록, 도구, 모델 라우팅 등 다양한 컨텍스트를 통합하는 상태 기반 시스템으로 발전하고 있습니다. 이러한 컨텍스트의 효과적인 조립은 도구의 유용성을 높이지만, 컨텍스트 확장, 데이터 기밀성 및 개인 정보 보호에 대한 새로운 과제를 야기합니다.
* AI 시스템 개발의 시사점: AI 모델 자체를 연구하는 것만큼이나 AI 도구의 "하네스(harness)", 즉 컨텍스트 수집, 처리, 전송 메커니즘을 연구하는 것이 중요합니다. 컨텍스트를 어떻게 주입하고, 무엇을 모델로 보내며, 무엇을 로컬에 유지할지, 어떤 도구를 모델이 호출하게 할지, 단기 및 장기 메모리에 무엇을 저장할지에 대한 결정이 AI 애플리케이션 개발의 핵심입니다.

시사점

AI 코딩 도구가 단순한 모델 응답을 넘어 사용자의 전체 개발 컨텍스트를 이해하고 활용하는 상태 기반 시스템으로 진화함에 따라, 컨텍스트의 효율적인 관리와 데이터 프라이버시 보호가 AI 애플리케이션 개발의 핵심 과제가 될 것입니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions