3.F. 예시 제공하기
3.F. 예시 제공하기🔗
백문이 불여일견이라는 말처럼, 때로는 어떤 구체적인 지시보다 하나 또는 몇 개의 예시가 더 효과적일 수 있습니다. '예시 제공하기'는 LLM에게 원하는 출력 형식이나 스타일을 명확히 전달하는 효과적인 프롬프트 엔지니어링 기법입니다. 이는 LLM이 사용자의 질문에 어떻게 응답해야 하는지 구체적인 예를 통해 보여주고 모방하여 유사한 결과를 생성하도록 유도하는 방법입니다.
알고 보면 '예시 제공하기'는 '명확하고 구체적으로 지시하기'의 한 형태이자 '역할 부여하기'의 연장선상에 있는 기법으로 볼 수 있습니다. 이 기법은 항상 필요하다기 보다 다른 기법과 조합하여 보완적 수단으로 사용하면 효과적입니다.
즉, 일반적으로는 명확한 지시나 역할 부여 같은 정도로 충분할 수 있지만, 때에 따라서는 원하는 출력 형식, 스타일, 톤 등을 직접 보여주는 것이 더 효과적입니다. 특히 직관적으로 묘사하기 어려운 스타일이나 톤에 대해서는 구체적인 지시가 오히려 LLM의 동작에 혼선을 끼칠 수 있고, 예시로 보여주고 따라하도록 만드는 게 빠르고 정확할 수 있습니다.
💭 한편 상황에 따라선 적절한 예시라는 게 없을 수도 있고, 어떤 예시가 있더라도 그것이 적절한지 판단하기 어려운 경우도 있습니다. 이런 경우라면 이 섹션의 내용을 굳이 참고할 필요 없이 다음 섹션으로 건너뛰어도 좋습니다.
* AI 생성 이미지 with Nano Banana Pro
기본적으로 '예시 제공하기' 기법은 원하는 형식의 '질문-답변' 또는 '답변' 예시를 질문에 포함시키는 것이면 충분하며, 다음 사항들을 참고/유의해 사용하면 효과를 높일 수 있습니다.
-
예시의 품질: 제공하는 예시가 원하는 출력의 품질을 정확히 반영해야 합니다.
-
다양성: 가능하다면 여러 예시를 제공하여 모델이 패턴을 더 잘 이해하도록 합니다.
-
관련성: 예시는 실제 작업과 관련이 있어야 합니다.
-
균형: 너무 많은 예시는 오히려 혼란을 줄 수 있으므로 적절한 수의 예시를 제공합니다.
간단한 예시를 한 번 보겠습니다.
다음과 같은 형식(example 태그)으로 영화를 추천해줘.
<example>
제목: 인셉션
장르: SF, 액션
한 줄 소개: 꿈 속의 꿈을 넘나드는 작품, 현실과 환상의 경계를 허문다.
</example>
이렇게 공포 영화를 하나 추천해봐.
위 예시에선 앞에서 설명한 '구분 기호(중 태그) 사용하기'를 사용해 참조할 예시를 정확히 지정했습니다. 비슷한 다른 예시를 다른 LLM으로도 테스트해보겠습니다.
다음 명언을 현대적 관점에서 간단히 해석해봐. 예를 들면,
- 명언 : "생각한다, 고로 존재한다." - 데카르트
- 해석 : 자기 의식과 사고 능력이 인간 존재의 본질임을 강조. 오늘날 AI 시대에 인간성에 대한 새로운 고찰을 요구한다.
이제 "아는 것이 힘이다" - 프랜시스 베이컨의 명언을 같은 방식으로 해석해볼래?
앞서 설명할 때는 이 기법이 조금 특별하거나 까다로운 스타일로 답변을 받고 싶을 때 효과적이라고 예를 들었는데, 그와 같은 예시를 드는 것도 테스트해보면 다음과 같습니다.
다음은 역사적 인물과의 가상 인터뷰 예시야. 이 스타일을 따라 다른 역사적 인물과의 인터뷰를 작성해보려고 해.
예시 인물: 레오나르도 다 빈치
예시 인터뷰:
Q: 다 빈치 씨, 당신을 '르네상스의 대표적 인물'이라고 부르는데 어떻게 생각하시나요?
A: (미소지으며) 과찬이십니다. 저는 단지 호기심 많은 사람일 뿐입니다. 세상의 모든 것이 연결되어 있다고 믿었죠. 그래서 예술, 과학, 공학 등 다양한 분야를 탐구했을 뿐입니다.
Q: 가장 자랑스러운 업적은 무엇인가요?
A: 어려운 질문이군요. 모나리자? 최후의 만찬? 아니면 비행 기계 설계? (잠시 생각에 잠기며) 사실 저는 완성보다 과정을 더 중요하게 여겼습니다. 끊임없이 질문하고, 관찰하고, 상상하는 그 과정 자체가 제 인생의 가장 큰 업적이라고 할 수 있겠네요.
Q: 현대 사회를 본다면 어떤 생각이 드실 것 같나요?
A: (눈을 크게 뜨며) 오, 얼마나 흥미진진할까요! 비행기, 컴퓨터, 우주 탐사... 제가 꿈꾸던 것들이 현실이 되었군요. 하지만 동시에 자연과의 조화를 잃어가는 모습도 보입니다. 기술의 발전과 자연의 보존 사이의 균형, 그것이 현대인들의 과제가 아닐까요?
이제 같은 스타일로 "리차드 파인만"과의 인터뷰를 작성해봐.
만약 위와 같은 경우에 '예시 제공하기'를 사용하지 않는다면 어떻게 지시할 수 있을지 생각해봅시다. 구체적인 상황과 맥락 설명과 함께 '역할 부여하기'가 가장 가까운 대안이 될 수 있겠지만, 한 번에 원하는 답변을 얻기는 어려울 것입니다.
그런데, 때로는 LLM에게 구체적이고 직접적인 예시를 제공하기 어려운 상황에 직면할 수 있습니다. 이런 경우에는 다음과 같은 방법을 통해 원하는 답변을 얻을 수 있습니다.
반복 지시하기🔗
굳이 '예시 제공하기'가 아니라 일반적으로도 흔히 사용할 수 있는 기법입니다. 만약 LLM의 초기 답변이 만족스럽지 않다면, 피드백을 제공하고 다시 시도하도록 요청하는 것입니다. 이 과정을 통해 점진적으로 원하는 답변에 근접할 수 있습니다. 예를 들면,
사용자: 창의적인 방식으로 "지구 온난화"에 대해 설명해줘.
LLM: 지구 온난화는 지구의 평균 기온이 상승하는 현상으로, 주로 인간 활동으로 인한 온실가스 배출 증가가 원인입니다.
사용자: 그건 너무 일반적인 설명이야. 더 창의적으로 설명해볼래? 예를 들어, 비유를 사용한다든지?
LLM: 알겠습니다. 비유를 사용해 다시 설명해보겠습니다.
지구 온난화는 마치 지구가 점점 더 두꺼운 담요를 덮어가는 것과 같습니다. 온실가스들이 대기 중에 쌓여 마치 담요처럼 지구를 감싸고 있어요. 처음에는 따뜻하고 포근할 수 있지만, 담요가 너무 두꺼워지면 지구는 숨을 쉬기 어려워지고 점점 더 더워집니다.
사용자: 좋아! 이번에는 좀 더 재미있게, 예를 들어 동화 같은 느낌으로 설명해볼 수 있어?
LLM: 물론이죠! 동화 스타일로 설명해보겠습니다.
옛날 옛적에, '지구'라는 이름의 아름다운 행성이 있었어요. 지구는 항상 적당히 시원하고 따뜻한 완벽한 온도를 유지하고 있었답니다. 그런데 어느 날, '온실가스'라는 장난꾸러기 요정들이 나타나기 시작했어요. 이 요정들은 지구 주변에 보이지 않는 담요를 만들기 시작했죠.
처음에는 지구가 포근하다고 느꼈어요. 하지만 요정들이 점점 많아지면서 담요는 자꾸 두꺼워졌고, 지구는 점점 더 덥고 불편해졌어요. 동물들과 식물들도 이 변화를 느끼기 시작했죠.
지구를 사랑하는 어린이들이 이 사실을 알게 되었어요. 그들은 온실가스 요정들을 줄이기 위해 나무를 심고, 쓰레기를 줄이고, 에너지를 아끼기 시작했답니다. 과연 어린이들은 지구를 시원하고 행복하게 만들 수 있을까요?
재작성 요청하기🔗
어떤 경우엔 LLM의 전체 답변 중에서 일부분만 마음에 들 수 있습니다 (또는 그 반대). 이런 경우, 좋았던 부분을 언급하고 나머지 부분의 재작성을 요청하거나, 마음에 들지 않는 특정 부분만 콕 찝어 재작성을 요청할 수 있습니다. 예를 들면,
사용자: 건강한 생활 습관에 대해 5가지 팁을 줄 수 있나요?
LLM: [5가지 팁을 나열합니다]
사용자: 좋은 팁들이에요. 하지만 3번째와 5번째 팁이 조금 일반적인 것 같아요. 이 두 가지를 좀 더 구체적이고 실천하기 쉬운 팁으로 바꿔줄 수 있나요?
LLM: [3번째와 5번째 팁을 수정하여 다시 제시합니다]
사용자: 훨씬 좋아졌어요! 이제 전체적으로 각 팁에 대해 실천 방법을 한 문장씩 추가해주면 완벽할 것 같아요.
LLM: [각 팁에 실천 방법을 추가하여 최종 버전을 제시합니다]
💭 일반적으로 기계 학습 기법에서 정의되는 'one-shot', 'few-shot'의 개념을 LLM에선 '예시 제공하기'에 비유하고 있습니다. 예시를 한 번 제공하여 답변을 요청하는 경우를 'one-shot', 여러 번 제공하여 답변을 요청하는 경우를 'few-shot'이라고 하는 것입니다.
이와 비슷한 개념인 'zero-shot'은 어떨까요? 예시를 전혀 주지 않은 꼴이니 그냥 '구체적 지시'나 '역할 부여' 정도에 비유할 수 있겠습니다.
이러한 방법들을 통해, 처음에는 정확한 예시를 제공하기 어려웠더라도 점진적으로 원하는 형태와 내용의 답변을 얻을 수 있습니다. 이 과정에서도 역시 중요한 점은 구체적인 피드백을 제공하고, 원하는 방향을 명확히 제시하는 것입니다.
(고급반) ASSISTANT 메시지로 답변 예시 지정하기🔗
앞 장의 '역할 부여하기'에서 시스템 메시지를 이용한 방법과 유사하게, 예시를 제공하기 위해 어시스턴트 메시지를 이용하는 방법도 있습니다.
앞서 정리한 표에서 어시스턴트 메시지는 '모델의 응답을 나타냅니다. 사용자 메시지에 대한 모델의 답변이나 예시 응답으로 사용됩니다.'라고 했는데, 이걸 (사람이) 어떻게 입력한다는 건지 의아할 수 있습니다. 하지만 대부분의 LLM API나 개발 도구에서는 이 어시스턴트 메시지도 사용자가 직접 입력할 수 있도록 지원합니다!
예를 들면 다음과 같습니다.
system :
Answer in a consistent style.
user :
Teach me about patience.
assistant :
The river that carves the deepest valley flows from a modest spring; the grandest symphony originates from a single note; the most intricate tapestry begins with a solitary thread.
user :
Teach me about the ocean.
-
첫 번째,
system메시지: 일관된 스타일로 답변하라는 기본 규칙을 정의합니다. -
두 번째,
user메시지: '인내에 대해 가르쳐줘'라는 내용으로 사용자가 입력한 질문 예시입니다. -
세 번째,
assistant메시지: 위 질문에 대해 사용자가 직접 입력한 답변 예시입니다. -
네 번째,
user메시지: 위 예시대로 답변하는지 테스트용으로 입력한 질문입니다.
실제로 테스트해보면 다음 그림과 같은 결과를 얻을 수 있습니다. (또는 이 링크, 로그인 필요)
영어라서 해당 스타일을 잘 따라한 것인지 판단하기가 어렵습니다. 방금 예시와 정확히 같은 방식으로 다른 예시(a.k.a. '원영적 사고')를 알려준 결과는 다음과 같습니다. (또는 이 링크, 로그인 필요)
마지막 USER 메시지로 '날씨가 흐리네'와 같은 질문에 대해 얼추(?) 비슷한 스타일의 답변을 적절히 따라하는 것을 볼 수 있습니다. 혹시 추가적인 예제나 세부 지시를 더 제공한 다음 질문을 해본다면 좀 더 그럴싸한 답변도 기대할 수 있을 것입니다.






