[Google] Prompt Engineering #2

by chorong

[Google] Prompt Engineering #1에서는 2025년 2월, Google에서 발표한 Prompt Engineering의 글의 '언어모델의 구성요소'에 대해 공유드렸는데요, 이어서 프롬프트 기술에 대해 공유드리겠습니다.

이 글은 스스로 정리하기 위한 목적이기에 혹시 더 궁금하시다면 원본을 보시는 것도 좋을 것 같습니다.




Prompting techniques

언어모델(LLM)은 프롬프트를 이해하고 답변을 생성하는 데에 많은 양의 데이터를 학습하고 지침을 따르도록 훈련되어 있습니다.하지만 언어모델은 완벽하지 않습니다. 따라서 우리가 프롬프트를 명확히 작성할수록 LLM이 다음에 올 텍스트를 잘 예측할 수 있습니다. 게다가 우리가 답변을 얻을 때 언어모델이 학습하고 동작하는데 필요한 특정기술을 이해한다면 더욱이 유의미한 결과를 얻을 수 있을 것입니다.



1. General Prompting: Zero-shot

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 등 한 개(혹은 여러개)의 예시를 입력하면 ㅗ보다 더 정확한 결과를 얻을 수 있습니다.



2. General Prompting: 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와 관련된 예시를 입력해야 합니다.

입력하는 예시는 다양하고 품질이 높으며 잘 작성해야 모델이 혼란스럽지 않고 보다 정확한 답을 받을 수 있습니다.



3. System, contextual and role prompting

System, contextual과 role prompting은 모두 LLM이 문장을 어떻게 생성하는지의 가이드를 제공하는 기술입니다. 이 세 기술의 차이는 바로 '관점(aspects)'입니다.


• System prompting

언어모델의 전반적인 문맥과 목적을 설정하는 역할을 합니다.

언어모델이 답변을 할 때 '큰 그림'을 그려주는 것으로, 언어번역 혹은 리뷰분석 등 이 task를 수행하는 목적을 정의합니다.


• Contextual prompting

현재 대화 혹은 task에 대한 세부 사항이나 배경지식 등을 제공합니다.

이는 모델이 질문의 뉘앙스를 이해하고 그에 따라 답변을 조정하는 데에 도움을 줍니다.


• Role prompting

언어모델의 캐릭터와 아이덴티티를 정의합니다. 이는 언어모델의 일관된 역할과 연관된 지식 및 응답을 하는데에 도움을 줍니다.





keyword
매거진의 이전글[Google] Prompt Engineering #1