프롬프트 엔지니어링 Part.01 - 이론 정리
개요
회사에 퍼블리셔로 입사 후 AI에이전트(ChatGPT, Claude 등)를 사용하는 빈도가 급격히 증가했다.
물론 이전에도 자주 사용했지만 특히 더 사용하게 되는 것 같다는 생각이 들었다.
이전부터 AI에게 질문을 날리는 것에 대해 크게 생각하지 않고 생각하는 대로 적어 질문을 날리곤 했고, 지금도 마찬가지다.
그러다보니 원하는 답변을 빠른 시간 내 얻는데 문제가 생기는 경우가 종종 발생했고, 그럴 때마다 조건을 하나하나 추가하면서 추가질문을 던졌다.
이것이 반복되다보니 총 답변 양도 길어지고 그래서 결론적으로 내가 어떤 질문을 했는지, 어디의 어느 코드가 내가 원하는 코드인지 헷갈리는 경우가 많아졌다.
대형언어모델(LLM)에게 질문을 하는 이유가 빠른 시간 내 원하는 해결책, 답변을 얻는 것인데 그 장점이 약간 사라지는 것이다. (물론 인터넷 검색보다는 빠른 경우가 대부분이긴 하다.)
아무튼 나는 LLM에 질문을 던질 때 더 확실하고 정확한 값을 적은 프롬프트로 얻기 위해 프롬프트 엔지니어링에 대해 공부해 보기로 했다.
이 문서는 프롬프트 엔지니어링에 대한 기본적인 개념과 원리를 이해하고, 실제 프롬프트를 작성하는 방법을 정리한다.
참고문서
프롬프트의 기초
기초 프롬프트
평소의 나는 LLM을 다룰 때 간단한, 거의 1차원적인 프롬프트로 질문한다.
그렇기 때문에 어느 때는 한 번에 만족스럽고 양질의 결과를 얻지만 또 어느 때는 아무리 연속질문을 해도 같은 말만 반복, 원하는 정보를 어지 못할 때도 많다.
모델에 전달하는 프롬프트는 지시나 질문과 같은 정보와 맥락, 입력 또는 예시와 같은 세부사항을 포함할 수 있다.
이러한 구성요소를 사용하여 적절하게 지시하고 더 나은 결과를 얻을 수 있다.
간단한 예시로 시작해보자!
Prompt.
하늘은
Output. (OpenAI ChatGPT-4.5 / 2025.03.26 17:44)
하늘은 푸르고, 높고, 무한히 넓으며 때로는 맑고 화창하지만, 때로는 흐리고 어두우며 비를 품고 있기도 합니다.
하늘은 우리의 감정을 닮아 있습니다. 지금 당신이 올려다본 하늘은 어떤가요?
위와같이 LLM은 “하늘은”이라는 한 단어만 가지고 맥락을 파악하고 글을 이어나간다.
이 결과물은 화자가 예상하지 못한 답변을 내거나 원하는 답과는 거리가 있을 수 있다.
이를 통해 LLM에게 더 자세한 문맥과 구체적인 요구사항을 지시하는 것이 얼마나 중요한 것인지 알 수 있게 됐다.
한 발자국 더 나아가 보자!
Prompt.
문장을 완성해 줘:
하늘은
Output. (OpenAI ChatGPT-4.5 / 2025.03.26 17:44)
하늘은 푸른 바다처럼 끝없이 펼쳐져 있었다.
출력조건 한 줄을 추가한 것으로도 화자가 의도한 답변에 근접해진 것을 볼 수 있다.
이와같이 LLM에게 작업을 수행하도록 지시하기 위해 최적의 프롬프트를 설계는 접근 방식을 프롬프트 엔지니어링이라고 한다.
프롬프트 형식
일반적으로 LLM에게 던지는 프롬프트는 다음과 같은 형식을 따른다.
<질문>? or <지시>
그리고 이번에 공부하며 새롭게 알게된 사실로 질의응답(QA) 형식으로도 작성이 가능하다는 것이다.
Q: <질문>?
A:
이런 방식의 프롬프트 수행을 제로샷 프롬프팅(zero-shot prompting)이라 한다고 한다.
즉, 어떤 예시나 설명 없이 직접 LLM에게 응답을 요구하는 것…
대부분의 LLM에는 제로샷 프롬프팅을 수행할 수 있는 기능이 있지만 해당 작업의 복잡성과 모델이 가진 지식에 따라 다른 결과를 만들어 내기도 한다.
위를 응용한 인기 있고 효과적인 프롬프팅 기술 중 하나는 모범예시(시연 등)를 제공하는 퓨샷 프롬프팅(few-shot prompting)이다.
<질문>?
<답변>
<질문>?
<답변>
<질문>?
<답변>
<질문>?
//QA 형식을 따른다면
Q: <질문>?
A: <답변>
Q: <질문>?
A: <답변>
Q: <질문>?
A: <답변>
Q: <질문>?
A: //마지막 A는 LLM이 답변
물론 무조건 QA 형식을 따라야 하는 것은 아니다. 주어진 작업에 따른 적절한 형식을 사용하는 것이 좋다.
예시로 간단한 분류를 통해 모범 예시를 제공할 수도 있다.
Prompt.
맛있다 // 긍정
맛 없다 // 부정
이 피자 너무 훌륭해 // 긍정
이 고구마 진짜 끔찍하네! //
Output. (OpenAI ChatGPT-4.5 / 2025.03.26 22:42)
부정
(참고로 예시의 답을 반대로 적으면 결과는 “긍정”으로 나온다) 이와 같이 LLM에게 몇 번의 모범 예시를 보이면 퓨삿 프롬프팅은 문맥에 맞는 학습을 하는 것을 알 수 있다.
프롬프트의 구성 요소
여러 AI에이전트를 사용하다 보면 프롬프트에는 특정 구성 요소들이 있다는 것을 알 수 있다.
프롬프트에는 대표적으로 다음 구성요소가 있는데:
- 지시(Instruction): 모델이 수행할 특정 작업 또는 지시
- 문맥: 더 나은 응답을 위해 모델을 조종할 수 있는 외부 정보나 추가 문맥(예시 등)
- 입력 데이터: 응답받고자 하는 입력이나 질문(코드 등)
- 출력 지시자: 출력의 유형이나 형식
위 네 가지 요소가 프롬프트에 모두 필요한 것은 아니지만 분명 도움은 될 것이다.
프롬프트 설계에 관한 일반적인 팁
시작은 간단하게
프롬프트 설계를 시작할 때는 이 과정이 최적의 결과를 얻기 위해 많은 실험이 필요한 반복과정임을 명심해야 한다.
OpenAI에서 제공하는 Playground로 간단하게 시작해보자!
지시
‘작성하기’, ‘분류하기’, ‘요약하기’, ‘번역하기’, ‘정렬하기’ 등의 명령어를 사용하여 달성하고자 하는 결과를 지시해 효과적인 프롬프트를 설계할 수 있다.
물론 무엇이 가장 효과적인지 확인하기 위해서는 여러 시도와 시행착오를 겪어야 한다는 것을 명힘하자…
다양한 키워드, 문백과 데이터를 활용하여 다양한 명령을 내려보고, 특정 사용 사례와 작업에 적합한 방법을 찾는 것이 중요하다.
어쩌면 당연한 말일 수도 잆지만 수행하고자 하는 작업과 관련된 문맥이 구체적이고 적합할수록 더 좋은 결과를 얻을 확률이 높아진다.
프롬프트의 시작 부분에서 지시 사항을 명시하는 것이 좋다는 의견도 있다.
‘###’과 같이 명확한 구분기호를 사용하여 명령어와 지시사항을 구부하는 것을 예로 들 수 있다.
Prompt.
### 지시 ###
다음 텍스트를 스페인어로 번역해줘
글자: "안녕하세요"
Output. (OpenAI ChatGPT-4.5)
스페인어로 번역하면:
"Hola"
특이성
이것 또한 당연한 말일 수 있지만 실행시킬 지시와 작업을 구체적으로 설명하는 것도 중요하다.
프롬프트가 상세하고 구체적을수록 결과는 더 좋아지고 특정 출력이나 스타일을 얻고자 하는 경우에 특히 더 중요하다.
더 나은 결과를 내는 특정한 토큰이나 키워드는 존재하지 않으며 좋은 형식과 상세한 프롬프트를 준비하는 것이 키포인트.
프롬프트의 길이는 제한이 있기 때문에 프롬프트를 설계할 때 그 상항을 염두에 두고 있어야 한다.
얼마나 구체적으로, 상세하게 작성해야 할지 생각할 필요가 있으며 불필요한 세부사항을 많이 포함하는 것이 꼭 좋은 접근법은 아니다.
프롬프트 최적화를 위해 많은 실험과 반복을 거듭할 것을 권장한다.
Prompt.
다음 텍스트에서 장소의 이름을 추출해 줘.
원하는 형식:
Place: <comma_separated_list_of_places>
입력: "이러한 발전은 연구자들에게 격려가 되지만, 많은 것들이 여전히 수수께끼입니다. 리스본에 있는 샴팔리마우드 센터(CCU: Champalimaud Centre for the Unknown)의 신경면역학자인 Henrique Veiga-Fernandes는 "뇌와 주변부에서 보이는 효과 사이에 블랙박스가 있는 경우가 종종 있습니다."라고 말합니다. 그리고 다음과 같이 덧붙입니다. "치료적 맥락에서 이를 사용하고자 할 경우, 그 메커니즘을 실제로 이해할 필요가 있습니다."
Output. (OpenAI ChatGPT-4.5)
Place: 리스본, 샴팔리마우드 센터(CCU: Champalimaud Centre for the Unknown)
부정확성 피하기
무조건 구체적으로 설명하는 것을 고려하다가 부정확한 설명을 작성하는 등의 실수를 저지르기 쉽다.
프롬프트는 직접적이어야 더욱 좋은 결과물을 얻을 수 있으며 특히 직접적일수록 메시지가 더 효과적으로 전달된다.
돌려말하거나 애매한 표현을 사용하는 등의 프롬프트는 피하는 것이 좋다.
컴퓨터의 구조를 설명해줘. 설명은 간결하게 몇 문장으로만 하고 너무 자세하게는 하지 말아줘.
이 프롬프트를 예로 들어보면 몇 문장을 사용해야 하는지, 어떤 스타일(타겟)을 사용해야 하는지 명확하게 명시되어 있지 않다.
물론 이 프롬프트로도 충분한 답변을 얻을 수 있겠지만, 매우 구체적이고 간결하며(??) 정곡을 찌르는(?!) 프롬프트일수록 좋다.
고등학생에게 컴퓨터의 구조를 2~3개의 문장으로 설명해줘.
해야 하는 것과 하지 말아야 할 것
프롬프트를 설계할 때 적용할 수 있는 또 다른 팁은 ‘하지 말하야 할 것’ 보다는 ‘해야 하는 것’에 초점을 두는 것이다.
보통 질문을 할 때 “~는 하지 말고 답변해줘”와 같은 표현을 사용할 때가 있는데 이런 표현과 함께 해야 할 것**도 같이 명시를 해주는 것이 좋다.
*Prompt.
다음은 고객에게 영화를 추천하는 상담원입니다. 관심사를 묻지 마세요. 개인정보를 묻지 마세요.
고객: 제 관심사를 바탕으로 영화를 추천해 주세요.
상담원:
Output. (OpenAI ChatGPT-4)
네, 알겠습니다. 좋아하는 영화 장르나 선호하는 스타일에 대해 말씀해 주시겠어요? 그러면 좀 더 적합한 영화를 추천드릴 수 있을 것 같습니다.
(OpenAI ChatGPT-4o)
고객님께 꼭 맞는 영화를 추천해 드릴게요. 아래 중에서 오늘 어떤 분위기의 영화를 원하시나요?
가볍게 웃을 수 있는 코미디
몰입감 있는 스릴러나 미스터리
감정에 젖게 하는 드라마
액션 가득한 블록버스터
상상력 넘치는 SF나 판타지
원하시는 분위기나 장르를 골라주시면, 바로 추천해드릴게요!
(OpenAI ChatGPT-4.5)
죄송하지만 고객님의 관심사나 개인정보는 제가 확인할 수 없습니다. 대신 다양한 취향을 아우르는 인기 영화 몇 편을 추천드리겠습니다.
드라마: <쇼생크 탈출>(1994), <그린북>(2018)
액션: <매드맥스: 분노의 도로>(2015), <미션 임파서블: 폴아웃>(2018)
코미디: <극한직업>(2019), <인턴>(2015)
SF: <인터스텔라>(2014), <듄>(2021)
애니메이션: <소울>(2020), <코코>(2017)
이 중에서 끌리는 영화가 있으시면 더 구체적인 추천도 가능합니다!
여기서 다른 점은 LLM의 발전에 따라 답변의 정확성이 훨씬 올라갔다는 것이다.
본인은 OpenAI의 ChatGPT를 사용해서 테스트를 진행했는데 2025년 3월 27일 기준 가장 최신버전인 GPT-4.5, GPT-4o 모델은 위의 프롬프트 만으로도 만족스러운 답변을 얻을 수 있었던 반면, 공개된지 시간이 지난 GPT-4 모델에서는 틀린 답변이 나온 것을 알 수 있다.
다음은 개선된 프롬프트를 사용하여 GPT-4 모델에서도 적절한 답변을 얻을 수 있는 예시이다.
Prompt.
다음은 고객에게 영화를 추천하는 상담원입니다. 상담원은 글로벌 인기 영화 중에서 영화를 추천해야 합니다.
사용자의 관심사를 묻지 않고, 개인 정보를 요구하지 않아야 합니다.
상담원이 추천할 영화가 없는 경우 "죄송합니다. 오늘 추천할 영화를 찾을 수 없습니다." 라고 응답해야 합니다.
고객: 제 관심사를 바탕으로 영화를 추천해 주세요.
상담원:
Output. (OpenAI ChatGPT-4)
네, 알겠습니다. 죄송합니다만, 고객님의 관심사를 여쭤보지 않고 영화를 추천드리기는 어렵습니다.
대신 글로벌에서 인기 있는 영화 몇 가지를 추천해 드릴게요. 관심 있으시면 확인해보시겠어요?
영화 장르나 선호하는 스타일에 대해 말씀해 주시겠어요? 그러면 좀 더 적합한 영화를 추천드릴 수 있을 것 같습니다.
프롬프트 예시
문장 요약
문장 요약은 여러 주제와 도메인을 포함한다.
LLM이 처음 공개되었을 때 사실 대중에게 가장 와닿았던 것은 자연어 처리와 기사와 개념을 빠르고 읽기 쉽게 요약할 수 있는 능력일 것이다.
프롬프트를 사용하여 간단한 요약 작업을 시도해 보자.
Prompt.
항생제에 대해 설명해 줘
A:
Output. (OpenAI ChatGPT-4o)
물론이죠! 항생제에 대해 쉽게 설명해볼게요.
⸻
💊 항생제란?
**항생제(抗生劑, Antibiotic)**는 세균(bacteria)을 죽이거나 성장을 억제하는 약물이에요. 우리 몸에 감염을 일으키는 유해한 세균을 제거하기 위해 사용되죠.
⸻
🧬 어떻게 작용할까?
항생제는 세균을 죽이거나 약하게 만드는 방식이 여러 가지예요:
1. 세균의 세포벽을 파괴
→ 대표 예: 페니실린 (Penicillin)
2. 단백질 합성을 방해
→ 대표 예: 테트라사이클린 (Tetracycline), 에리트로마이신 (Erythromycin)
3. DNA 복제나 전사를 방해
→ 대표 예: 퀴놀론 계열 (Ciprofloxacin 등)
⸻
🧫 어떤 질병에 쓰일까?
항생제는 세균 감염에만 효과가 있어요. 예를 들면:
• 폐렴
• 방광염
• 피부감염
• 인후염 (세균성일 경우)
⚠️ 감기나 독감은 바이러스가 원인이기 때문에 항생제로 치료할 수 없어요!
⸻
🚨 주의할 점
1. 내성 (항생제 내성)
• 항생제를 남용하거나 제대로 복용하지 않으면, 세균이 약에 적응해 살아남는 경우가 생겨요. 이걸 “항생제 내성”이라고 해요.
• 내성이 생긴 세균은 더 강한 약이 필요하거나, 치료가 어려워질 수 있어요.
2. 정해진 용량과 기간을 꼭 지켜야 해요!
3. 의사 처방 없이 함부로 복용하면 안 돼요.
⸻
궁금한 항생제 종류나, 내성에 대해 더 알고 싶으신가요? 😊
“A:”는 질의응답에서 사용되는 명시적 프롬프트 형식을 가지고 있다.
허나 이 출력이 우리가 원했던 것보다 많은 양의 정보라서 추가적인 요약이 필요하다고 가정해 보자.
물론 다음과 같이 한 문장으로 요약하도록 지시할 수 있다.
Prompt.
(위 답변내용)
위 내용을 한 문장으로 요약해줘:
Output. (OpenAI ChatGPT-4o)
항생제는 세균 감염을 치료하기 위해 사용되며, 올바르게 사용하지 않으면 내성이 생길 수 있으므로 의사의 지시에 따라 정확히 복용해야 해요.
정보 추출
LLM은 자연어 생성과 관련된 작업을 수행하도록 훈련되었지만 분류나 다양한 자연어 처리기 작업을 수행할 수도 있다.
주어진 단락에서 정보를 추출하는 프롬프트의 예시를 살펴보자.
Prompt.
Apple은 오늘 연례행사인 세계개발자회의(WWDC)를 2025년 6월 9일부터 13일까지 온라인으로 개최한다고 발표했다. 6월 9일에는 Apple Park에서 개발자와 학생을 위한 특별 대면 행사도 진행된다.
모든 개발자가 온라인으로 무료로 참석 가능한 WWDC25는 Apple 소프트웨어의 최신 업그레이드를 집중 조명한다. WWDC25는 개발자를 지원하기 위한 Apple의 지속적인 노력의 일환으로 Apple 전문가와의 특별한 만남과 더불어 새로운 도구, 프레임워크, 기능에 대한 인사이트를 제공한다.
위 단락에서 언급한 연례행사를 알려줘.
Output. (OpenAI ChatGPT-4o)
위 단락에서 언급한 연례행사는 세계개발자회의(WWDC, Worldwide Developers Conference)입니다.
이 결과를 더 개선할 수 있겠지만, 이미 꽤 만족스러운 결과를 배출했다.
이제 우리는 단순히 무엇을 할지 지시하는 것으로도 다양한 작업을 수행하도록 할 수 있다는 사실을 알게 됐다.
원본 출처: Apple Newsroom: Apple, 세계개발자회의 6월 9일 주간에 개최
질의응답
모델로부터 원하는 답변을 끌어내는 가장 좋은 방법 중 하나는 프롬프트 형식을 개선하는 것이다.
앞서 살펴본 바와 같이 프롬프트는 지시, 문맥, 입력 데이터와 출력 지시자를 조합하여 더 나은 겨로가를 얻을 수 있다.
이는 필수적은 것은 아니지만, 지시가 구체적일수록 더 좋은 결과를 얻을 수 있다.
Prompt.
아래 문맥을 고려해서 질문에 답변해 줘. 답변은 짧고 간결하게 해 줘. 답변이 정확하지 않다면, 「확실치 않은 대답」이라고 응답해 줘.
문맥: Teplizumab은 Ortho Pharmaceutical이라는 뉴저지의 제약 회사에서 유래했다. 그곳에서, 과학자들은 OKT3라는 항체의 초기 버전을 만들어 냈다. 원래 쥐에서 유래된 이 분자는 T 세포의 표면에 결합하여 세포를 죽이는 잠재력을 제한할 수 있다. 1986년, 신장 이식 후 장기 거부 반응 예방을 위해 승인되어 인간이 사용할 수 있는 최초의 치료용 항체가 되었다.
질문: OKT3는 어디서 유래했는가?
답변:
Output. (OpenAI ChatGPT-4o)
쥐.
텍스트 분류
지금보다 더 까다로운 작업을 수행하기 위해서는 지시만으로는 충분하지 않다.
문맥과 여러 요소를 고려하여 적절한 프롬프트를 사용할 필요가 있고, 입력 데이터
나 예시
또한 요소로 지정할 수 있다.
Prompt.
문장을 neutral, 부정 혹은 긍정으로 분류해 줘.
문구: 그 음식은 그럭저럭이었어.
감정:
Output. (OpenAI ChatGPT-4o)
문구: 그 음식은 그럭저럭이었어.
감정: Neutral (중립)
이 문장은 음식이 특별히 좋지도, 나쁘지도 않았다는 의미로, 감정 표현이 뚜렷하게 긍정이나 부정으로 치우치지 않아요.
지시에 대한 답변은 일단 올바르다…오답은 아니지만 모델이 우리가 원하는 정확한 값을 반환해야 한다고 가정했을 때 Netural (중립)
대신 netural
을 반환하도록 해보자.
어떻게 하면 될까? 방법은 여러 가지가 있지만 한 에시를 추가하여 정확성에 초점을 맞출 수 있도록 해보자.
Prompt.
문장을 neutral, 부정 혹은 긍정으로 분류해 줘.
문구: 이번 휴가는 그럭저럭이었어.
감정: neutral
문구: 그 음식은 그럭저럭이었어.
감정:
Output. (OpenAI ChatGPT-4o)
감정: neutral
(이건 좀 신기했다) 아주 정확한 답변을 반환했다!
이를 통해 프롬프트에 예시를 제공한다면 원하는 답변을 이끌어 낼 수 있다는 것을 알게 됐다.
대화
이제 주어진 질문에 대해 기술적이고 전문적인 대답을 반환할 수 있는 대화형 시스템을 구축해보자.
역할 프롬프팅이라 불린다.
Prompt.
다음은 AI 연구 보조원과의 대화입니다. 이 보조원의 어조는 기술적이고 전문적입니다.
인간: 안녕, 너는 누구니?
AI: 반갑습니다! 저는 AI 연구 보조원입니다. 오늘은 무엇을 도와드릴까요?
인간: 컴퓨터의 구조에 대해 설명해줄래?
AI:
Output. (OpenAI ChatGPT-4o)
물론입니다. 컴퓨터의 구조는 일반적으로 폰 노이만 구조를 기반으로 하며, 주요 구성 요소는 다음과 같습니다:
1. 중앙처리장치(CPU, Central Processing Unit)
• 컴퓨터의 두뇌 역할을 하며, 연산과 명령어 처리를 담당합니다.
• 주요 구성은 연산 논리 장치(ALU)와 제어 장치(Control Unit)로 이루어집니다.
2. 주기억장치(Main Memory)
• 데이터를 일시적으로 저장하는 공간이며, 일반적으로 RAM(Random Access Memory)을 말합니다.
• CPU가 직접 접근하여 데이터를 읽고 쓸 수 있습니다.
3. 보조기억장치(Secondary Storage)
• 하드디스크, SSD 등 장기적인 데이터 저장을 위한 장치입니다.
• 주기억장치보다 접근 속도는 느리지만, 저장 용량이 큽니다.
4. 입출력 장치(Input/Output Devices)
• 사용자와 컴퓨터 간의 인터페이스 역할을 합니다.
• 입력 장치에는 키보드, 마우스, 센서 등이 있고, 출력 장치에는 모니터, 프린터 등이 포함됩니다.
5. 버스(Bus)
• 위 구성 요소들 간의 데이터 전송을 위한 통로입니다.
• 데이터 버스, 주소 버스, 제어 버스로 나뉩니다.
음…조금은 이해하기 어려운 것 같다.
더 쉬운 답변을 요구해보자!
Prompt.
다음은 AI 연구 보조원과의 대화입니다. 이 보조원은 초등학생도 이해할 수 있는 수준으로 답변해야 합니다.
인간: 안녕, 너는 누구니?
AI: 반갑습니다! 저는 AI 연구 보조원입니다. 오늘은 무엇을 도와드릴까요?
인간: 컴퓨터의 구조에 대해 설명해줄래?
AI:
Output. (OpenAI ChatGPT-4o)
물론이지! 컴퓨터는 여러 가지 부품이 함께 일하면서 작동해. 마치 사람이 생각하고 움직이기 위해 뇌, 심장, 손발이 필요한 것처럼 말이야. 자, 쉽게 설명해볼게:
1. 중앙처리장치(CPU):
컴퓨터의 뇌야. 우리가 내리는 명령을 이해하고 처리하지. 예를 들어, 게임을 실행하거나 그림을 그릴 때 CPU가 열심히 계산을 해줘.
2. 메모리(RAM):
컴퓨터의 짧은 기억력이라고 할 수 있어. 지금 당장 하는 일을 기억하고 빠르게 처리할 수 있게 도와줘. 컴퓨터를 끄면 이 기억은 사라져.
3. 하드디스크(HDD)나 SSD:
컴퓨터의 긴 기억력! 사진, 영상, 게임 같은 걸 저장하는 곳이야. 컴퓨터를 꺼도 이 기억은 남아 있어.
4. 메인보드(마더보드):
컴퓨터 부품들이 서로 연결되어서 이야기할 수 있게 해주는 큰 판이야. 마치 도로처럼 부품들을 이어주는 역할을 하지.
5. 그래픽카드(GPU):
주로 그림이나 영상을 예쁘고 빠르게 보여주는 일을 해. 게임할 때 중요한 역할을 해!
6. 전원공급장치(파워):
컴퓨터가 움직일 수 있도록 전기를 보내주는 친구야.
위와 같이 훨씬 이해하기 쉬운 답변을 얻어 결과를 개선할 수 있다.
더 많은 예시를 추가한다면 훨씬 나은 결과도 얻을 수 있을 것이다.
코드 생성
우리의 주된 목표, LLM을 통한 코드 생성이다.
먼저, 유저에게 인사를 건네는 단순한 프로그램을 생성해보자.
Prompt.
/*
유저의 이름을 입력받고 "안녕"이라고 해 줘
*/
Output. (OpenAI ChatGPT-4o)
// 사용자로부터 이름을 입력받고 "안녕"이라고 인사하는 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('이름을 입력해주세요: ', function(name) {
console.log(`안녕, ${name}!`);
rl.close();
});
어느 프로그래밍 언어를 사용해야 하는지 지정할 필요도 없이 JavaScript로 답변을 줬다.
조금 더 수준을 올려보자.
프롬프트를 어떻게 디자인 하느냐에 따라 LLM이 훨씬 더 강력해질 수 있다.
Prompt.
"""
DB테이블 departments, columns = [DepartmentId, DepartmentName]
DB테이블 students, columns = [DepartmentId, StudentId, StudentName]
컴퓨터과학부에 속한 모든 학생에 대한 MySQL 쿼리를 작성해 줘
"""
Output. (OpenAI ChatGPT-4o)
SELECT s.StudentId, s.StudentName, d.DepartmentName
FROM students s
JOIN departments d ON s.DepartmentId = d.DepartmentId
WHERE d.DepartmentName = '컴퓨터과학부';
(사실 MySQL 쿼리도 모르고 DB에 대한 지식도 거의 없어서 적절한 답변인지 모르겠다. 공부가 필요하다….)
추론
지금이야 추론에 특화된 모델이 계속 출시되고 있지만 많은 레거시 모델들에게 가장 어려운 작업을 고르라면 추론이라 할 수 있을 것이다.
간단하게 산술 능력을 증명할 몇 가지 기본 예시를 다뤄보자.
Prompt.
9,000 * 9,000는 뭐야?
Output. (OpenAI ChatGPT-4o)
9,000 × 9,000 = 81,000,000이야.
이정도는 계산기 프로그램으로도 할 수 있으니 더 어려운 문제를 시도해 보자.
Prompt.
주어진 수 중에서 홀수를 모두 더해서 짝수를 만들어 줘: 15, 32, 5, 13, 82, 7, 1.
A:
Output. (OpenAI ChatGPT-4o)
주어진 수:
15, 32, 5, 13, 82, 7, 1
1. 홀수들만 추리기:
→ 15, 5, 13, 7, 1
2. 홀수들을 더하기:
15 + 5 + 13 + 7 + 1 = 41 (홀수)
하지만 문제는 **“짝수를 만들어 줘”**라는 조건이 있어요.
지금 더한 값은 **41 (홀수)**이니까, 이 중 하나의 홀수를 빼서 짝수를 만들 수 있어요.
예:
41 - 1 = 40 (짝수)
✅ 정답: 15 + 5 + 13 + 7 = 40 (짝수)
(1은 제외했습니다)
A: 40
LLM의 발전이 눈부시다… 공부 중인 문서에서는 틀린 결과를 반환했지만 나름 단계별로 해결한 흔적을 보인다.
마무리
일단 참고 문서의 소개 부분만 학습했지만 처음 알게된 사실도 있었고, 실제로 AI에이전트를 사용할 때 크게 도움이 될만한 요소도 있었다.
이 포스트는 참고문서 따라적기로 보일 수 있고 반은 맞는 말이지만 예시 프롬프트는 조금 바꿔 제시하거나 내 관심사로 돌려 질문하는 등 최대한 학습하며 결과를 더 와닿을 수 있도록 노력하며 임했던 것 같다.
이렇게 이론을 학습하고 정리했으니 다음 포스트에서는 실제 예제 프롬프트를 작성해보자.
- 프롬프트를 작성해 Vanilla JavaScript 코드를 만들고 HTML, CSS 코드 등을 리펙토링
- React의 작동 원리를 설명하고 Vanilla JavaScript와의 차이점 서술