[Google] Prompt Engineering #1에서는 2025년 2월, Google에서 발표한 Prompt Engineering의 글의 '언어모델의 구성요소'에 대해 공유드렸는데요, 이어서 프롬프트 기술에 대해 공유드리겠습니다.
이 글은 스스로 정리하기 위한 목적이기에 혹시 더 궁금하시다면 원본을 보시는 것도 좋을 것 같습니다.
언어모델(LLM)은 프롬프트를 이해하고 답변을 생성하는 데에 많은 양의 데이터를 학습하고 지침을 따르도록 훈련되어 있습니다.하지만 언어모델은 완벽하지 않습니다. 따라서 우리가 프롬프트를 명확히 작성할수록 LLM이 다음에 올 텍스트를 잘 예측할 수 있습니다. 게다가 우리가 답변을 얻을 때 언어모델이 학습하고 동작하는데 필요한 특정기술을 이해한다면 더욱이 유의미한 결과를 얻을 수 있을 것입니다.
zero-shot 프롬프트는 프롬프트 중에 가장 심플한 기법입니다. 우리가 Input값으로 단순한 질문이나 이야기의 시작, 또는 지침 등 무엇이든 질의할 수 있습니다.
프롬프트를 입력할 때 예시를 입력하는지에 따라 나뉩니다.
zero-shot은 말 그대로 아무런 예시를 입력하지 않고 질의만 입력하는 것입니다.
one-shot은 하나의 예시를 입력하는 것이고,
few-shot은 2개 이상의 예시를 입력함으로써 언어모델이 답변을 할때 참고할 수 있도록 하는 것입니다.
Zero-shot 프롬프팅은, 시스템 프롬프트에 입력 시 아무런 예시를 제시하지 않는 것입니다.
아래는 Zero-shot 프롬프트의 예시입니다.
[목표]
영화 리뷰를 긍정, 중립, 부정으로 분류하는 것. (Classify movie reviews as positive, neutral or negative.)
[프롬프트]
영화리뷰를 긍정적, 중립적, 또는 부정적으로 분류합니다.
리뷰: 영화 'Her'는 AI가 통제 없이 계속해서 진화하도록 방치될 때, 인류가 향하게 될 방향을 드러내는 충격적인 보고서이다. 이런 걸작이 더 많아졌으면 좋겠다
(Classify movie reviews as POSITIVE, NEUTRAL or NEGATIVE. Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. I wish there were more movies like this masterpiece. Sentiment:)
[결과]
긍정적
위와 같이 아무런 예시를 입력하지 않은 Zero-shot 프롬프트를 입력한 후, 그 결과가 정확하지 않을 때에는 아래와 같이 One-shot이나 Few-shot 등 한 개(혹은 여러개)의 예시를 입력하면 ㅗ보다 더 정확한 결과를 얻을 수 있습니다.
One-shot과 Few-shot 프롬프트는 Zero-shot과 달리 하나 또는 하나 이상의 예시를 제공합니다.
예시를 들어 프롬프트를 작성할 경우, LLM이 여러분의 질의를 보다 더 잘 이해하는데에 도움을 줄 수 있습니다.
One-shot 프롬프트: 명칭과 같이 하나의 예시를 제공합니다.
Few-shot 프롬프트: 명칭과 같이 여러개의 예시를 제공합니다. Few-shot 프롬프트는 One-shot 프롬프트와 비슷하지만, 여러개의 예시를 제공하므로 LLM이 패턴을 파악하는데 더 많은 도움이 됩니다.
[목표]
피자를 주문하는 구문의 JSON 분석
[프롬프트]
고객의 피자주문을 할때 다음과 같은 JSON구문을 분석하라.
예시:
나는 치즈와 토마토소스, 페퍼로니를 얹은 작은 사이즈의 피자를 원해.
JSON 응답:
{
"size": "small",
"type": "normal",
"ingredients": [["cheese", "tomato sauce", "peperoni"]]
}
예시:
나는 토마토소스와 바질, 모짜렐라를 얹은 라지사이즈의 피자를 받고싶어.
JSON응답:
{
"size": "large",
"type": "normal",
"ingredients": [["tomato sauce", "bazel", "mozzarella"]]
}
나는 반반 피자를 원하는데 한쪽은 치즈와 모짜렐라를, 다른 반쪽은 토마토 소스와 햄, 파인애플을 얹은 라지 피자를 먹고 싶어요.
JSON응답:
[결과]
{"size": "large",
"type": "half-half",
"ingredients": [["cheese", "mozzarella"], ["tomato sauce", "ham", "pineapple"]]
}
위 예시처럼 여러분이 프롬프트를 작성할 때 수행하려는 task와 관련된 예시를 입력해야 합니다.
입력하는 예시는 다양하고 품질이 높으며 잘 작성해야 모델이 혼란스럽지 않고 보다 정확한 답을 받을 수 있습니다.
System, contextual과 role prompting은 모두 LLM이 문장을 어떻게 생성하는지의 가이드를 제공하는 기술입니다. 이 세 기술의 차이는 바로 '관점(aspects)'입니다.
언어모델의 전반적인 문맥과 목적을 설정하는 역할을 합니다.
언어모델이 답변을 할 때 '큰 그림'을 그려주는 것으로, 언어번역 혹은 리뷰분석 등 이 task를 수행하는 목적을 정의합니다.
현재 대화 혹은 task에 대한 세부 사항이나 배경지식 등을 제공합니다.
이는 모델이 질문의 뉘앙스를 이해하고 그에 따라 답변을 조정하는 데에 도움을 줍니다.
언어모델의 캐릭터와 아이덴티티를 정의합니다. 이는 언어모델의 일관된 역할과 연관된 지식 및 응답을 하는데에 도움을 줍니다.