본문 바로가기
회고/대회

사내 AI 활용 대회 후기 - 1 (Prompt에 대하여)

by chickenman 2024. 9. 21.

최근 사내에서 AI를 활용하는 대회가 개최되었다. 회사 게시판에 공지가 나왔을 때에는 프로젝트 상황도 바쁘고, 개발중이던 사이드 프로젝트도 있어서 불참하려고 했지만.. 다시 파트장님을 통해 내려온 전원 참석 공지를 보고 참여 신청하게 되었다.

타 부서에서는 잘 모르겠지만 우리 부서에서는 대대적으로 이 대회를 홍보하고 참석을 장려하면서 참가자들에게 여러가지를 제공해주었다.

대회 준비 조를 짜서 준비 과정을 제작해주며(대부분 알고리즘 문제 푸는 형식이지만..), AI 도구 비용을 결제해주는 등 몹시 이 대회에 신경쓰는 모습을 보여주었다.

회사의 강력한 관심속에 어쩌다보니 열심히 대회에 임하게 되었고 결국 결승까지 올라갈 수 있게 되었다.

 

대회는 예선 -> 본선 -> 결승 순으로 진행되며 대략 1달 반에 걸쳐서 진행되었다.

각각은 아래와 같은 형식으로 대회가 진행되었다.

- 예선: AI 도구 활용 없이 순수 코딩 테스트 

- 본선: AI 도구를 활용한 코딩 테스트

- 결승: AI 도구를 활용하여 실제 프로젝트에 적용할 수 있는 기능 구현

 

먼저 예선의 코딩 테스트는 내 기준으로 쉬운 문제들이 나왔었다. 8문제들로 구성되며 그 중 한 문제는 SQL이었고 제한 시간은 90분이었다. 문제들의 난이도는 실버3 ~ 1 정도였으며 나는 7문제를 풀고 제출하였다.

예선은 1문제만 통과하면 되었기 때문에 다들 무난하게 통과하였다. 물론 결승 진출 선별은 예선 + 본선 점수의 합산으로 판별하기 때문에 중요한 시험이긴 했다. 

 

두번째 본선은 Copilot 등과 같은 AI 도구를 활용한 코딩 테스트였다. 예선과 동일한 문제, 시간 조건이었고 난이도는 조금 더 올라간 형태였다. 예선은 통과 기준을 보고 별 준비를 하지 않았었지만, 본선은 결승으로 가는 마지막 관문이었음으로 prompt에 신경을 썼었다. 여러 가지 시행 착오 후 만들어진 최종 prompt를 아래와 같다. 

지시사항
- You are the world's best algorithm and Java expert.
- When I give you a problem, write code that solves the problem. Write the code so that it does not cause an OutOfMemoryError or timeout error under the given input conditions. A timeout error occurs when more than 3,000,000,000 calculations are performed.
- When I run the program you provide, it must produce the same output as the example input I provided. If it does not, it is considered incorrect.
- Use BufferedReader for input, StringBuilder for output, and name the main class Main.
- Provide only the code without an explanation.

###문제###

###입력 방식###

###입력조건###

###출력###

###예시 입출력###
“””
입력

출력

“””

그러나 한번의 prompt로 여러가지 문제를 즉시 해결하는 것은 어려웠다.

위 prompt를 가지고 문제를 풀다보면, 특히 시간이 오래 걸리는 문제를 제시하면 time-out 오류가 종종 발생했다. 이를 해결하기 위해 위 prompt를 사용하여 코드를 받은 후 "Please optimize the code you provided so that timeouts or memory overflows do not occur"와 같이 최적화해달라는 질의문을 한번 더 던지면 완성된 코드를 최종적으로 완성해주었다.

시간 초과를 신경써야 하는 문제에 대해서 최적화 질의문을 던지면 던지지 않았던 경우보다 50% 이상 높은 정달률을 보여주었던 기억이 있다. (모수가 100회 미만으로 적기 때문에 개인적인 생각입니다..) 

 

또한, 종종 AI가 문제의 갈피를 못잡는 경우도 있었다.

하나의 문제를 20회 이상의 다른 대화(session)를 통해 문제를 제시해주어도 정답을 도출하지 못하는 경우가 있다. 이 문제는 문제의 난이도가 올라갈수록 빈번하게 발생하였다. 이런 경우의 해결법은 2가지 정도 있는 것으로 보인다.

  • CoT 지문을 prompt에 추가해주고, 개발자가 문제를 세분화하여 하나씩 질의하는 방식이다.
    예를 들어, 모든 경우의 수를 탐색하고 최소의 합을 가진 경우의 수를 도출해달라는 문제가 있다고하자.
    그러면 먼저 "모둔 경우의 수를 탐색하는 코드를 작성해줘" 질의문을 던져 코드를 받는다.
    그 후 "어떤 어떤 파라미터를 전달했을 때 최소의 합인지 검사하는 함수를 작성해줘" 질의문을 던져 함수를 받는다. 그리고 그 코드를 합쳐 테스트 한 후 제출한다.

    이런 식으로 코드를 제출하다보면 한번에 모든 문제를 전달하는 것보다 훨씬 높은 정답률을 보인다.

  • AI에게 문제의 해결 방식(알고리즘)을 제시해주는 방식이다.
    개발자가 문제를 읽고 문제를 해결할 알고리즘을 채택한 후 문제와 함께 사용할 알고리즘을 제시해주면, AI가 그 알고리즘을 활용하여 문제를 해결해주는 코드를 작성해준다.

나는 본선에서 2가지 중 시간적으로 유리한 두번째 방식을 주로 활용하여 문제를 해결하였었다. AI를 활용한 결과 시간 내 모든 문제를 풀고 제출하였다.

 

 

솔직히 예선의 문제 난이도는 쉬웠지만 모든 문제를 풀지 못했다는 점에서 결승 진출에 대한 기대를 하지는 않고 있었다. 그런데 본석 후 다음날 이메일로 결승 진출에 축하한다는 메일을 받게 되었다!!

 

예선과 본선에서 몇점을 했고 최종적으로 몇 등을 했는지는 알 수 없었지만 결승은 모든 본선 참가자 중 20명안에 들어야 했기 때문에 최소 20등은 했다는 이야기였다. 본선은 AI를 활용한 코딩 테스트였기 때문에 난이도가 쉬웠고 만점자가 22명이나 나왔기 때문에, 결승 진출은 예선 점수로 판가름났다. 사람들에게도 빠듯한 시간내에 문제를 푸는 것이 쉽지 않았었던 것 같다.

'회고 > 대회' 카테고리의 다른 글

사내 AI 활용 대회 후기 - 2 (Prompt에 대하여)  (9) 2024.09.21