구글에서 업로드한 Prompt Engineering 문서에 대해 리뷰합니다.
Introduction
-
Temperature: 출력의 '창의성'이나 '랜덤함'의 정도를 설정
- 모델 출력은 수식으로 로 표현됨
- : 값이 더 크게(확률분포가 뾰족하게) 반영 → 가장 확률 높은 토큰이 선택될 확률 올라감
- : 값이 희석되어(확률분포가 평평해짐) 다양한 토큰이 선택될 확률 올라감
- : 원래 모델이 계산한 확률 분포
- 즉, 낮을수록 안정적, 일관된 출력을 만들고 높을수록 보다 다양한 출력을 생성
- Top-K: 토큰 생성 시, 확률이 가장 높은 K개 단어 중에 선택
- Top-P: 누적 확률이 P 이상(보통 0.8~1.0)이 되는 후보에서 선택
- Output Length: 생성할 토큰 수를 제한하여 속도 & api 비용을 줄일 수 있음. 다만 모델이 이 길이를 고려하여 답변을 짧게 만드는 것은 아님
Prompting Techniques
- Zero-shot prompting: 예시 없이, 단지 질문만 던져서 답을 받는 가장 기본적인 방식
- One-shot & few-shot prompting: 모델에 올바른 답변의 예시를 1개(one-shot), 또는 소수(few-shot) 제공하고 추론을 요구
-
System, contextual and role prompting
- System prompting: 모델의 전반적인 동작 방침을 미리 제시하는 프롬프트
- Role prompting: 특정 역할을 수행하도록 요청
I want you to act as a travel guide. I will write to you about my location and you will suggest 3 places to visit near me in a humorous style
- Contextual prompting: 대화나 문서 등 맥락을 주고 답변을 요청
You are writing for a blog about retro 80's arcade video games.
-
Step-back prompting: 정답을 바로 묻지 않고, 일단 문제에 대해 다시 요약 또는 재해석하게 한 뒤 답변
(1) Write a one paragraph storyline for a new level of a first-person shooter video game that is challenging and engaging.
(2) Based on popular first-person shooter action games, what are 5 fictional key settings that contribute to a challenging and engaging level storyline in a first-person shooter video game?
(3) Based on the above 5 theme, Take one of the themes and write a one paragraph storyline for a new level of a first-person shooter video game that is challenging and engaging.
-
Chain of Thought (CoT): 모델이 문제 해결의 과정을 차근차근 논리적으로 서술하게 유도
답을 내기 전, 해당 문제를 단계별로 천천히 생각해보세요. (= Let's think step by step.)
- Self-consistency: 동일한 프롬프트를 여러 번 반복 실행해서 다양한 답안 중 가장 일관성 높은 결과를 추출
- Tree of Thoughts (ToT): 의사 결정 과정에서 여러 선택지(가지)를 동시에 탐색하고, 각 가지별 생각 흐름을 평가해 최적의 답을 선정하는 방식
-
ReAct (reason & act): Reasoning과 Acting을 반복하며, 모델이 자체적으로 추론/검색/행동을 수행해 결과를 업데이트. 기본적으로 정보를 검색하고 액션을 취하는 과정을 반복하여 효율적으로 결과를 도출
- 예를 들어, Metallica 멤버의 자식 수를 찾는 과정에서 각 멤버별로 정보를 검색한 후 종합하여 답변을 제시하는 것이 리액트의 예시
-
Automatic Prompt Engineering: 더 많은 프롬프트들을 생성을 할 수 있도록 프롬프팅하는 것
We have a band merchandise t-shirt webshop, and to train a chatbot we need various ways to order: "One Metallica t-shirt size S". Generate 10 variants, with the same semantics but keep the same meaning.
Best Practices
- Few-shot prompting 예시는 보통 3개에서 5개 정도의 예시를 추는 것이 좋다고 함
- 간결하게 질문을 구성해야 하며, 복잡한 질문은 AI가 이해하기 어렵게 만들 수 있으므로 명료하게 표현하는 것이 좋음
- 명령어 톤을 사용해야 하며, 상대방에게 직접적으로 지시하는 것이 효과적
-
AI에게 할 행동을 명확히 설명하는 동사를 사용하여 직관적인 이해를 돕는 것이 중요
- e.g., Act, Analyze, Categorize, Classify, Contrast, Compare, Create, Describe, Define, Evaluate, Extract, Find, Generate, Identify, List, Measure, Organize, Parse, Pick, Predict, Provide, Rank, Recommend, Return, Retrieve, Rewrite, Select, Show, Sort, Summarize, Translate, Write.
- DO or DO NOT에 대해 자세히 명시해주는 것이 좋음
- AI가 해야 할 것(instruction)에 집중하는 것이 중요하며, 하지 말아야 할 것(constraint)은 언급하지 않는 것이 더 효과적
- 프롬프트에 variables 사용하는 것 좋음
- Classification task를 위한 few-shot prompting을 할 때는, class에 대한 예시를 골고루 제공해야 함
- json이나 xml형태로 응답을 받으면 더 일관된 답변을 제공받을 수 있으며, 할루시네이션을 줄이는 데 기여
- Chain of Thought 기법을 사용할 때는 temperature를 0으로 설정하는 것이 유리하며, 그 이유는 확정된 문제 해결에 적합하기 때문
- 여러 프롬프트 실험한 내용을 어딘가에 기록해두어야 테스트, 업데이트 시 유용하게 활용 가능
Top-K and Top-P
- General starting point: T=0.2 / Top-P=0.95 / Top-K=30
- Creative results: T=0.9 / Top-P=0.99 / Top-K=40
- Less creative results: T=0.1 / Top-P=0.9 / Top-K=20