Few-shot 프롬프팅은 실제 입력을 주기 전에, 입력과 원하는 답의 쌍으로 된 작업 예시 몇 개를 모델에게 보여 주는 방법입니다. 모델은 패턴을 읽고 그것을 이어 갑니다. 예시는 말로 하기 어려운 것을 못 박는 가장 빠른 방법입니다. 두 분류 사이의 경계가 어디인지, 출력의 정확한 모양이 무엇인지, 팀이 어떤 목소리로 글을 쓰는지 같은 것들입니다.
Few-shot 프롬프팅의 원리
Brown 등의 2020년 논문 "Language Models are Few-Shot Learners"는 GPT-3가 다시 학습하지 않고도 프롬프트에 넣은 몇 개의 시연만으로 새 작업을 익힐 수 있음을 보였습니다. 이것을 인컨텍스트 러닝(in-context learning)이라고 합니다. 모델 자체는 아무것도 바뀌지 않고, 예시는 그 프롬프트 하나에 대한 답변에만 영향을 줍니다. 다음번에는 예시를 다시 넣어야 합니다.
이름은 예시의 개수를 따릅니다. 제로샷 프롬프트에는 예시가 없고, 원샷 프롬프트에는 하나, few-shot 프롬프트에는 여러 개, 보통 두 개에서 몇 개 사이가 들어갑니다.
제로샷과 few-shot 나란히 비교하기
아래 두 탭은 같은 지시로 같은 것을 요청합니다. 유일한 차이는 두 번째 탭이 실제 티켓 앞에 라벨이 붙은 예시 네 개를 더한다는 것입니다.
분류: bug
사용자가 비밀번호를 재설정했지만 로그인할 때 새 비밀번호가 거부되고 있습니다. 비밀번호 재설정 흐름에 문제가 있다는 뜻이므로, 인증 시스템의 버그일 가능성이 가장 높습니다.
예시가 두 가지를 바꿨습니다. 첫째는 형식입니다. 제로샷 답변은 굵은 제목과 설명을 붙였지만, few-shot 답변은 예시에 맞춰 단어 하나만 돌려줬고, 스크립트가 이를 바로 읽을 수 있습니다. 둘째는 판단입니다. "bug"는 이 티켓에 대한 합리적인 해석이고, 대부분의 사람이 그렇게 고를 것입니다. 하지만 이 팀은 로그인 문제를 account로 분류하고, 세 번째 예시가 설명 한마디 없이 그 사실을 알려 줍니다. 그 규칙을 언급한 지시는 없었고, 예시가 그 규칙을 전달했습니다.
예시는 몇 개가 좋을까
2~5개로 시작하세요. 대부분의 형식 지정과 분류 작업에 충분하고 프롬프트도 짧게 유지됩니다.
- 예시 하나는 형식을 보여 주지만 모델이 너무 그대로 따라 하는 경향이 있습니다. 유일한 예시가 가격 변경에 대한 30단어짜리 요약이라면, 다음 요약도 30단어로 나오고 이상하게 돈 이야기에 집중할 수 있습니다.
- 서로 다른 예시 두세 개를 주면 모델이 공통점(패턴)과 달라지는 부분(세부 사항)을 구분할 수 있습니다.
- 분류 작업에서는 라벨마다 최소 하나의 예시를 넣고, 예시 없이 틀렸던 애매한 경우를 더하세요.
- 몇 개를 넘어가면 효과는 보통 줄어들고 요청마다 길어져서 토큰과 시간이 듭니다. 제대로 하려면 예시가 수십 개 필요하다면, 그 작업에는 더 명확한 지시나 아예 다른 접근이 필요할 수 있습니다.
좋은 예시 고르기
모델은 여러분이 가르치려던 것만이 아니라 예시들의 모든 공통점에서 배웁니다.
- 어려운 경우를 포함하세요. 쉬운 예시는 가르치는 것이 적습니다. 가장 쓸모 있는 예시는 위의 로그인 티켓처럼 경계에 있습니다.
- 겉모습을 다양하게 하세요. 짧은 입력과 긴 입력, 다른 주제, 다른 표현을 섞으세요. 예시 속 긍정 리뷰가 모두 짧다면 모델은 길이를 신호로 여길 수 있습니다.
- 라벨의 균형을 맞추고 순서를 섞으세요. 모델은 예시에 가장 자주 나오는 라벨과 마지막에 나오는 라벨 쪽으로 기우는 경향이 있습니다.
- 모든 예시를 확인하세요. 예시 속 실수는 그 실수를 하라는 지시입니다.
- 실제 입력을 쓰세요. 실제 데이터에서 가져온 예시가 지어낸 예시보다 모델이 보게 될 입력과 훨씬 잘 맞습니다.
형식을 똑같이 유지하기
모든 예시는 같은 라벨, 구분자, 대소문자를 써야 하고, 실제 입력은 예시 입력과 똑같은 모습이어야 합니다. 티켓 프롬프트에서 각 예시는 "티켓:" 다음에 "라벨:"이 오고, 프롬프트는 비어 있는 "라벨:" 줄로 끝납니다. 그래서 다음에 쓸 자연스러운 내용이 하나만 남습니다.
예시가 길다면 <example> 태그 같은 명확한 표시로 각 예시를 감싸서, 모델이 한 예시가 어디서 끝나고 다음 예시가 어디서 시작되는지 알 수 있게 하세요. 구분자와 XML 태그를 참고하세요. API에서는 예시를 대화의 이전 턴으로 넣을 수도 있습니다. 예시 입력을 담은 사용자 메시지, 그다음 답을 담은 어시스턴트 메시지를 예시마다 반복하는 방식입니다.
Few-shot 프롬프트는 재사용하기 좋은 프롬프트 템플릿이 됩니다. 지시와 예시는 고정해 두고 입력만 바꾸면 됩니다. 아래 블록은 커밋 메시지를 팀 스타일로 다시 씁니다. 입력칸에 여러분의 메시지를 넣고, 예시 부분을 꺼서 스타일의 얼마만큼을 예시가 전달하는지 확인해 보세요.
feat(search): 검색창 대소문자 구분 없이 검색하도록 변경
규칙은 어디에도 적혀 있지 않습니다. 소문자 타입, 괄호 안의 범위, "추가", "수정"처럼 명사로 끝맺는 요약, 마지막 마침표 없음. 예시가 이 네 가지를 모두 보여 주고, 답변은 그것을 따릅니다. 예시를 끄면 모델은 여전히 메시지를 개선하지만 스타일을 추측해야 하고, 그 추측이 여러분의 스타일과 맞으리라는 보장은 없습니다.
Few-shot 예시는 답뿐 아니라 추론도 보여 줄 수 있습니다. 풀이 단계를 보여 주는 예시가 바로 생각의 사슬(CoT) 프롬프팅이 처음 소개된 방식입니다. 답하기 전에 내부적으로 추론하는 모델에는 예시를 입력, 답, 형식으로만 제한하세요. 대본처럼 짜 놓은 추론 단계가 모델을 더 나은 경로에서 벗어나게 할 수 있고, 일부 제공사는 이런 모델에서는 제로샷을 먼저 시도해 보라고 권장합니다.
자주 묻는 질문
Few-shot 프롬프팅이란 무엇인가요?
Few-shot 프롬프팅은 실제 입력 앞에 작업 예시 몇 개, 즉 입력과 올바른 출력의 쌍을 프롬프트에 넣는 방법입니다. 모델은 예시가 만든 패턴을 이어 갑니다. 설명보다 보여 주기가 쉬운 자체 분류 기준, 특이한 형식, 사내 스타일에 가장 쓸모 있습니다.
Few-shot 프롬프트에는 예시를 몇 개 넣어야 하나요?
대부분의 작업에서는 2~5개가 좋은 출발점입니다. 분류 작업이라면 라벨마다 최소 하나씩 넣고, 예시 없이 모델이 틀렸던 애매한 경우를 더하세요. 몇 개를 넘어가면 예시를 하나 더할 때마다 효과는 보통 줄어들고 요청은 매번 길어집니다.
원샷 프롬프팅이란 무엇인가요?
원샷 프롬프팅은 모델에게 예시를 정확히 하나만 주는 방법입니다. 형식을 보여 주기에는 충분하지만, 모델이 그 예시 하나를 길이, 표현, 심지어 주제까지 너무 그대로 따라 하는 경향이 있습니다. 다른 예시를 하나 더 주면 어떤 특징이 패턴이고 어떤 것이 우연인지 모델이 알 수 있습니다.
모델이 제 예시로 학습하나요?
현재 요청에서만 그렇습니다. 예시는 컨텍스트 안에 있음으로써 답변에 영향을 줄 뿐, 모델의 가중치는 바뀌지 않고 다음 대화에서는 아무것도 기억하지 않습니다. 이것을 인컨텍스트 러닝(in-context learning)이라고 하며, few-shot 프롬프트를 쓸 때마다 예시를 함께 넣어야 하는 이유입니다.
나쁜 예시가 출력을 더 나쁘게 만들 수 있나요?
그렇습니다. 모델은 예시들의 공통점을 모두 따라 하는데, 여기에는 실수, 의도하지 않은 길이와 말투도 포함됩니다. 예시 대부분이 같은 라벨이면 모델도 그 라벨 쪽으로 기우는 경향이 있습니다. 예시가 정확하고, 다양하고, 균형 잡혀 있는지 확인하세요.