1월 중순부터 Copilot Chat을 사용하기 시작했으니 약 50일 정도가 되었네요. 지난 회사에서는 회사 정책과 개인적인 거부감으로 업무적으로도, 개인적으로도 사용하지 않았던 Copilot Chat이었는데요, 이직하면서 본격적으로 사용해보았습니다. 참 대단한 친구더군요. 특히 이번 백엔드 작업🔗에서 여러모로 많은 도움을 받으면서, 그가 내뱉는 코드에 경외심이 들 정도였습니다. Copilot과 함께한 지난 50일을 돌아보면서, Copilot Chat의 야무지게 활용할 수 있는 세 가지 사용법을 정리해보고자 합니다.
인라인 채팅을 통해 간편하게 주석과 테스트 코드를 생성하고 최적화하자!
코드 위에 띄운 인라인 채팅창 |
---|
![]() |
별도의 채팅 스레드로 이동하지 않고, 간편하게 코드 위에서 인라인 채팅을 실행할 수 있습니다. 인라인 채팅을 통해 간편하게 Copilot에 코드 범위를 제공하고, 질문을 이어나갈 수 있습니다. Visual Studio에서는 아래와 같은 명령어들을 제공하고 있는데요, Visual Studio Code에서도 물론 사용이 가능합니다.
Visual Studio에서 사용이 가능한 명령어들 |
---|
![]() |
(출처: https://learn.microsoft.com/ko-kr/visualstudio/ide/copilot-chat-context?view=vs-2022) |
개인적으로 /doc
과 /tests
를 많이 활용했습니다. 함수 범위를 지정하고, /doc in korean
을 통해 함수에 대한 주석을 생성할 수 있었습니다. 유틸 함수를 생성하면 가급적 주석을 달아놓으려 하는데요, Copilot을 통해 주석을 쉽게 달 수 있어 감사했습니다. 가끔은 함수를 생성한 후에 사후적으로 테스트 코드를 생성하는 경우도 있었는데, 이러한 경우에 tests in jest
를 통해 빠르게 jest
테스트 코드를 생성할 수 있었습니다.
명령어를 통해 생성한 주석 |
---|
![]() |
다만 /optimize
명령어는 제대로 활용할 수 없었습니다. 최적화된 코드를 주긴 하는데, 함수 범위나 컨텍스트를 충분하게 제공하지 않으면 잘못된 개선안을 내놓는 경우가 꽤 빈번했습니다. 복잡한 메서드의 경우에는 그 경향이 더욱 심해졌습니다. 특히 가끔씩은 deprecated 함수를 사용하는 경우가 있어, /optimize with no deprecated api
로 추가적인 힌트를 주기도 하였습니다.
채팅의 컨텍스트를 분리하여 더 좋은 답변을 받자!
코드 범위가 꼭 필요하지 않은 질문이나 상호작용(연속적인 질문을 통해 답을 얻으려는 경우 등)이 필요한 상황에서는 별도의 채팅 스레드가 효과적일 수 있습니다. ChatGPT처럼 Copilot Chat에서도 여러 개의 채팅창을 통해 질문의 컨텍스트를 관리할 수 있습니다(적어도 vscode의 경우에는!). 스레드를 격리하여 다음과 같은 이점을 얻을 수 있었습니다.
하나의 스레드에서 질문을 계속하다보면 종종 Copilot이 해당 질문을 과거의 질문과 동일한 문맥의 질문이라고 판단하여 어떻게든 두 질문을 연결지어 결과물을 내놓으려 하는 경우들이 있었습니다. 스레드를 격리하여 문맥간 간섭을 방지하고, 질문에 대한 기록을 쉽게 남겨둘 수 있었습니다.
채팅 스레드를 생성하고 관리할 수 있다. |
---|
![]() |
몇 가지 원칙을 지켜 질문하면 더 정확하고 좋은 결과물이 나온다!
GPT를 칭찬하거나 혼내보자!
Copilot에 어떻게 질문을 하는지도 답변의 퀄리티에 큰 영향을 준다고 합니다. 최근에 발표된 논문에서는 질문 원칙들을 26가지로 규정하고, 각 원칙들을 준수한 프롬프트(질문)가 GPT 모델이 내놓는 답변의 정확도(Correctness)와 향상도(Boosting)에 얼마나 영향을 줄 수 있는지 실험했습니다(Bsharat, 2024). 26가지 원칙들에는 '청자를 명시하기(#2)'와 같은 직관적인 것들도 있었지만, '"please"를 사용하여 정중하게 질문하기(#1)', "못하면 벌줄거야(You will be penalized)"라고 말하기(#10)과 같은 다소 엉뚱한 규칙들도 포함되어 있었습니다.
답변의 정확도와 향상도에 영향을 준 질문 원칙들 |
---|
![]() |
(출처: https://arxiv.org/abs/2312.16171) |
원칙을 준수했을 때, 전반적으로 10% 이상의 정확도 향상을 보였고, 이는 통계적으로 유의미한 수치였다고 합니다. 놀라운 점은, 엉뚱한 것처럼 보이는 규칙들도 답변의 정확도와 향상도를 향상시켰다는 점입니다. 심지어는 "대답 잘하면 팁을 줄거야(I'm going to tip $xxx for a better solution!)"라고 말하기(#6)도 5% 정도의 향상도를 일궈냈습니다!
원칙을 준수하니 더 정확한 답변이 나왔다. |
---|
![]() |
(출처: https://arxiv.org/abs/2312.16171) |
Copilot도 GPT-3 기반으로 생성된 모델이니, 이러한 규칙들을 준수하는 것이 도움이 될 것 같습니다. 개인적으로 채팅 스레드를 생성하여 질문을 한 후에 가끔씩 Copilot에게 '고마워'라고 말하곤 했었는데, 이게 결과물에 좋은 영향을 주었을지도 모르겠네요. Copilot을 자주 칭찬해주어야겠어요.
몇 가지 활용법을 정리해보고 관련된 논문도 한 편 소개해드렸는데요, 정말 기술의 발전 속도는 경이로운 수준인 것 같습니다. GPT를 이용하는 방법도 하나의 연구 분야로서 자리잡고 있다는 것도 참 놀랍습니다.
50일간 Copilot을 사용해가면서 점점 Copilot에 의존하게 되는 제 모습이 무섭기도 했는데요, 나태해지지말고 영악하게 Copilot을 이용하자고 다짐해보며 글을 마칩니다.
Bsharat, S. M., Myrzakhan, A., & Shen, Z. (2023). Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4. arXiv:2312.16171 [cs.CL]. https://doi.org/10.48550/arXiv.2312.16171