야무지게 Copilot Chat 활용하기

Ethan Yu·2024년 3월 3일
0
post-thumbnail

1월 중순부터 Copilot Chat을 사용하기 시작했으니 약 50일 정도가 되었네요. 지난 회사에서는 회사 정책과 개인적인 거부감으로 업무적으로도, 개인적으로도 사용하지 않았던 Copilot Chat이었는데요, 이직하면서 본격적으로 사용해보았습니다. 참 대단한 친구더군요. 특히 이번 백엔드 작업🔗에서 여러모로 많은 도움을 받으면서, 그가 내뱉는 코드에 경외심이 들 정도였습니다. Copilot과 함께한 지난 50일을 돌아보면서, Copilot Chat의 야무지게 활용할 수 있는 세 가지 사용법을 정리해보고자 합니다.


1. 인라인 채팅을 활용하자.

인라인 채팅을 통해 간편하게 주석과 테스트 코드를 생성하고 최적화하자!

코드 위에 띄운 인라인 채팅창

별도의 채팅 스레드로 이동하지 않고, 간편하게 코드 위에서 인라인 채팅을 실행할 수 있습니다. 인라인 채팅을 통해 간편하게 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로 추가적인 힌트를 주기도 하였습니다.


2. 컨텍스트를 분리하자.

채팅의 컨텍스트를 분리하여 더 좋은 답변을 받자!

코드 범위가 꼭 필요하지 않은 질문이나 상호작용(연속적인 질문을 통해 답을 얻으려는 경우 등)이 필요한 상황에서는 별도의 채팅 스레드가 효과적일 수 있습니다. ChatGPT처럼 Copilot Chat에서도 여러 개의 채팅창을 통해 질문의 컨텍스트를 관리할 수 있습니다(적어도 vscode의 경우에는!). 스레드를 격리하여 다음과 같은 이점을 얻을 수 있었습니다.

  • 서로 다른 문맥의 질문이 서로 영향을 주거나 간섭하지 않도록 할 수 있다.
  • 질문의 히스토리를 쉽게 관리할 수 있다.

하나의 스레드에서 질문을 계속하다보면 종종 Copilot이 해당 질문을 과거의 질문과 동일한 문맥의 질문이라고 판단하여 어떻게든 두 질문을 연결지어 결과물을 내놓으려 하는 경우들이 있었습니다. 스레드를 격리하여 문맥간 간섭을 방지하고, 질문에 대한 기록을 쉽게 남겨둘 수 있었습니다.

채팅 스레드를 생성하고 관리할 수 있다.

3. 잘 질문하자.

몇 가지 원칙을 지켜 질문하면 더 정확하고 좋은 결과물이 나온다!
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을 이용하자고 다짐해보며 글을 마칩니다.




Reference

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

profile
🧐 사용자와 개발자를 모두 배려하고 싶은 개발자. 백엔드부터 임베디드까지 다양하게 개발하다가 지금은 🎨 프런트엔드에 자리잡았어요.

0개의 댓글

관련 채용 정보