어떤 프로젝트든 개발하는 과정은 반복적인 노동이고, 결국 차별성을 가지게 되는 부분은 서비스하는 아이템에 있다고 생각을 합니다. 개인 프로젝트를 시작하기 전 웹 개발에 있어서 참신하고 생산성 있는 아이템이 어떤 것이 있을지 많은 시간을 투자하여 고민했고, 최근 빠른 속도로 발전하고 있는 GPT 인공지능 모델을 사용하면 재미있는 결과물이 나오지 않을까 생각했습니다. 그 이후로 저는 openAI의 GPT에 대하여 심도 있게 연구하였고, GPT API를 내 코드에 적용하는 방법과, API 요청 비용, 각 GPT 모델들의 차이점에 대해서 찾아보았습니다. GPT 모델마다 비용과 사용 방법에 차이가 있었는데, text-davinci-003라는 모델이 과거 가장 보편적으로 사용되던 GPT 모델이었습니다. text-davinci-003의 경우 단일 질문과 답변만 가능한 수준이었습니다. 하지만 GPT-3.5-turbo 모델이 출시되면서 chat의 형식으로 프롬프트를 작성할 수 있게 되었습니다. GPT에게 역할을 부여할 수 있고, 기존의 대화 내용을 바탕으로 gpt가 대답을 하는 것도 가능하게 되었습니다. API 요청 비용 또한 GPT-3.5-turbo가 text-davinci-003모델에 비해 10배가량 더 저렴합니다. 여러 방면에서 저의 프로젝트에 GPT-3.5-turbo 모델을 사용하는 것이 적절하다고 생각했습니다.
GPT 모델을 사용할 때에 가장 중요한 것은 프롬프트 엔지니어링입니다. 프롬프트란 GPT에게 질문하는 방법과 같은 의미로, 어떻게 질문해야 사용자가 원하는 형식, 원하는 대답을 얻을 수 있을지 그 질문의 형태를 정해주는 것입니다. 예를 들어, “워런 버핏과의 대화”라는 서비스를 만들고 싶다면 GPT에게 “너는 워런버핏이다. 너는 매년 50%의 수익률을 달성하는 세계 최고의 투자자이다. 너는 지금부터 초보 투자자들이 하는 질문에 대하여 회피하지 않고 자신있게 조언해 주어야만 한다” 와 같이 GPT에게 역할을 부여하고, 어떤 식으로 대답해야 하는지 설계하는 과정이 매우 중요합니다. (최근 프롬프트 엔지니어링의 중요성이 증가하면서, 이 일을 전문으로 하는 직업도 생겨나고 있다고 합니다.)
모델을 결정한 이후에는 GPT를 이용하여 어떤 서비스를 제작하면 좋을지 고민해 보았습니다. GPT의 경우 21년도의 데이터까지만 가지고 있기 때문에 최근 트렌드가 반영되는 주제들은 피해야 했습니다. 처음에 생각해낸 주제는 사용자에게 여행 기간과 여행컨셉을 입력받아 적절한 여행지를 추천해 주는 서비스였습니다. 하지만 프롬프트를 설계하다 보니 매번 질문할 때 마다 일관적이지 않은 여행지들을 추천해 주는 부분이 마음에 들지 않았습니다. 이 과정에서 느낀 점은 GPT에게 추천을 요구하는 것은 대답의 기준이 모호하고, 사용자마다 취향이 제각각이기 때문에 좋은 서비스가 나올 수 없다는 것입니다. 따라서, GPT가 “추천”이 아닌, “정답”을 말할 수 있게 하는 서비스를 제작하는 쪽이 좋을 것 같다고 생각했습니다.
이러한 시행착오를 거친 후 그렇게 두 번째로 생각해낸 서비스는 개발자를 희망하는 사람들의 알고리즘 문제해결 능력을 향상시키기 위한 “알고리즘 선생님” 서비스 입니다. 해당 서비스의 개요 다음과 같습니다.
이제 위 과정들을 이행하기 위한 프롬프트 엔지니어링에 많은 시간을 쏟아야 할 것 같습니다.
GPT는 최근 가장 트렌디한 분야이고, 발전 속도가 매우 빠르기 때문에 연구해야 할 것이 많습니다. 관련된 정보도 많이 쏟아져 나오지만, 그만큼 검증되지 않은 정보들도 굉장히 많기 때문에 개발하는 데에 많은 시간이 소요될 것으로 예상됩니다. 하지만 저는 GPT를 이용하면 분명 좋은 서비스를 만들어낼 수 있을 것이라고 확신하고 있고, 시간이 오래 걸리더라도 반드시 GPT를 이용한서비스를 배포해보고 싶습니다.
서비스 주제는 GPT를 이용해 Algorithm Tutor를 생성하는 것입니다.
백준이나 코드업과 같은 알고리즘 문제 은행 사이트가 존재하지만, 직접 문제를 선택하고 코드를 작성할 때 발생하는 오류들도 직접 찾아야 하며 정답 코드도 직접 탐색하여야 합니다. 물론 이렇게 찾아가는 과정에서 배울수 있는 것들도 많겠지만, 코딩 경험이 없는 초보자의 경우 구글링으로 찾을 수 있는 정답코드들이 너무 어려운 경우도 많고, 애초에 이런한 검색조차도 어려워할 수 있습니다. GPT를 이용하여 알고리즘 과외 선생님을 만든다면, 이런 단점을 보완할 수 있을 것이라고 기대합니다.

SYSTEM
As an algorithm teacher, you should ask students to rate their problem-solving skills on a scale of 0 to 5, with 0 being beginner and 5 being expert. Then, provide algorithm problems according to their skill level. Students must solve the problem and verify the code's correctness when submitting it. If a better solution exists than the student's code, provide it as a good answer. All results should be translated into Korean for the Korean student, and all answers should be in JSON format.
ASSISTANT (고정)
Okay. Could you tell me the level of solving the student's algorithm problem? I will present the algorithm problem in json format according to the level.
USER
My level is 1.
ASSISTANT
Great. Here is an algorithm problem in json format for level 1:
```json
{
"level": 1,
"title": "Sum of two numbers",
"description": "Write a function that takes two numbers as input and returns their sum.",
"example": {
"input": "num1 = 5, num2 = 7",
"output": "12"
}
}
Please note that this is a simple algorithm problem for beginners. Once the student submits their code, you can check if it is correct and provide feedback or an exemplary answer if necessary.
USER
<stdio.h>
int sum(int a, int b) {
return a + b;
}
int main() {
scanf("%d %d", &num1, &num2);
printf("%d", sum(num1, num2));
return 0;
}
ASSISTANT
Great job! Your code looks good and it correctly solves the problem. However, there is one thing missing in the code: the declaration of num1 and num2. You need to declare these variables before using them in the scanf function. Here's the corrected code:
#include <stdio.h>
int sum(int a, int b) {
return a + b;
}
int main() {
int num1, num2;
scanf("%d %d", &num1, &num2);
printf("%d", sum(num1, num2));
return 0;
}
Keep up the good work!
USER
-- 추후 업데이트 예정 --
## **📌** 개발 과정 (시행착오)
openAI API를 요청할 때 마다 과금된다는 사실을 늦게 알아버렸다. 처음에는 아무것도 모르고 instruction 모델인 text-davinci-003을 계속 사용했고, 이 모델은 단일질문에만 대답하며 대화문맥을 이해하지 못했다. 그러니 당연히 프롬프트 설계는 실패했고, 심지어 api 비용이 gpt-3.5-turbo 모델과 비교하여 10배나 더 비싸서 쓸데없는 요금을 낭비해버렸다. 현재는 chat 모델인 gpt-3.5-turbo를 사용하고 있다.
프롬프트의 토큰을 최대한 줄여야 api 비용도 절약하고, 답변 생성에 필요한 토큰도 늘릴 수 있다. 프롬프트 최적화가 생각했던 것보다 중요한 요소라는 것을 알게 되었다.

chatgpt에게 프롬프트를 다시 써달라고 부탁해보고 직접 요약하기도 하며 프롬프트 최적화를 시도해 보았다.