Intro
안녕하세요, 인핸스(Enhans)입니다.
ChatGPT 등 LLM(대형 언어 모델)을 기반으로 하는 서비스는 세상에 나온 지 얼마 되지 않았지만, 이미 많은 사람들이 일상적인 대화부터 복잡한 문제 해결까지 다양한 용도로 사용하고 있습니다. 하지만 때때로 사용하다가 원하는 답변을 얻어내지 못하여 답답한 경험을 할 때도 있습니다. LLM에서 원하는 답을 얻어내기 위해 입력하는 질문을 프롬프트(prompt)라고 부르는데요, 프롬프트는 말 그대로 '아 다르고 어 달라서' 잘 쓰는 것이 매우 중요합니다.
원하는 결괏값을 얻기 위해 질문(프롬프트)을 잘 구성하고 조정하는 것을 프롬프트 엔지니어링(prompt engineering)이라고 부르며, 프롬프트 엔지니어링은 LLM의 능력을 최대한 활용하기 위한 핵심 기술입니다.
이 분야는 현재 매우 활발히 연구되고 있으며, 프롬프트 엔지니어링 가이드 관련 웹사이트 중 가장 유명한 사이트인 promptingguide.ai에 등록된 논문만 해도 최근 2년 사이에 400개(LLM이 아니라 프롬프트 엔지니어링만으로 범위를 한정 지었는데도!)가 넘습니다. 이는 프롬프트 엔지니어링이 얼마나 중요한지 잘 보여줍니다.
이번 글에서는 개발자가 아니더라도 ChatGPT 등의 채팅 기반 LLM 서비스에서 간단히 써볼 수 있는 여러 가지 기법을 소개하려고 합니다. 이번 글에서 소개해 드리는 기법을 활용하여 LLM과 더 효과적으로 소통하고, 보다 나은 결과를 얻을 수 있는 방법을 같이 탐구해 보면 좋을 것 같습니다. 또 프롬프트를 잘 작성하는 법을 익히게 되면, 이 글을 읽고 계신 여러분도 LLM의 강력한 기능을 최대한 활용할 수 있을 것입니다.
이제 LLM과 친해지고, 더 나은 결과를 얻을 수 있는 방법을 함께 알아볼까요?
프롬프트의 구조 이해하기
프롬프트 엔지니어링의 첫걸음은 프롬프트의 구조를 이해하는 것입니다.
프롬프트는 주로 두 가지 1. 시스템 프롬프트(system prompt)와 2. 사용자 프롬프트(user prompt)로 구성됩니다.
1. 시스템 프롬프트 (System Prompt)
시스템 프롬프트는 AI 모델의 전반적인 행동과 반응 방식을 설정합니다. 이는 모델에게 주어진 기본적인 가이드로, 응답의 톤, 스타일, 그리고 내용의 범위를 결정짓는 데 큰 역할을 합니다. 예를 들어, "친절하고 이해하기 쉽게 3문단 이내로 설명해 주고, 의견을 주장하는 부분에 대해서는 참고 자료를 덧붙여줘"라고 설정하면, AI 모델은 사용자가 입력하는 모든 질문에 대해 설정된 가이드에 따라 답변을 생성합니다.
하지만 일반적으로 ChatGPT에서는 사용자가 시스템 프롬프트를 직접 설정할 수는 없지만, 최근에 '내 GPT 만들기' 기능이 도입되면서, 사용자가 직접 시스템 프롬프트를 쉽게 작성하고 커스터마이즈 할 수 있게 되었습니다. 이를 통해 사용자에 맞게 개인화하여 ChatGPT를 활용할 수 있습니다.
This GPT is designed to assist users in writing technology blog posts about LLM and AI Agents in a way that is easy for the general public to understand.
It should provide clear, engaging explanations, avoiding overly technical jargon, and should use a friendly, conversational tone in Korean.
It should break down complex concepts into simple terms, using analogies and examples where appropriate, and offer tips on structuring the content to maintain reader interest.
It should use a more casual tone, using phrases like '해요' and '합니다' to make the content feel more approachable.
If more details or clarifications are needed, it should ask for more information or fill in the gaps as necessary.
It should ensure that drafts are easy for the general public, who may have only heard of LLM or chatbots, to understand.
사실 이 글도 이 시스템 프롬프트를 기반으로 작성했습니다!
2. 사용자 프롬프트 (User Prompt)
이번 글에서 조금 더 자세하게 다뤄보고 싶은 것은 사용자 프롬프트입니다. 사용자 프롬프트는 LLM이 실제로 처리하고 응답해야 할 질문이나 요청을 의미합니다. 즉 우리가 흔히 생각하는 질문 형식의 프롬프트입니다.
사용자 프롬프트는 구체적일수록 더 명확하고 정확한 답변을 받을 수 있습니다.
예를 들어, "로마 제국의 멸망 원인은 무엇이야?"와 같은 질문이 여기에 해당합니다. 사용자 프롬프트는 대화의 맥락에 따라 다양하게 변할 수 있으며, 모델이 정확한 답변을 제공할 수 있도록 구체적이고 명확하게 작성하는 것이 중요합니다.
보다 나은 사용자 프롬프트를 작성하기 위해 다음과 같은 점들을 고려해 볼 수 있습니다:
- 구체성: 질문이 구체적일수록 모델이 더 정확한 답변을 제공합니다. 예를 들어, "로마 제국의 멸망 원인은 무엇이야?"보다는 "로마 제국의 멸망 원인 중 경제적인 요인은 무엇이야?"라고 질문하면 더 구체적인 답변을 얻을 수 있습니다.
- 명확한 요구사항: 질문에 필요한 정보나 기대하는 답변의 형식을 명확히 입력해 보세요. 예를 들어,"로마 제국의 멸망 원인 중 경제적 요인을 세 가지 예로 들어 설명해 줘"라고 하면 모델이 더 구체적인 정보를 제공할 수 있습니다.
- 맥락 제공: 필요한 경우, 이전 대화나 질문과의 연관성을 명확히 하는 것이 도움이 됩니다. 예를 들어,"역사 수업에서 로마 제국의 멸망에 대해 배우고 있어. 경제적 요인을 중심으로 로마 제국이 멸망한 이유를 설명해 줘. 아 맞다. 선생님은 이상하게도 서로마가 아니라 신성로마제국만을 로마 제국으로 인정하더라고"라고 입력하면 모델이 대화의 맥락을 더 잘 이해하고 명확한 답변을 제공합니다.
쉽게 써볼 수 있는 프롬프트 테크닉
이제 프롬프트의 기초를 이해했으니, 프롬프트 엔지니어링을 실제로 적용해 보는 다양한 기법을 살펴보겠습니다.
여기서는 Few-Shot Prompting과 Chain-of-Thought(CoT)라는 두 가지 기법을 소개하고자 합니다.
이 두 가지를 잘 활용하면 LLM을 더욱 효과적으로 사용할 수 있습니다.
Few-Shot Prompting
Few-Shot Prompting은 LLM에게 몇 가지 예시만 주어도 이를 바탕으로 새로운 문제를 해결할 수 있게 하는 기법입니다. 마치 사람이 새로운 개념을 배울 때, 몇 가지 예제를 통해 그 개념을 이해하고 유사한 문제를 해결하는 것과 비슷합니다.
건강 블로그 글에서 관련 정보를 요약하고 태그를 추출한 후, 이를 바탕으로 추가적인 분석을 수행하고 싶을 때 Few-Shot Prompting을 활용할 수 있습니다. 아래 예시처럼 간단히 질문만 입력하면 다음과 같은 결과를 얻을 수 있습니다.
User Prompt:
'이 요가는 유연성을 높이고, 마음을 안정시켜줘요'. 여기서 태그를 추출해 줘.
Response:
주어진 문장에서 태그를 추출하면 다음과 같습니다:
- 요가
- 유연성
- 마음
- 안정
이렇게 간단한 방법으로 태그 추출이 가능하지만, 사용자가 원하는 형식과 일치하지 않을 수도 있습니다.
지금부터는 Few-Shot Prompting을 사용하여 태그 추출을 좀 더 정제된 방식으로 시도해 보겠습니다.
아래 예시 문장과 태그를 추가로 제공하여 모델이 패턴을 참조하도록 도와줍니다.
User Prompt:
'이 요가는 유연성을 높이고, 마음을 안정시켜줘요'. 여기서 태그를 추출해 줘. 다른 문장 및 태그 예시는 다음과 같으니 참조해 줘.
- "문장: '이 명상은 마음의 평화를 가져다주고, 집중력을 높여줘요.' -> 태그: '마음의 평화', '집중력 증가'"
- "문장: '이 식단은 소화를 돕고, 에너지를 증가시켜요.' -> 태그: '소화 촉진', '에너지 증가'"
- "문장: '이 수면 팁은 숙면을 돕고, 피로를 줄여줘요.' -> 태그: '숙면 도움', '피로 감소'"
- "문장: '이 스트레칭은 근육을 풀어주고, 유연성을 향상시켜줘요.' -> 태그: '근육 이완', '유연성 향상'"
- "문장: '이 비타민은 면역력을 높이고, 피로 회복에 좋아요.' -> 태그: '면역력 강화', '피로 회복'"
Response:
"문장: '이 요가는 유연성을 높이고, 마음을 안정시켜줘요.' -> 태그: '유연성 향상', '마음 안정'"
이처럼 Few-Shot Prompting을 사용하니, 원래 갖고 있는 데이터의 형식과 부합하는, 특히 '유연성 향상'이라는 키워드를 활용한 정제된 답변을 얻을 수 있었습니다. 이러한 결과는 데이터 분석과 요약에 매우 유용하게 활용될 수 있습니다.
Chain-of-Thought (CoT)
Chain-of-Thought (CoT) 기법은 복잡한 문제를 해결할 때, 문제를 단계별로 나누어 하나씩 해결해 나가는 방법입니다. 이는 마치 수학 문제를 풀 때 한꺼번에 답을 찾기보다는 문제를 작은 단위로 나누어 단계적으로 접근하는 것과 비슷하며, 특히 복잡한 논리적 문제나 다단계 추론이 필요한 상황에서 유용합니다.
Large Language Models are Zero-Shot Reasoners 논문에서는 프롬프트에 "Let's think step by step"이라는 어구를 추가하는 것만으로도 모델의 성능이 크게 향상된다는 사실을 발견하였습니다. 이는 매우 간단한 접근이지만, LLM의 논리적 추론과 문제 해결 능력을 크게 개선할 수 있어 큰 반향을 일으켰습니다.
Chain-of-Thought 기법은 Few-Shot Prompting과 연계하여 사용도 가능합니다. 예시 문장을 제공하면서 단계별로 문제를 해결하는 방식을 학습하게 하면, LLM이 새로운 문제가 주어졌을 때 비슷한 논리 흐름으로 문제를 더 잘 풀 수 있게 됩니다. 예를 들어, 수학 문제를 해결할 때 단계별로 풀이 과정을 제시하면, 모델이 유사한 문제를 만났을 때 그 단계를 따라가며 해결책을 도출하는 방법과 유사합니다.
마치며
이번 글에서는 Few-Shot Prompting과 Chain-of-Thought(CoT)라는 두 가지 프롬프트 엔지니어링 기법을 소개해드렸는데 프롬프트 작성에 도움이 되셨나요? 이 두 가지 기법을 활용하면 LLM을 더 효과적으로 사용할 수 있고, 원하는 결과를 보다 쉽게 얻을 수 있습니다. 특히, 건강 블로그 글에서 정보를 요약하고 태그를 추출하는 예시를 통해 이 기법들이 어떻게 실제로 적용될 수 있는지 보여드렸습니다.
이 외에도 다양한 프롬프트 엔지니어링 관련 기법들이 있으며, 이를 통해 인핸스의 비전처럼 우리의 소중한 시간을 더욱 가치 있게 사용할 수 있습니다. 이번 글이 여러분께 조금이나마 도움이 되었기를 바라며, 앞으로도 더욱 유익한 정보와 기술을 인핸스 블로그를 통해 소개해 드릴 수 있기를 기대하며 많은 관심 부탁드립니다!
감사합니다!
in solving your problems with Enhans!
We'll contact you shortly!