피장난
이자형
ngineering
저자 : Lee Boonstra
Prompt Engineering
감사의 말
콘텐츠 기고자 Michael
Sherman Yuan Cao Erick
Armbrust Anant Nawalg
aria Antonio Gulli Simon
e Cammel
큐레이터와 편집자
Antonio Gulli Anan
t Nawalgaria Grace
Mollison
기술 작가 Joey Ha
ymaker
디자이너 Michae
l Lanning
February 2025
2
Table of contents
소개 6 프롬프트 엔지니어링 7 LLM 출력 구성 8 출력 길이 8 출력 길이 8 샘플링 제어 9 온도 9 Top-K
및 Top-P 10 모든 것을 결합한 11 개의 프롬프트 기술 13 일반 프롬프트 / 제로 샷 13 one-shot 및 소수
15 시스템, 18 개의 역할 프롬프트 21 컨텍스트 프롬프트 23
25 사고 체인 (COT) 29 자기 일관성 32 사고 나무 (TOT) 36 React (이유 및 ACT) 37 자동 프롬프트
엔지니어링 42 코드 프롬프트 코드 42 프롬프트 44 코드 46 코드 소지품 46 코드 46 코드 46 코드 4
8 다중 모드 프롬프트는 어떻습니까? 54
모범 사례 54
예제 제공 54 단순성에 대해 구체적으로 구체적으로 구체적으로 구체적으로 구체적으로 구체적
으로 구체적으로 제약 조건에 대한 지침 사용 56 최대 토큰 길이 58 프롬프트에서 변수 사용 58 입
력 형식 및 쓰기 스타일을 사용한 실험 59 분류 작업에 대한 소수의 프롬프트 59 클래스 59 모델 업
데이트 60 출력 형식 60.
JSON 수리 61 Schemas 62 실험 기타 프롬프트 엔지니어와 함께 실험 63 COT 모범 사례 64 문서화
된 다양한 시도 64 요약 66 Endnotes 68
Prompt Engineering
데이터 과학자 또는 기계 학습 엔
지니어 일 필요는 없습니다. 모든
사람이 프롬프트를 작성할 수 있
습니다.
소개
큰 언어 모델 입력 및 출력에 대해 생각할 때 텍스트 프롬프트 (때로는 이미지 프롬프트와 같은 다른
양식이 동반)는 모델이 특정 출력을 예측하는 데 사용하는 입력입니다. 데이터 과학자 또는 기계 학습
엔지니어 일 필요는 없습니다. 모든 사람이 프롬프트를 작성할 수 있습니다. 그러나 가장 효과적인 프
롬프트를 제작하는 것은 복잡 할 수 있습니다. 프롬프트의 많은 측면이 사용하는 모델, 모델의 교육 데
이터, 모델 구성, 단어 선택, 스타일 및 톤, 구조 및 컨텍스트 모두의 효능에 영향을 미칩니다. 따라서
신속한 엔지니어링은 반복적 인 프로세스입니다. 부적절한 프롬프트는 모호하고 부정확 한 응답으로
이어질 수 있으며 모델의 의미있는 출력을 제공하는 능력을 방해 할 수 있습니다.
February 2025
6
Prompt Engineering
Gemini Chatbot과 채팅하면 1은 기본적으로 프롬프트를 작성하지만,이 백서는 Vertex AI 내의 Gemi
ni 모델에 대한 프롬프트를 작성하는 데 중점을 두거나 API를 사용하여 모델을 직접 프롬프트하여
온도 등과 같은 구성에 액세스 할 수 있기 때문입니다.
이 백서는 신속한 엔지니어링에 대해 자세히 설명합니다. 우리는 다양한 프롬프트 기술을 조사
하여 시작하고 팁과 모범 사례를 공유하여 프롬프트 전문가가되기를 바랍니다. 또한 프롬프트
를 제작하는 동안 직면 할 수있는 몇 가지 도전에 대해서도 논의 할 것입니다.
프롬프트 엔지니어링
LLM이 어떻게 작동하는지 기억하십시오. 예측 엔진입니다. 이 모델은 순차적 텍스트를 입력으로 취
한 다음 교육을받은 데이터를 기반으로 다음 토큰이 무엇인지 예측합니다. LLM은이 작업을 반복해
서 수행하도록 작동하여 다음 토큰을 예측하기 위해 순차 텍스트의 끝에 이전에 예측 된 토큰을 추가
합니다. 다음 토큰 예측은 이전 토큰의 내용과 LLM이 훈련 중에 본 것 사이의 관계를 기반으로합니다
.
프롬프트를 작성하면 올바른 토큰 순서를 예측하기 위해 LLM을 설정하려고합니다. 신속한 엔지니어
링은 정확한 출력을 생성하도록 LLM을 안내하는 고품질 프롬프트를 설계하는 과정입니다. 이 프로
세스에는 최상의 프롬프트를 찾고 프롬프트 길이를 최적화하며 작업과 관련하여 프롬프트의 쓰기 스
타일과 구조를 평가하기 위해 땜질이 포함됩니다. 자연어 처리 및 LLM의 맥락에서, 프롬프트는 모델
에 제공된 입력이 응답 또는 예측을 생성하기위한 입력입니다.
February 2025
7
Prompt Engineering
이러한 프롬프트는 텍스트 요약, 정보 추출, 질문 및 응답, 텍스트 분류, 언어 또는 코드 번역, 코
드 생성 및 코드 문서 또는 추론과 같은 다양한 종류의 이해 및 생성 작업을 달성하는 데 사용될
수 있습니다.
간단하고 효과적인 프롬프트 예제와 함께 Google의 프롬프트 가이드 2,3을 참조하십시오.
프롬프트 엔지니어링은 모델을 선택하여 시작합니다. Vertex AI, GPT, Claude 또는 Gemma 또는 Lla
ma와 같은 오픈 소스 모델에서 Gemini 언어 모델을 사용하는지 여부에 관계없이 특정 모델에 대한
프롬프트를 최적화해야 할 수도 있습니다.
프롬프트 외에도 LLM의 다양한 구성을 땜질해야합니다.
LLM 출력 구성
모델을 선택하면 모델 구성을 파악해야합니다. 대부분의 LLM에는 LLM의 출력을 제어하는 다양한
구성 옵션이 제공됩니다. 효과적인 프롬프트 엔지니어링을 위해서는 이러한 구성을 작업에 최적으로
설정해야합니다.
출력 길이
중요한 구성 설정은 응답으로 생성 할 토큰 수입니다. 더 많은 토큰을 생성하려면 LLM에서 더 많은
계산이 필요하므로 에너지 소비가 높아지고 응답 시간이 느려지고 비용이 더 높아집니다.
February 2025
8
Prompt Engineering
LLM의 출력 길이를 줄이면 LLM이 생성 된 출력에서보다 스타일 또는 텍스트로 간결하지 않으면
LLM이 한계에 도달하면 더 많은 토큰 예측을 중단합니다. 요구에 짧은 출력 길이가 필요한 경우
수용 프롬프트를 엔지니어링해야 할 수도 있습니다.
출력 길이 제한은 LLM이 원하는 응답 후에도 쓸모없는 토큰을 계속 방출하는 React와 같은 일부
LLM 프롬프트 기술에 특히 중요합니다.
더 많은 토큰을 생성하려면 LLM에서 더 많은 계산이 필요하므로 에너지 소비가 높아지고
응답 시간이 느려져 비용이 더 높아집니다.
샘플링 제어
LLM은 공식적으로 단일 토큰을 예측하지 않습니다. 오히려 LLM은 다음 토큰이 될 수있는 것에 대
한 확률을 예측하고, LLM의 어휘의 각 토큰은 확률을 얻습니다. 그러한 토큰 확률은 다음 생산 된
토큰이 무엇인지 결정하기 위해 샘플링됩니다. 온도, Top-K 및 Top-P는 예측 된 토큰 확률이 단일
출력 토큰을 선택하는 방법을 결정하는 가장 일반적인 구성 설정입니다.
온도
온도는 토큰 선택에서 무작위성 정도를 제어합니다. 더 낮은 온도는 더 결정적인 반응을 기대하는
프롬프트에 적합하지만 온도가 높을수록 더 다양하거나 예상치 못한 결과를 초래할 수 있습니다. 0 (
욕심 많은 디코딩)의 온도는입니다
February 2025
9
Prompt Engineering
결정 론적 : 가장 높은 확률 토큰이 항상 선택됩니다 (두 토큰이 동일한 예측 확률이 가장 높으면 타이
브레이크가 구현되는 방법에 따라 온도 0에서 항상 동일한 출력을 얻지 못할 수도 있습니다).
최대에 가까운 온도는 더 많은 임의의 출력을 만드는 경향이 있습니다. 온도가 높아지면서 모든 토큰
이 다음 예상 토큰이 될 가능성이 높습니다.
Gemini 온도 제어는 기계 학습에 사용되는 SoftMax 기능과 유사한 방식으로 이해 될 수 있습니다. 저
온 설정은 낮은 SoftMax 온도 (T)를 반영하여 확실성으로 단일의 선호 온도를 강조합니다. 쌍둥이 자
리 온도 설정이 높을수록 소프트 맥스 온도가 높기 때문에 선택한 설정 주변의 온도 범위가 더 많이 허
용됩니다. 이 증가 된 불확실성은 예를 들어 창조적 인 출력을 실험 할 때와 같이 단단하고 정확한 온도
가 필수적이지 않은 시나리오를 수용합니다.
Top-K 및 Top-P
Top-K 및 Top-P (Nucleus Sampling이라고도 함) 4은 LLM에 사용되는 두 가지 샘플링 설정입니다. 온
도와 마찬가지로 이러한 샘플링 설정은 생성 된 텍스트의 임의성과 다양성을 제어합니다.
•Top-K 샘플링은 모델의 예측 분포에서 가장 큰 k를 선택합니다. Top-K가 높을수록 모델의 출력이
더 창의적이고 다양합니다. 상단 K가 낮을수록 모델의 출력이 더 편안하고 사실입니다. Top-K 1은
탐욕스러운 디코딩과 동일합니다.
February 2025
10
Prompt Engineering
•상단 P 샘플링은 누적 확률이 특정 값 (P)을 초과하지 않는 상단 토큰을 선택합니다. P의 값은 0
(Greedy Decoding)에서 1 (LLM 어휘의 모든 토큰)에서 1에서 1입니다.
Top-K와 Top-P 중에서 선택하는 가장 좋은 방법은 두 가지 방법 (또는 둘 다)을 실험하고 원하는
결과를 생성하는 방법을 확인하는 것입니다.
모든 것을 함께 모으십시오
Top-K, Top-P, 온도 및 생성 할 토큰 수를 선택하는 것은 특정 응용 프로그램과 원하는 결과에 따라
다르며 설정은 모두 서로 영향을 미칩니다. 선택한 모델이 다양한 샘플링 설정을 결합하는 방법을
이해하는 것이 중요합니다.
온도, Top-K 및 Top-P를 모두 사용할 수있는 경우 (Vertex Studio에서와 같이) Top-K 및 Top-P 기준을
모두 충족하는 토큰이 다음 예측 토큰의 후보자이며, 온도는 Top-K 및 Top-P 기준을 통과 한 토큰의
샘플에 적용됩니다. Top-K 또는 Top-P 만 사용할 수있는 경우 동작은 동일하지만 하나의 Top-K 또는
P 설정 만 사용됩니다.
온도를 사용할 수없는 경우, Top-K 및/또는 Top-P 기준을 충족하는 토큰이 무작위로 선택되어 다음으
로 예측 된 단일 토큰을 생성합니다.
하나의 샘플링 구성 값의 극단적 인 설정에서 하나의 샘플링 설정이 다른 구성 설정을 취소하거
나 관련이 없습니다.
February 2025
11
Prompt Engineering
•온도를 0으로 설정하면 Top-K 및 Top-P는 관련이 없습니다. 가장 많은 토큰은 다음 토큰이됩니
다. 온도를 매우 높게 설정하면 (1-11 세 이상) 온도가 무의미 해지고 Top-K 및/또는 Top-P 기준을
통한 토큰이 무작위로 샘플링되어 다음 예측 된 토큰을 선택합니다.
•최상위 K에서 1을 설정하면 온도와 상단 P는 관련이 없습니다. 단 하나의 토큰만이 Top-K 기준을 통
과하며 그 토큰은 다음 예측 된 토큰입니다. LLM 어휘의 크기와 같이 Top-K가 매우 높음을 설정하
면 다음 토큰이 될 확률이 0 인 토큰은 Top-K 기준을 충족하며 선택되지 않습니다.
•Top-P로 0 (또는 매우 작은 값)을 설정하면 대부분의 LLM 샘플링 구현은 최상위 P 기준을 충족 할 수
있는 가장 가능성있는 토큰 만 고려하여 온도와 Top-K가 무관하게 만듭니다. 상위 P에서 1을 1로 설
정하면 다음 토큰이 될 확률이 0이 아닌 모든 토큰은 Top-P 기준을 충족하며 선택되지 않습니다.
일반적인 출발점으로, .2, 상단 P .95 및 Top-K의 온도는 창의적이지만 과도하게는 비교적 일관된 결
과를 제공합니다. 특히 창의적인 결과를 원한다면 .9, 상위 P .99 및 40의 최상위 K부터 시작하십시오.
창의적인 결과가 적다면 .1, 상단 P .9 및 20의 최상위 K에서 시작하십시오. 마지막으로, 항상 단일 정
답 (예 : 수학 문제)이있는 경우 0의 온도로 시작하십시오.
참고 : 더 많은 자유 (고온, Top-K, Top-P 및 출력 토큰)가있어 LLM은 덜 관련성이없는 텍스트를
생성 할 수 있습니다.
경고 : 많은 양의 필러 단어로 끝나는 응답을 본 적이 있습니까? 이것은 "반복 루프 버그"라고도하며
, 이는 모델이 사이클에 갇히고 동일한 (필러) 단어, 문장 또는 문장 구조를 반복적으로 생성하는 대
형 언어 모델에서 일반적인 문제이며 종종 부적절한 온도와 Top-K/에 의해 악화됩니다.
February 2025
12
Prompt Engineering
상위 P 설정. 이는 다른 이유로 저온 및 고온 설정에서 발생할 수 있습니다. 저온에서 모델은 지나치게
결정적으로되어 최고 확률 경로에 엄격하게 붙어있어 경로가 이전에 생성 된 텍스트를 다시 방문하면
루프로 이어질 수 있습니다. 반대로, 고온에서 모델의 출력은 지나치게 무작위로되어 무작위로 선택
된 단어 나 문구가 우연히 다시 사용 가능한 옵션으로 인해 루프를 생성 할 가능성이 높아집니다. 두
경우 모두 모델의 샘플링 프로세스가 "고정"되어 출력 창이 채워질 때까지 단조롭고 도움이되지 않는
출력이 발생합니다. 이를 해결하려면 종종 결정론과 무작위성 사이의 최적의 균형을 찾기 위해 온도
및 Top-K/Top-P 값으로 신중한 땜질이 필요합니다.
프롬프트 기술
LLM은 지침을 따르도록 조정되며 많은 양의 데이터에 대해 교육을 받으므로 프롬프트를 이해하고 답
을 생성 할 수 있습니다. 그러나 LLM은 완벽하지 않습니다. 프롬프트 텍스트가 명확할수록 LLM이 다
음 텍스트를 예측하는 것이 좋습니다. 또한 LLM의 교육 방법과 LLMS의 작동 방식을 활용하는 특정
기술은 LLM에서 관련 결과를 얻는 데 도움이됩니다.
이제 우리는 신속한 엔지니어링이 무엇인지, 무엇이 필요한지 이해 했으므로 가장 중요한 프롬프
트 기술의 예를 들어 봅시다.
일반 프롬프트 / 제로 샷
zero-shot 5 프롬프트는 가장 간단한 유형의 프롬프트입니다. LLM이 시작할 작업에 대한 설명과
일부 텍스트 만 제공합니다. 이 입력은 질문, 이야기의 시작 또는 지시 사항이 될 수 있습니다. Zero
-Shot이라는 이름은 '예제 없음'을 나타냅니다.
February 2025
13
Prompt Engineering
Vertex AI, 6에서 Vertex AI Studio (언어)를 사용하여 프롬프트를 테스트 할 운동장을 제공합시다.
표 1에는 영화 리뷰를 분류 할 예제 제로 샷 프롬프트가 표시됩니다.
아래에 사용 된 테이블 형식은 프롬프트를 문서화하는 좋은 방법입니다. 당신의 프롬프트는 코드베
이스가되기 전에 많은 반복을 겪을 것이므로, 신속한 엔지니어링 작업을 훈련되고 구조화 된 방식으
로 추적하는 것이 중요합니다. 이 테이블 형식, 프롬프트 엔지니어링 작업 추적의 중요성 및 즉각적
인 개발 프로세스는이 장의 후반부 (“다양한 프롬프트 시도를 문서화”)에 있습니다.
창의성이 필요하지 않으므로 모델 온도는 저렴한 숫자로 설정해야하며 Gemini-Pro 기본 Top-K 및 T
op-P 값을 사용하여 두 설정을 효과적으로 비활성화합니다 (위의 'LLM 출력 구성'참조). 생성 된 출
력에주의하십시오. disturbing 및 masterpiece이라는 단어는 두 단어 모두 같은 문장에 사용되므로
예측을 조금 더 복잡하게 만들어야합니다.
February 2025
14
Prompt Engineering
Name
1_1_movie_classification
Goal
Classify movie reviews as positive, neutral or negative.
Model
gemini-pro
Temperature
0.1
Token Limit
5
Top-K
N/A
Top-P
1
Prompt
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:
Output
POSITIVE
표 1. 제로 샷 프롬프트의 예
Zero-Shot이 작동하지 않으면 프롬프트에 데모 나 예제를 제공 할 수 있으며, 이로 인해 "One-Shot"
및 "File-Shot"프롬프트가 발생합니다. 일반 프롬프트 / 제로 샷
원샷 및 소수의 샷
AI 모델에 대한 프롬프트를 만들 때 예제를 제공하는 것이 도움이됩니다. 이 예는 모델이 요구하는 것
을 이해하는 데 도움이 될 수 있습니다. 예는 모델을 특정 출력 구조 또는 패턴으로 조종하려는 경우
특히 유용합니다.
원샷 프롬프트는 single 예를 제공하므로 이름이 하나입니다. 아이디어는 모델에 작업을 가장 잘
완성하기 위해 모방 할 수있는 예가 있다는 것입니다.
몇 가지 프롬프트 7는 multiple 예를 모델에 제공합니다. 이 방법은 모델을 따라야 할 패턴을 보여줍
니다. 아이디어는 원샷과 유사하지만 원하는 패턴의 여러 예는 모델이 패턴을 따르는 기회를 증가시
킵니다.
February 2025
15
Prompt Engineering
소수의 프롬프트에 필요한 예의 수는 작업의 복잡성, 예제의 품질 및 사용중인 생성 AI (Gen AI) 모
델의 기능을 포함한 몇 가지 요소에 따라 다릅니다. 일반적으로 몇 가지 샷 프롬프트에 최소 3 ~ 5 개
의 예제를 사용해야합니다. 그러나보다 복잡한 작업에 더 많은 예제를 사용해야 할 수도 있고 모델
의 입력 길이 제한으로 인해 더 적게 사용해야 할 수도 있습니다.
표 2는 소수의 프롬프트 예를 보여줍니다. 더 긴 응답의 필요성을 수용하기 위해 토큰 제한을 늘리
는 것 외에 다른 gemini-pro 모델 구성 설정을 사용해 보겠습니다.
Goal
Parse pizza orders to JSON
Model
gemini-pro
Temperature
0.1
Token Limit
250
Top-K
N/A
Top-P
1
Prompt
Parse a customer's pizza order into valid JSON:
EXAMPLE:
I want a small pizza with cheese, tomato sauce, and pepperoni.
JSON Response:
```
{
"size": "small",
"type": "normal",
"ingredients": [["cheese", "tomato sauce", "peperoni"]]
}
```
Continues next page...
February 2025
16
Prompt Engineering
Prompt
EXAMPLE:
Can I get a large pizza with tomato sauce, basil and mozzarella
{
"size": "large",
"type": "normal",
"ingredients": [["tomato sauce", "bazel", "mozzarella"]]
}
Now, I would like a large pizza, with the first half cheese and
mozzarella. And the other tomato sauce, ham and pineapple.
JSON Response:
Output
```
{
"size": "large",
"type": "half-half",
"ingredients": [["cheese", "mozzarella"], ["tomato sauce",
"ham", "pineapple"]]
}
```
표 2. 소수의 샷 프롬프트의 예
프롬프트에 대한 예제를 선택하면 수행하려는 작업과 관련된 예제를 사용하십시오. 예는 다양하고
고품질이며 잘 작성되어야합니다. 한 가지 작은 실수는 모델을 혼동 할 수 있으며 바람직하지 않은 출
력을 초래할 것입니다.
다양한 입력에 강력한 출력을 생성하려는 경우 예제에 에지 케이스를 포함시키는 것이 중요합니다.
에지 케이스는 비정상적이거나 예상치 못한 입력이지만 모델은 여전히 처리 할 수 있어야합니다.
February 2025
17
Prompt Engineering
시스템, 상황 및 역할 프롬프트
시스템, 상황 및 역할 프롬프트는 LLM이 텍스트를 생성하는 방법을 안내하는 데 사용되는 모든 기
술이지만 다른 측면에 중점을 둡니다.
•시스템 프롬프트는 언어 모델의 전반적인 맥락과 목적을 설정합니다. 언어 번역, 리뷰 분류 등 모
델이해야 할 일의 '큰 그림'을 정의합니다.
•상황에 맞는 프롬프트는 현재 대화 또는 작업과 관련된 특정 세부 사항 또는 배경 정보를 제공합니
다. 모델이 요청한 내용의 뉘앙스를 이해하고 그에 따라 응답을 조정하는 데 도움이됩니다.
•역할 프롬프트는 언어 모델이 채택 할 특정 특성 또는 정체성을 할당합니다. 이를 통해 모델이 지정
된 역할과 그와 일치하는 응답을 생성하는 데 도움이됩니다.
관련 지식과 행동.
시스템, 맥락 및 역할 프롬프트간에 상당한 중복이있을 수 있습니다. 예를 들어 시스템에 역할을
할당하는 프롬프트는 컨텍스트를 가질 수 있습니다.
그러나 각 유형의 프롬프트는 약간 다른 기본 목적을 제공합니다.
•시스템 프롬프트 : 모델의 기본 기능과 중요한 목적을 정의합니다.
•상황에 맞는 프롬프트 : 응답을 안내하기위한 즉각적인 작업 별 정보를 제공합니다. 동적 인 현재
작업 또는 입력에 매우 구체적입니다.
•역할 프롬프트 : 모델의 출력 스타일과 음성을 프레임합니다. 특이성과 개성의 층을 추가합니
다.
February 2025
18
Prompt Engineering
시스템, 상황 및 역할 프롬프트를 구별하면 명확한 의도로 프롬프트를 설계하기위한 프레임 워크를
제공하여 유연한 조합을 허용하고 각 프롬프트 유형이 언어 모델의 출력에 어떤 영향을 미치는지 쉽
게 분석 할 수 있습니다.
이 세 가지 종류의 프롬프트를 살펴 보겠습니다.
시스템 프롬프트
표 3에는 시스템 프롬프트가 포함되어 있으며 출력을 반환하는 방법에 대한 추가 정보를 지정합니다.
더 높은 창의성 수준을 얻기 위해 온도를 높이고 더 높은 토큰 한도를 지정했습니다. 그러나 출력을 반
환하는 방법에 대한 명확한 지침으로 인해 모델은 추가 텍스트를 반환하지 않았습니다.
Goal
Classify movie reviews as positive, neutral or negative.
Model
gemini-pro
Temperature
1
Token Limit
5
Top-K
40
Top-P
0.8
Prompt
Classify movie reviews as positive, neutral or negative. Only
return the label in uppercase.
Review: "Her" is a disturbing study revealing the direction
humanity is headed if AI is allowed to keep evolving,
unchecked. It's so disturbing I couldn't watch it.
Sentiment:
Output
NEGATIVE
표 3. 시스템 프롬프트의 예
시스템 프롬프트는 특정 요구 사항을 충족하는 출력을 생성하는 데 유용 할 수 있습니다. ‘시스템 프
롬프트’라는 이름은 실제로‘시스템에 추가 작업 제공’을 나타냅니다. 예를 들어, 시스템 프롬프트를
사용하여 특정 프로그래밍 언어와 호환되는 코드 스 니펫을 생성하거나 시스템 프롬프트를 사용하
여 특정 구조를 반환 할 수 있습니다. 출력을 JSON 형식으로 반환하는 표 4를 살펴보십시오.
February 2025
19
Prompt Engineering
Goal
Classify movie reviews as positive, neutral or negative, return JSON.
Model
gemini-pro
Temperature
1
Token Limit
1024
Top-K
40
Top-P
0.8
Prompt
Classify movie reviews as positive, neutral or negative. Return
valid JSON:
Review: "Her" is a disturbing study revealing the direction
humanity is headed if AI is allowed to keep evolving,
unchecked. It's so disturbing I couldn't watch it.
Schema:
```
MOVIE:
{
"sentiment": String "POSITIVE" | "NEGATIVE" | "NEUTRAL",
"name": String
}
MOVIE REVIEWS:
{
"movie_reviews": [MOVIE]
}
```
JSON Response:
Output
```
{
"movie_reviews": [
{
"sentiment": "NEGATIVE",
"name": "Her"
}
]
}
```
표 4. JSON 형식으로 제기하는 시스템의 예
February 2025
20
Prompt Engineering
데이터를 추출하는 프롬프트에서 JSON 객체를 반환하는 데 몇 가지 이점이 있습니다. 실제 응용 프
로그램에서는이 JSON 형식을 수동으로 생성 할 필요가 없으며 이미 정렬 된 순서로 데이터를 반환
할 수 있지만 (DateTime 객체와 함께 작업 할 때 매우 편리함) JSON 형식을 제시함으로써 모델이 구
조를 생성하고 환각을 제한하는 것이 좋습니다.
시스템 프롬프트는 안전과 독성에 정말 유용 할 수 있습니다. 출력을 제어하려면‘대답에서 존중해야
합니다.’와 같은 프롬프트에 추가 라인을 추가하십시오.
역할 프롬프트
역할 프롬프트는 Gen AI 모델에 특정 역할을 할당하는 신속한 엔지니어링 기술입니다. 이는 모델이
할당 된 특정 역할에 대한 응답을 만들 수 있기 때문에 모델이보다 관련성 있고 유익한 출력을 생성하
는 데 도움이 될 수 있습니다.
예를 들어, Gen AI 모델이 책 편집자, 유치원 교사 또는 동기 부여 연사로 역할을 맡을 수 있습니다.
모델에 역할이 할당되면 해당 역할과 관련된 프롬프트를 줄 수 있습니다. 예를 들어, 교사가 검토
할 수있는 수업 계획을 만들도록 자극 할 수 있습니다. 모델이 여행 가이드의 역할을 수행하는 표 5
를 살펴보십시오.
February 2025
21
Prompt Engineering
Goal
Act as travel guide and provide 3 travel suggestions
Model
gemini-pro
Temperature
1
Token Limit
1024
Top-K
40
Top-P
0.8
Prompt
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 some cases, I will also give you the type of places I
will visit.
My suggestion: "I am in Amsterdam and I want to visit
only museums."
Travel Suggestions:
Output
1. Rijksmuseum: World-renowned museum, known for Dutch masterpieces
like Rembrandt’s “The Night Watch.” Don’t miss the incredible collection of
paintings and artifacts showcasing Dutch art and history.
2. Van Gogh Museum: Immerse yourself in the captivating works of Vincent
van Gogh. The museum houses the largest collection of his paintings and
drawings, including “The Starry Night” and “Sunflowers.”
3. Stedelijk Museum Amsterdam: Discover modern and contemporary art
from around the world. The museum’s collection includes works by Picasso,
Kandinsky, and Rietveld, housed in a striking modern building.
표 5. 역할 프롬프트의 예
위의 예는 여행사의 역할을 수행하는 예를 보여줍니다. 역할을 지리 교사로 바꾸면 다른 응답을
받게 될 것입니다.
AI 모델의 역할 관점을 정의하면 출력의 품질, 관련성 및 효과를 향상시키기 위해 원하는 톤, 스타일
및 집중된 전문 지식의 청사진이됩니다.
February 2025
22
Prompt Engineering
다음은 내가 효과적으로 찾을 수있는 몇 가지 스타일입니다.
대립, 서술 적, 직접, 공식, 유머, 영향력 있고 비공식적, 영감, 설득력
유머러스하고 영감을주는 스타일을 포함하도록 표 6의 프롬프트를 변경해 봅시다.
Prompt
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.
My suggestion: "I am in Manhattan."
Travel Suggestions:
Output
1. Behold the Empire State of Mind: Ascend to the dizzying heights of the Empire
State Building and bask in the glory of Manhattan's skyline. Prepare to feel like
King Kong atop the Big Apple, minus the giant ape-sized banana.
2. Get Artsy-Fartsy at MoMA: Unleash your inner art aficionado at the Museum
of Modern Art (MoMA). Gaze upon masterpieces that will boggle your
mind and make you question whether your stick-figure drawings have any
artistic merit.
3. Shop ‘Til You Drop on Fifth Avenue: Indulge in some retail therapy on the
iconic Fifth Avenue. Brace yourself for sticker shock as you window-shop (or
actually shop) at designer boutiques that will make your wallet cry. But hey,
you’re in Manhattan, so you might as well embrace the fabulousness!
표 6. 유머러스 한 톤과 스타일로 제기되는 역할의 예
상황에 맞는 프롬프트
상황에 맞는 프롬프트를 제공함으로써 AI 상호 작용이 가능한 한 원활하고 효율적인지 확인할 수 있
습니다. 이 모델은 표 7의 예에서 볼 수 있듯이 귀하의 요청을보다 빠르게 이해하고보다 정확하고 관련
성이 높은 응답을 생성 할 수 있습니다.
February 2025
23
Prompt Engineering
Goal
Suggest articles for a blog about retro games
Model
gemini-pro
Temperature
1
Token Limit
1024
Top-K
40
Top-P
0.8
Prompt
Context: You are writing for a blog about retro 80's arcade
video games.
Suggest 3 topics to write an article about with a few lines of
description of what this article should contain.
Output
1. **The Evolution of Arcade Cabinet Design:**
This article would explore the evolution of arcade cabinet designs, from the
early wood and metal cabinets of the 1970s to the sleek, neon-lit designs of
the 1980s and beyond.
2. **Blast From The Past: Iconic Arcade Games of The 80’s:**
- This article would feature a glimpse into the history, impact, and legacy
of some of the most iconic and influential arcade games of the 1980s,
highlighting their innovations, popular mechanics, and enduring charm.
3. **The Rise and Retro Revival of Pixel Art:**
- This article would delve into the evolution of pixel art as a defining visual
style of early arcade games, tracing its roots, exploring its techniques, and
discussing the resurgence of pixel art in modern games and digital art.
표 7. 상황에 맞는 프롬프트의 예
February 2025
24
Prompt Engineering
계단식 프롬프트
STEP-BACK 8 PROMPTING은 LLM이 먼저 특정 작업과 관련된 일반적인 질문을 고려한 다음 해당
일반적인 질문에 대한 답변을 특정 작업에 대한 후속 프롬프트에 공급함으로써 성능을 향상시키는
기술입니다. 이 '단계 뒤로'를 통해 LLM은 특정 문제를 해결하기 전에 관련 배경 지식 및 추론 프로세
스를 활성화 할 수 있습니다.
더 넓고 근본적인 원칙을 고려함으로써 LLM은보다 정확하고 통찰력있는 응답을 생성 할 수 있습니다
. Step-Back Promping은 LLM이 비판적으로 생각하고 새롭고 창의적인 방식으로 지식을 적용하도록
장려합니다. LLM이 직접 프롬프트 될 때 LLM 매개 변수에 대한 더 많은 지식을 사용하여 작업을 수
행하는 최종 프롬프트가 변경됩니다.
특정 세부 사항 대신 일반적인 원칙에 중점을 두어 LLM 응답의 편견을 완화하는 데 도움이 될 수 있
습니다.
스텝 백 프롬프트가 결과를 어떻게 개선 할 수 있는지 이해하기 위해 이러한 예를 살펴 보겠습니다.
먼저 단계 뒤로 프롬프트 (표 9)와 비교하기 전에 기존 프롬프트 (표 8)를 검토합시다.
February 2025
25
Prompt Engineering
Goal
Write a storyline for a level of a first-person shooter video game.
Model
gemini-pro
Temperature
1
Token Limit
1024
Top-K
40
Top-P
0.8
Prompt
Write a one paragraph storyline for a new level of a firstperson shooter video game that is challenging and engaging.
Output
The level begins with the player’s squad being ambushed in a dense urban area
by a relentless enemy faction. Players must fight their way through a maze of
back alleys and dilapidated buildings, utilizing stealth and precision to eliminate
enemy forces and avoid detection. The player must use their environment to their
advantage, setting traps, utilizing cover, and making calculated moves to survive.
Along the way, they uncover intel suggesting the enemy is planning a devastating
attack, and the player must race against time to gather evidence and relay it back
to their headquarters before the enemy can carry out their plans.
표 8. 기존의 프롬프트는 단계 뒤로 프롬프트와 비교하기 전에
온도를 1으로 설정하면 스토리 라인을 위해 모든 종류의 창의적인 글로 끝날 수 있지만 매우 무작위
적이고 일반적입니다. 그럼 물러서 봅시다.
February 2025
26
Prompt Engineering
Prompt
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?
Output
1. **Abandoned Military Base**: A sprawling, post-apocalyptic military complex
crawling with mutated soldiers and rogue robots, ideal for challenging
firearm combat.
2. **Cyberpunk City**: A neon-lit, futuristic urban environment with towering
skyscrapers and dense alleyways, featuring cybernetically enhanced enemies
and hacking mechanics.
3. **Alien Spaceship**: A vast alien vessel stranded on Earth, with eerie
corridors, zero-gravity sections, and extraterrestrial creatures to encounter.
4. **Zombie-Infested Town**: A desolate town overrun by hordes of aggressive
zombies, featuring intense close-quarters combat and puzzle-solving to find
safe passage.
5. **Underwater Research Facility**: A deep-sea laboratory flooded with water,
filled with mutated aquatic creatures, and requiring stealth and underwater
exploration skills to survive.
표 9. 자기 일관성을위한 프롬프트의 예
예, 그 주제는 1 인칭 비디오 게임에 적합한 것 같습니다. 원래 프롬프트로 돌아가 봅시다. 그러나 이번
에는 컨텍스트로서 뒤로 물러서서 반환 될 내용을 확인하고 이번에는 반환 될 내용을 확인하십시오.
February 2025
27
Prompt Engineering
Prompt
Context: 5 engaging themes for a first person shooter video game:
1. **Abandoned Military Base**: A sprawling, post-apocalyptic
military complex crawling with mutated soldiers and rogue
robots, ideal for challenging firearm combat.
2. **Cyberpunk City**: A neon-lit, futuristic urban environment
with towering skyscrapers and dense alleyways, featuring
cybernetically enhanced enemies and hacking mechanics.
3. **Alien Spaceship**: A vast alien vessel stranded on
Earth, with eerie corridors, zero-gravity sections, and
extraterrestrial creatures to encounter.
4. **Zombie-Infested Town**: A desolate town overrun by hordes of
aggressive zombies, featuring intense close-quarters combat and
puzzle-solving to find safe passage.
5. **Underwater Research Facility**: A deep-sea laboratory flooded
with water, filled with mutated aquatic creatures, and requiring
stealth and underwater exploration skills to survive.
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.
Output
In the heart of a murky abyss, lies a dilapidated underwater research facility,
standing as a testament to human ambition and its disastrous consequences.
Shrouded in darkness, pulsating with the hum of malfunctioning machinery, and
haunted by the echoes of drowned souls, the facility is now a breeding ground for
a nightmare borne from the deep sea. The player, an elite marine equipped with
advanced diving gear and experimental weaponry, is tasked with venturing into
this aquatic realm of terror. Armed with resilience and resourcefulness, they must
navigate treacherous corridors, solve cryptic puzzles, and confront gruesome sea
monstrosities that lurk in the depths. From grappling with the crushing pressure
of the deep sea to outsmarting cunning aquatic predators, every moment in this
uncharted underworld tests the limits of human endurance and courage.
표 10. 자기 일관성을위한 프롬프트의 예
흥미로운 비디오 게임처럼 보입니다! 단계 뒤로 프롬프트 기술을 사용하면 프롬프트의 정확도를 높
일 수 있습니다.
February 2025
28
Prompt Engineering
사고 체인 (COT)
사고 (COT) 9 프롬프트는 중간 추론 단계를 생성하여 LLM의 추론 능력을 향상시키는 기술입니다.
이를 통해 LLM이보다 정확한 답변을 생성하는 데 도움이됩니다. 제로 샷 사고 체인으로 도전하기 때
문에 응답하기 전에 추론이 필요한보다 복잡한 작업에서 더 나은 결과를 얻기 위해 소수의 샷 프롬프
트와 결합 할 수 있습니다.
침대에는 많은 장점이 있습니다. 우선, 매우 효과적이지 않고 효과가 낮으며 상용 LLM과 잘 어울립니
다 (따라서 미세 조정할 필요가 없습니다). 또한 LLM의 응답에서 배우고 추론 된 추론 단계를 볼 수
있듯이 COT 프롬프트로 해석 가능성을 얻습니다. 오작동이 있으면 식별 할 수 있습니다. 사고 체인은
다른 LLM 버전 사이를 이동할 때 견고성을 향상시키는 것으로 보입니다. 즉, 프롬프트가 추론 체인을
사용하지 않는 경우보다 프롬프트의 성능이 다른 LLM간에 드리프트해야합니다. 물론 단점도 있지만
다소 직관적입니다.
LLM 응답에는 사고 추론의 체인이 포함되어 있습니다. 이는 더 많은 출력 토큰을 의미합니다.
즉, 예측 비용이 더 많은 비용이 들고 더 오래 걸립니다.
표 11의 다음 예를 설명하려면 먼저 큰 언어 모델의 결함을 보여주기 위해 COT를 사용하지 않는 프
롬프트를 만들어 보겠습니다.
Prompt
When I was 3 years old, my partner was 3 times my age. Now, I
am 20 years old. How old is my partner?
Output
63 years old
표 11. 엑사
February 2025
수학적 p를 해결하려는 프롬프트의 mple
로블 렘
29
Prompt Engineering
Yikes. 그것은 분명히 잘못된 대답입니다. 사실, LLM은 종종 수학적 작업으로 어려움을 겪고 잘못된
답변을 제공 할 수 있습니다. 이것은 많은 양의 텍스트에 대해 훈련을 받았고 수학에는 다른 접근법
이 필요할 수 있기 때문입니다. 따라서 중간 추론 단계가 출력을 향상시킬 수 있는지 살펴 보겠습니
다.
Prompt
When I was 3 years old, my partner was 3 times my age. Now,
I am 20 years old. How old is my partner? Let's think step
by step.
Output
1. Let’s assume my current age is “x” years.
2. When I was 3 years old, my age was 3 years.
3. My partner’s age at that time was 3 times my age, which means my partner’s
age was 3 * 3 = 9 years.
4. Now, I am 20 years old, which means my age has increased by 20 - 3 = 17
years since I was 3 years old.
5. Since my partner’s age was 9 years when I was 3 years old, and my age has
increased by 17 years, my partner’s age must have also increased by 17 years.
6. Therefore, my partner’s current age is 9 + 17 = 26 years.
So, my partner is 26 years old.
표 12. 사고의 사슬의 예
좋아, 이제 최종 답변이 맞다. 우리는 LLM에 답을 반환하는 대신 각 단계를 설명하도록 명확하게 지
시했기 때문입니다. 이 모델이 17 년을 증가 시킨다는 것은 흥미 롭습니다. 내 머릿속에서 나는 내 파
트너와 나 사이의 몇 년 차이를 취하고 그것들을 추가 할 것입니다. (20 +( 9-3 )). 모델이 나처럼 조금
더 생각하도록 도와합시다.
February 2025
30
Prompt Engineering
표 12는 '제로 샷'사고의 예입니다. 사고 프롬프트는 표 13에서 볼 수있는 바와 같이 단일 샷 또는 소수
의 샷과 결합 할 때 매우 강력 할 수 있습니다.
Prompt
Q: When my brother was 2 years old, I was double his age. Now
I am 40 years old. How old is my brother? Let's think step
by step.
A: When my brother was 2 years, I was 2 * 2 = 4 years old.
That's an age difference of 2 years and I am older. Now I am 40
years old, so my brother is 40 - 2 = 38 years old. The answer
is 38.
Q: When I was 3 years old, my partner was 3 times my age. Now,
I am 20 years old. How old is my partner? Let's think step
by step.
A:
Output
When I was 3 years old, my partner was 3 * 3 = 9 years old. That’s an age
difference of 6 years and my partner is older. Now I am 20 years old, so my
partner is 20 + 6 = 26 years old. The answer is 26.
표 13. 단일 샷으로 프롬프트 사고의 예
사고 체인은 다양한 사용 사례에 유용 할 수 있습니다. 요청을 몇 단계로 분류하고 특정 코드 라인에
매핑하는 코드 생성을 생각해보십시오. 또는 "The product is called XYZ,
write a description guiding the model through the assumptions you would make based on
the product given title."와 같은 종류의 씨앗이있을 때 합성 데이터를 만들기 위해서는 일반적으로‘
대화를 통해 해결할 수있는 모든 작업은 사고 체인의 좋은 후보입니다. 문제를 해결하기위한 단계를
설명 할 수 있다면 사고를 시도하십시오.
GoogleCloudPlatform github 저장소에서 호스팅 된 노트북 10를 참조하십시오.
February 2025
31
Prompt Engineering
이 장의 모범 사례 섹션에서, 우리는 사고 프롬프트와 관련된 몇 가지 모범 사례를 배웁니다.
일관성
대형 언어 모델은 다양한 NLP 작업에서 인상적인 성공을 보여 주었지만, 이론적 인 능력은 종종 모델
크기를 증가 시켜서만 극복 할 수없는 한계로 여겨집니다. 우리가 이전의 사고 프롬프트 섹션에서 배
운 것처럼, 모델은 문제를 해결하는 인간과 같은 추론 단계를 생성하도록 자극 할 수 있습니다. 그러나
COT는 간단한 '욕심 많은 디코딩'전략을 사용하여 효과를 제한합니다. 자기 일관성 11은 샘플링과 다수
투표를 결합하여 다양한 추론 경로를 생성하고 가장 일관된 답변을 선택합니다. LLM에 의해 생성 된
응답의 정확성과 일관성을 향상시킵니다.
자기 일관성은 의사 확보 가능성에 대한 가능성을 부여하지만 대답이 정확하지만 분명히 비용
이 많이 듭니다.
다음 단계를 따릅니다.
1. 다양한 추론 경로 생성 : LLM에는 동일한 프롬프트가 여러 번 제공됩니다. 고온 설정은 모델이
문제에 대한 다양한 추론 경로와 관점을 생성하도록 권장합니다.
2. 생성 된 각 응답에서 답을 추출하십시오.
3. 가장 일반적인 답변을 선택하십시오.
이메일을 중요하거나 중요하지 않은 것으로 분류하는 이메일 분류 시스템의 예를 살펴 보겠습니다.
제로 사고 프롬프트 체인은 각각 제출 후 응답이 다른지 확인하기 위해 LLM에 여러 번 전송됩니다.
친절한 톤, 단어 선택 및 이메일에 사용 된 풍자에 주목하십시오. 이 모든 것이 LLM을 속일 수 있습니
다.
February 2025
32
Prompt Engineering
Prompt
EMAIL:
```
Hi,
I have seen you use Wordpress for your website. A great open
source content management system. I have used it in the past
too. It comes with lots of great user plugins. And it's pretty
easy to set up.
I did notice a bug in the contact form, which happens when
you select the name field. See the attached screenshot of me
entering text in the name field. Notice the JavaScript alert
box that I inv0k3d.
But for the rest it's a great website. I enjoy reading it. Feel
free to leave the bug in the website, because it gives me more
interesting things to read.
Cheers,
Harry the Hacker.
```
Classify the above email as IMPORTANT or NOT IMPORTANT. Let's
think step by step and explain why.
Continues next page...
February 2025
33
Prompt Engineering
Output
Attempt 1
**Step 1: Identify the purpose of the email.**
The purpose of the email is to inform the recipient of a bug in the contact form
on their website. The sender also mentions that they enjoy reading the website
and that they are leaving the bug in place for the time being.
**Step 2: Assess the potential impact of the bug.**
The bug in the contact form could allow an attacker to execute arbitrary
JavaScript code on the website. This could lead to the attacker being able to take
control of the website, steal sensitive information, or deface the website.
**Step 3: Consider the credibility of the sender.**
The sender of the email claims to be a hacker named Harry. However, there is no
way to verify the sender’s identity. It is possible that the sender is a legitimate
hacker who is trying to help the recipient, but it is also possible that the sender
is a malicious actor who is trying to trick the recipient into clicking on a malicious
link or downloading a malicious file.
**Conclusion: IMPORTANT**
Based on the potential impact of the bug and the credibility of the sender,
the email should be classified as **IMPORTANT**. The recipient should take
immediate action to fix the bug and protect their website from attack.
Output
Attempt 2
**Explanation:**
1. **Lack of urgency:** The email does not convey any sense of urgency or
time-sensitivity. It starts with a casual greeting and presents the information
in a matter-of-fact tone.
2. **Non-critical bug report:** The bug reported in the contact form is
described as interesting but not critical. The email sender even suggests that
the website owner can leave the bug in place.
3. **Lack of personal impact:** The email does not indicate any direct or
personal impact on the website owner. It simply mentions that the sender
enjoys reading the website.
Continues next page...
February 2025
34
Prompt Engineering
Output
Attempt 2
4. **Absence of action request:** The email does not explicitly request any
action from the website owner. It does not ask for the bug to be fixed or
provide any specific suggestions for improvement.
5. **Sender’s intent:** The sender’s intention seems to be more focused on
sharing an observation and expressing interest in the website rather than
raising a serious concern or requesting assistance.
**Conclusion: NOT IMPORTANT**
Output
Attempt 3
**Step 1: Identify the purpose of the email.**
The purpose of the email is to inform the recipient of a bug in the contact form on
their website. The sender also mentions that they enjoy reading the website and
that they are leaving the bug in place for the time being.
**Step 2: Assess the potential impact of the bug.**
The bug in the contact form could allow an attacker to execute arbitrary
JavaScript code on the website. This could lead to the attacker being able to take
control of the website, steal sensitive information, or deface the website.
**Step 3: Consider the credibility of the sender.**
The sender of the email claims to be a hacker named Harry. However, there is no
way to verify the sender’s identity. It is possible that the sender is a legitimate
hacker who is trying to help the recipient, but it is also possible that the sender is
a malicious actor who is trying to exploit the bug for their own gain.
**Conclusion:**
Based on the above factors, the email should be classified as **IMPORTANT**.
The bug in the contact form is a serious security risk, and the sender’s credibility
is unknown. The recipient should take immediate action to fix the bug and
발신자의 주장을 조사하십시오.
표 14. 자기 일관성을위한 프롬프트의 예
위의 프롬프트를 사용하여 일관된 분류를 반환하는지 확인할 수 있습니다. 사용중인 모델과 온
도 구성에 따라 "중요"또는 "중요하지 않은"을 반환 할 수 있습니다.
February 2025
35
Prompt Engineering
많은 생각의 사슬을 생성하고 가장 일반적으로 발생하는 답변 ( "중요")을 취함으로써 LLM으로부
터보다 일관되게 정답을 얻을 수 있습니다.
이 예는 여러 관점을 고려하고 가장 일관된 답변을 선택하여 LLM의 반응의 정확성을 향상시키는
데 자기 컨설턴트 프롬프트가 어떻게 사용될 수 있는지 보여줍니다.
생각의 나무 (tot)
우리는 사고의 사슬과 자기 일관성 프롬프트에 익숙해지면 생각의 트리를 검토합시다. 이것은 그림 1
에 나와 있습니다.
그림 1. 왼쪽과 왼쪽에서 프롬프트의 사고 체인의 시각화. 오른쪽에 프롬프트의 나무
February 2025
36
Prompt Engineering
이 접근법은 탐색이 필요한 복잡한 작업에 특히 적합합니다. 그것은 생각의 나무를 유지함으로써 작동
하며, 각 생각은 문제를 해결하기위한 중간 단계 역할을하는 일관된 언어 순서를 나타냅니다. 그런 다
음 모델은 트리의 다른 노드에서 분기하여 다른 추론 경로를 탐색 할 수 있습니다.
훌륭한 노트북이 있습니다.이 노트는 논문 '대형 언어 모델 가이드 트리'를 기반으로 한 The Tree
of Thought (TOT)를 보여주는 좀 더 자세히 설명합니다 .9
React (이유 및 법)
이유 및 법 (REACT) [10] 13 프롬프트는 LLM이 외부 도구 (검색, 코드 통역사 등)와 결합 된 자연 언어
추론을 사용하여 LLM이 외부 API와 상호 작용하여 에이전트 모델링에 대한 첫 번째 단계 인 정보를
검색 할 수 있도록하는 복잡한 작업을 해결할 수있는 패러다임입니다.
우리가 구두로 추론하고 정보를 얻기 위해 행동을 취할 수 있기 때문에 실제 세계에서 인간이
어떻게 운영되는지 모방합니다. React는 다양한 도메인의 다른 프롬프트 엔지니어링 접근 방식
에 대해 잘 작동합니다.
추론을 결합하고 사고 조치 루프로 행동함으로써 프롬프트가 작품을 반응합니다. LLM은 문제에 대
한 첫 번째 이유가 있으며 행동 계획을 생성합니다. 그런 다음 계획에서 조치를 수행하고 결과를 관
찰합니다. 그런 다음 LLM은 관찰을 사용하여 추론을 업데이트하고 새로운 행동 계획을 생성합니다
. 이 과정은 LLM이 문제에 대한 해결책에 도달 할 때까지 계속됩니다.
이것을 실제로 보려면 코드를 작성해야합니다. 코드 스 니펫 1에서 나는 vertexai (
google-cloud-aiplatform) 및 google-search-results pip packages과 함께 Python 용
Langchain 프레임 워크를 사용하고 있습니다.
February 2025
37
Prompt Engineering
이 샘플을 실행하려면 https://serpapi.com/manage- api-key에서 (무료) serpapi 키를 만들고 환경 변수
SERPAPI_API_KEY을 설정해야합니다.
다음으로 LLM이 파악할 작업이 포함 된 일부 파이썬 코드를 작성하겠습니다. How many children
have a famous dad that performs in the band Metallica.
파이썬
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import VertexAI
prompt = "How many kids do the band members of Metallica have?"
llm = VertexAI(temperature=0.1)
tools = load_tools(["serpapi"], llm=llm)
agent = initialize_agent(tools, llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run(prompt)
스 니펫 1. Langchain 및 vertexai와 함께 반응 제작
코드 스 니펫 2는 결과를 보여줍니다. React는 5 개의 검색을 체인합니다. 실제로 LLM은 Google 검
색 결과를 긁어 밴드 이름을 파악하고 있습니다. 그런 다음 결과를 관찰로 나열하고 다음 검색에 대
한 생각을 사슬로 사로 잡습니다.
February 2025
38
Prompt Engineering
> Entering new AgentExecutor chain...
Metallica has 4 members.
Action: Search
Action Input: How many kids does James Hetfield have?
Observation: three children
Thought: 1/4 Metallica band members have 3 children
Action: Search
Action Input: How many kids does Lars Ulrich have?
Observation: 3
Thought: 2/4 Metallica band members have 6 children
Action: Search
Action Input: How many kids does Kirk Hammett have?
Observation: Hammett has been married to his second wife Lani since 1998.
They have two sons, Angel (b. September 29, 2006) and Vincenzo (b. June
28, 2008).
Thought: 3/4 Metallica band members have 8 children
Action: Search
Action Input: How many kids does Robert Trujillo have?
Observation: 2
Thought: 4/4 Metallica band members have 10 children
Final Answer: 10
스 니펫 2. 터미널에서 반응 제를 실행합니다
코드 스 니펫 2는 밴드 메탈 리카에 4 개의 밴드 멤버가 있음을 알 수 있습니다. 그런 다음 각 밴드 멤
버를 검색하여 총 어린이를 요청하고 총계를 추가합니다. 마지막으로, 총 자녀 수를 최종 답변으로 반
환합니다.
반응 프롬프트는 실제로 이전 프롬프트/응답을 지속적으로 재판매하고 (추가 생성 된 컨텐츠의 트리
밍) 적절한 예제/지침으로 모델을 설정해야한다는 것을 이해해야합니다. GoogleCloudPlatform GitHu
b 저장소에서 호스팅 된 노트북 14를 참조하십시오.이 예제는보다 정교한 예제와 함께 실제 LLM 입
력 및 출력을 보여주는 좀 더 자세하게 설명합니다.
February 2025
39
Prompt Engineering
자동 프롬프트 엔지니어링
이 시점에서 프롬프트를 작성하는 것이 복잡 할 수 있음을 알 수 있습니다. 이것을 자동화하는 것이
좋지 않습니까 (프롬프트를 작성하려면 프롬프트 작성)? APE (자동 프롬프트 엔지니어링) 방법이
있습니다. 이 방법 15은 인간 입력의 필요성을 완화 할뿐만 아니라 다양한 작업에서 모델의 성능을
향상시킵니다.
더 많은 프롬프트를 생성하도록 모델을 자극합니다. 그것들을 평가하고, 좋은 것을 바꿀 수 있습니
다. 그리고 반복.
예를 들어, 상품 티셔츠 웹숍을위한 챗봇 훈련에 도움이되는 자동 프롬프트 엔지니어링을 사용할 수
있습니다. 우리는 고객이 밴드 상품 티셔츠를 구매하라는 주문을 표현할 수있는 다양한 방법을 알아
내고 싶습니다.
1. 출력 변형을 생성하는 프롬프트를 작성하십시오. 이 예에서는 Gemini-Pro를 사용하여 10 개
의 지침을 생성하고 있습니다. 표 15 참조 :
February 2025
40
Prompt Engineering
Prompt
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.
Output
1. I’d like to purchase a Metallica t-shirt in size small.
2. Can I order a small-sized Metallica t-shirt?
3. I’d like to buy one Metallica t-shirt in small.
4. One Metallica shirt, size small, please.
5. I want one Metallica t-shirt in size small.
6. I’d like to place an order for one Metallica t-shirt in small.
7. Small Metallica t-shirt, one please.
8. I’m looking for one Metallica t-shirt in small.
9. Can you get me one Metallica t-shirt in small?
10. One Metallica small t-shirt, please.
표 15. LLM을 사용하여 프롬프트를 생성하십시오
2. 선택한 메트릭을 기준으로 후보자를 채점하여 모든 교육 후보를 평가하십시오. 예를 들어, 사용
할 수 있습니다. BLEU (이중 언어 평가 학부) 또는 Rouge (요약 평가를위한 리콜 지향 학부).
3. 평가 점수가 가장 높은 지침 후보를 선택하십시오. 이 응시자는 소프트웨어 응용 프로그램 또는
챗봇에서 사용할 수있는 최종 프롬프트가됩니다. 선택 프롬프트를 조정하고 다시 평가할 수도 있습
니다.
February 2025
41
Prompt Engineering
코드 프롬프트
Gemini는 주로 텍스트 기반 프롬프트에 중점을두고 있으며, 여기에는 코드를 반환하기위한 프롬
프트도 포함됩니다. Vertex AI Studio로 가서이 프롬프트를 테스트하여 코딩 예제를 살펴 보겠습
니다.
코드 작성 프롬프트
Gemini는 또한 개발자가되어 선택한 프로그래밍 언어로 코드를 작성하는 데 도움을 줄 수 있습니다.
개발자로서 이것은 코드 작성 프로세스 속도를 높이는 데 도움이 될 수 있습니다.
이름을 바꿔야 할 수백 개의 파일이있는 컴퓨터의 폴더를 상상해보십시오. 각 파일의 이름을 바
꾸는 데 많은 시간이 걸립니다. 당신은 약간의 배쉬를 알고 있으며, 이것을 자동화하기 위해 스크
립트를 작성할 수는 있지만, 그것은 또한 시간이 걸릴 수도 있습니다. 그럼 프롬프트를 작성해 봅
시다. 공개 소비자 챗봇 Gemini에 프롬프트를 작성하거나 기밀성에 대해 더 우려하는 경우 Googl
e Cloud 계정에 이러한 프롬프트를 작성하고 Vertex AI Studio를 열 수 있습니다. Vertex AI Studio
의 장점은 온도 등을 구성 할 수 있다는 것입니다.
February 2025
42
Prompt Engineering
Name
1_bash_rename_files_in_folder
Goal
Write a prompt to write code in Bash to rename files in a folder.
Model
gemini-pro
Temperature
0.1
Token Limit
1024
Top-K
N/A
Top-P
1
Prompt
Write a code snippet in Bash, which asks for a folder name.
Then it takes the contents of the folder and renames all the
files inside by prepending the name draft to the file name.
Output
```bash
#!/bin/bash
# Ask for the folder name
echo "Enter the folder name: "
read folder_name
# Check if the folder exists
if [ ! -d "$folder_name" ]; then
echo "Folder does not exist."
exit 1
fi
# Get the list of files in the folder
files=( "$folder_name"/* )
# Rename each file by prepending "draft" to the file name
for file in "${files[@]}"; do
new_file_name="draft_$(basename "$file")"
mv "$file" "$new_file_name"
done
echo "Files renamed successfully."
```
표 16. Gemini를 사용하여 프로그램 코드를 사용합니다
그것은 나에게 좋은 코드처럼 보인다 - 심지어 문서화되어있다! 그러나 LLM은 추론 할 수없고 교육
데이터를 반복 할 수 없으므로 먼저 코드를 읽고 테스트해야합니다.
우리 모두가 기다리는 순간, 실제로 작동합니까?
February 2025
43
Prompt Engineering
파일이 몇 개있는 테스트 폴더를 사용하여 먼저 시도해 봅시다. Filename.txt에서 Draft_Filename.txt로
이름을 바꿔야합니다.
1. 표 16에서 출력을 복사하고 (```bash ```텍스트 랩퍼없이)“rename_files.sh”라는 새 파일에 붙여 넣습
니다.
2. 터미널 창을 열고 다음을 입력하십시오. Rename_files.sh. 폴더 이름을 입력하도록 요청합니다 (예 :
시험. 그리고 Enter를 누르십시오.
3. 스크립트가 잘 실행되는 것 같습니다. 메시지가 표시됩니다. 파일의 이름이 성공적으로 바뀌
었습니다. 테스트 폴더를 살펴보면 모든 파일의 이름이 draft_filename.txt로 완벽하게 이름이 바
뀌 었습니다.
효과가 있었다!
코드를 설명하기위한 프롬프트
팀에서 일할 때 개발자로서 다른 사람의 코드를 읽어야합니다. Gemini는 이것도 당신을 도울 수 있
습니다. 표 16에서 코드 출력을 가져 와서 주석을 제거하고 큰 언어 모델에 무슨 일이 일어나고 있
는지 설명하려면 표 17을 참조하십시오.
February 2025
44
Prompt Engineering
Name
1_bash_explain_the_code
Goal
Write a prompt to explain Bash code
Model
gemini-pro
Temperature
0.1
Token Limit
1024
Top-K
N/A
Top-P
1
Prompt
Explain to me the below Bash code:
```
#!/bin/bash
echo "Enter the folder name: "
read folder_name
if [ ! -d "$folder_name" ]; then
echo "Folder does not exist."
exit 1
fi
files=( "$folder_name"/* )
for file in "${files[@]}"; do
new_file_name="draft_$(basename "$file")"
mv "$file" "$new_file_name"
done
echo "Files renamed successfully."
```
Output
This Bash script performs the following tasks:
1. **User Input**:
- It prompts the user to enter a folder name using the `echo` and `read`
commands. The entered folder name is stored in the `folder_name` variable.
2. **Folder Existence Check**:
- It checks if the folder with the specified name exists using the `[ ! -d
“$folder_name” ]` condition. If the folder does not exist, it displays an error
message (“Folder does not exist.”) and exits the script with an exit code of 1.
Continues next page...
February 2025
45
Prompt Engineering
Output
3. **File Listing**:
- It lists all the files inside the specified folder using the `files=( “$folder_
name”/* )` command. This creates an array called `files` containing the paths
to all the files in the folder.
4. **File Renaming**:
- It iterates through each file in the `files` array using a `for` loop.
- For each file, it generates a new file name using the `new_file_
name=”draft_$(basename “$file”)” ` command. This new file name is created
by prefixing the original file name with the string “draft_”.
- It then renames the file using the `mv “$file” “$new_file_name”` command,
which moves the file to the new file name.
5. **Success Message**:
- After renaming all the files, it displays a success message (“Files renamed
successfully.”) to indicate that the renaming operation was successful
표 17. 코드를 설명하는 프롬프트
코드 변환 프롬프트
표 16의 bash 코드는 잘 작동하는 것 같습니다. 그러나이 스크립트는 파일 이름을 제시 할 때 실제로
재사용 할 수 있습니다. 이상적으로는 UI와 별도의 응용 프로그램으로 작동해야합니다. 출발점으로,
파이썬은 bash보다 (웹) 응용 프로그램에 더 나은 언어가 될 것입니다. LLM은 코드를 한 언어에서 다
른 언어로 번역하는 데 도움이 될 수 있습니다. 표 18의 예를 참조하십시오.
February 2025
46
Prompt Engineering
Name
1_python_rename_files
Goal
Write a prompt to translate Bash code to Python
Model
gemini-pro
Temperature
0.1
Token Limit
1024
Top-K
N/A
Top-P
1
Prompt
Translate the below Bash code to a Python snippet.
```bash
#!/bin/bash
echo "Enter the folder name: "
read folder_name
if [ ! -d "$folder_name" ]; then
echo "Folder does not exist."
exit 1
fi
files=( "$folder_name"/* )
for file in "${files[@]}"; do
new_file_name="draft_$(basename "$file")"
mv "$file" "$new_file_name"
done
echo "Files renamed successfully."
```
Output
```python
import os
import shutil
# Get the folder name from the user
folder_name = input("Enter the folder name: ")
# Check if the folder exists
if not os.path.isdir(folder_name):
print("Folder does not exist.")
exit(1)
Continues next page...
February 2025
47
Prompt Engineering
Output
# Get a list of all files in the folder
files = os.listdir(folder_name)
# Iterate over the files
for file in files:
# Create a new file name with the prefix "draft_"
new_file_name = f"draft_{file}"
# Move the file to the new name
shutil.move(os.path.join(folder_name, file),
os.path.join(folder_name, new_file_name))
# Print a success message
print("Files renamed successfully.")
```
표 18. Bash에서 Python으로 코드를 변환하는 프롬프트
코드를 읽고 검토하십시오. 프롬프트에서 출력을 복사하여 새 파일 인 file_renamer.py에 붙여 넣
습니다. 터미널 창을 열어 코드를 테스트하고 다음 명령 Python File_Renamer.py를 실행하십시오.
참고 : Vertex AI의 Language Studio에서 (Python) 코드를 프롬프 할 때 'Markdown'버튼을 클릭해야
합니다. 그렇지 않으면 적절한 선의 압축이없는 일반 텍스트를 받게되며, 이는 Python 코드를 실행
하는 데 중요합니다.
코드 디버깅 및 검토를위한 프롬프트
표 18의 코드에 수동으로 편집물을 작성해 봅시다. 사용자에게 파일 이름 접두사를 자극 하고이
접두사를 대문자로 작성해야합니다. Snippet *3의 예제 코드를 참조하십시오. 이제 파이썬 오류
를 반환합니다!
February 2025
48
Prompt Engineering
파이썬
import os
import shutil
folder_name = input("Enter the folder name: ")
prefix = input("Enter the string to prepend to the filename: ")
text = toUpperCase(prefix)
if not os.path.isdir(folder_name):
print("Folder does not exist.")
exit(1)
files = os.listdir(folder_name)
for file in files:
new_filename = f"{text}_{file}"
shutil.move(os.path.join(folder_name, file),
os.path.joi(folder_name, new_file_name))
print("Files renamed successfully.")
스 니펫 3. 파손 된 파이썬 스크립트
도! 버그처럼 보입니다.
The below Python code gives an error:
Traceback (most recent call last):
File “/Users/leeboonstra/Documents/test_folder/rename_files.py”, line 7,
in <module>
text = toUpperCase(prefix)
NameError: name ‘toUpperCase’ is not defined
스 니펫 4. 나는 파이썬 코드를 깨뜨렸다
대형 언어 모델에 코드를 디버그하고 검토하도록 요청할 수 있는지 살펴 보겠습니다. 표 19를 살펴보
십시오.
February 2025
49
Prompt Engineering
Name
1_python_debug_code
Goal
Write a prompt to debug and review Python code.
Model
gemini-pro
Temperature
0.1
Token Limit
1024
Top-K
N/A
Top-P
1
Prompt
The below Python code gives an error:
Traceback (most recent call last):
File "/
Users/leeboonstra/Documents/test_folder/rename_files.py", line
7, in <module>
text = toUpperCase(prefix)
NameError: name 'toUpperCase' is not defined
Debug what's wrong and explain how I can improve the code.
```python
import os
import shutil
# Get the folder name from the user
folder_name = input("Enter the folder name: ")
prefix = input("Enter the string to prepend to the filename: ")
text = toUpperCase(prefix)
# Check if the folder exists
if not os.path.isdir(folder_name):
print("Folder does not exist.")
exit(1)
# Get a list of all files in the folder
files = os.listdir(folder_name)
# Iterate over the files
for file in files:
Continues next page...
February 2025
50
Prompt Engineering
Prompt
# Create a new file name with the prefix "draft_"
new_filename = f"{text}_{file}"
# Move the file to the new name
shutil.move(os.path.join(folder_name, file),
os.path.join(folder_name, new_file_name))
# Print a success message
print("Files renamed successfully.")
```
Output
The code calls the `toUpperCase` function to convert `prefix` to uppercase, but
that function is not defined. To fix this issue, you can use the `upper()` method of
the string class which converts a given string into uppercase. The modified code
is shown below:
```python
import os
import shutil
# Get the folder name from the user
folder_name = input("Enter the folder name: ")
prefix = input("Enter the string to prepend to the filename: ")
text = prefix.upper()
# Check if the folder exists
if not os.path.isdir(folder_name):
print("Folder does not exist.")
exit(1)
# Get a list of all files in the folder
files = os.listdir(folder_name)
# Iterate over the files
for file in files:
# Create a new file name with the prefix "draft_"
new_filename = f"{text}_{file}"
# Move the file to the new name
shutil.move(os.path.join(folder_name, file),
Continues next page...
February 2025
51
Prompt Engineering
Output
os.path.join(folder_name, new_filename))
# Print a success message
print("Files renamed successfully.")
```
Additionally, there are a few other improvements that can be made to the code:
1. The file extension of the new filenames is not kept. It’s better to extract the
extension from the original filename and append it to the new filename.
2. The code assumes that there are no spaces in the folder name. However,
it is a good practice to handle spaces gracefully by replacing them with
underscores or hyphens.
3. Using the `f` string syntax for string interpolation is more readable and
concise than the traditional `+` operator.
4. The code doesn’t handle errors that might occur during the renaming process.
It would be better to wrap the `shutil.move` call in a `try...except` block to
catch any potential errors.
Here is the improved code with these suggestions:
```python
import os
import shutil
# Get the folder name from the user
folder_name = input("Enter the folder name: ")
prefix = input("Enter the string to prepend to the filename: ")
# Check if the folder exists
if not os.path.isdir(folder_name):
print("Folder does not exist.")
exit(1)
# Get a list of all files in the folder
files = os.listdir(folder_name)
# Iterate over the files
for file in files:
Continues next page...
February 2025
52
Prompt Engineering
Output
# Get the file extension
ext = os.path.splitext(file)[1]
# Create a new file name with the prefix and the file extension
new_filename = f"{prefix}_{os.path.splitext(file)[0]}{ext}"
# Build the full paths for the original and new files
old_path = os.path.join(folder_name, file)
new_path = os.path.join(folder_name, new_filename)
# Try to move the file
try:
shutil.move(old_path, new_path)
except Exception as e:
print(f"An error occurred while moving the file
{file}: {e}")
# Print a success message
print("Files renamed successfully.")
```
These improvements make the code more robust and flexible while also making
it easier to read and understand... (The response was truncated because
it has reached the token limit. Try to increase the token limit if you need a
longer response.)
표 19. Python Co 디버깅 및 검토 프롬프트
드
훌륭합니다. 문제를 해결하는 방법을 알려 주었을뿐만 아니라 내 코드에 더 많은 버그가 있었으며 해
결 방법도 있습니다. 프롬프트의 마지막 부분은 일반적으로 코드를 개선하기위한 제안을했습니다.
February 2025
53
Prompt Engineering
멀티 모달 프롬프트는 어떻습니까?
코드에 대한 프롬프트는 여전히 동일한 일반 대형 언어 모델을 사용합니다. 멀티 모달 프롬프트는 별
도의 관심사이며, 텍스트에 의존하는 대신 여러 입력 형식을 사용하여 큰 언어 모델을 안내하는 기술
을 나타냅니다. 여기에는 모델의 기능과 현재 작업에 따라 텍스트, 이미지, 오디오, 코드 또는 기타 형
식의 조합이 포함될 수 있습니다.
모범 사례
올바른 프롬프트를 찾으려면 땜질이 필요합니다. Vertex AI의 Language Studio는 다양한 모델에 대해
테스트 할 수있는 프롬프트와 함께 놀기에 완벽한 장소입니다.
다음 모범 사례를 사용하여 신속한 엔지니어링 분야의 전문가가 되십시오.
예제를 제공하십시오
가장 중요한 모범 사례는 프롬프트 내에서 예제를 제공하는 것입니다. 이것은 강력한 교육 도구 역
할을하기 때문에 매우 효과적입니다. 이 예는 원하는 출력 또는 유사한 응답을 보여 주어 모델이 그
들로부터 배우고 그에 따라 자체 세대를 조정할 수있게합니다. 이는 모델에 목표를 달성 할 수있는
기준점 또는 목표를 제공하고, 정확도, 스타일 및 반응의 톤을 향상시키기 위해 기대치를 더 잘 일치
시킵니다.
February 2025
54
Prompt Engineering
단순성으로 디자인
프롬프트는 당신과 모델 모두에게 간결하고 명확하며 이해하기 쉬워야합니다. 경험상 이미 혼란 스러
우면 모델에 대해 혼란 스러울 것입니다. 복잡한 언어를 사용하지 말고 불필요한 정보를 제공하지 마
십시오.
예:
전에:
I am visiting New York right now, and I'd like to hear more about great
locations. I am with two 3 year old kids. Where should we go during
our vacation?
다시 쓰기 후 :
Act as a travel guide for tourists. Describe great places to visit in
New York Manhattan with a 3 year old.
동작을 설명하는 동사를 사용해보십시오. 예제는 다음과 같습니다.
행동, 분석, 분류, 분류, 대조, 비교, 비교, 설명, 정의, 평가, 추출, 찾기, 생성, 식별, 목록, 측정, 구
성, 구문 분석, 선택, 예측, 제공, 순위, 추천, 반환, 재 작성, 선택, 정렬, 요약, 번역, 쓰기.
February 2025
55
Prompt Engineering
출력에 대해 구체적으로하십시오
원하는 출력에 대해 구체적으로하십시오. 간결한 지시는 LLM을 충분히 안내하지 않거나 너무 일반
적 일 수 있습니다. 프롬프트에 특정 세부 정보를 제공하면 (시스템 또는 컨텍스트 프롬프트를 통해)
모델이 관련성에 집중하여 전반적인 정확도를 향상시키는 데 도움이 될 수 있습니다.
예:
하다:
Generate a 3 paragraph blog post about the top 5 video game consoles.
The blog post should be informative and engaging, and it should be
written in a conversational style.
하지 마십시오 :
Generate a blog post about video game consoles.
제약 조건에 대한 지침을 사용하십시오
LLM의 출력을 안내하기 위해 지시 및 제약 조건이 사용됩니다.
•명령어는 원하는 형식, 스타일 또는 응답의 내용에 대한 명시적인 지침을 제공합니다. 모델이 모델이
수행하거나 생산 해야하는 작업에 대한 모델을 안내합니다.
•제약 조건은 응답의 일련의 제한 또는 경계입니다. 모델이 수행하지 않거나 피해야 할 내용을 제한
합니다.
February 2025
56
Prompt Engineering
성장하는 연구에 따르면 프롬프트에 긍정적 인 지시에 초점을 맞추는 것은 제약에 크게 의존하는 것
보다 더 효과적 일 수 있습니다. 이 접근법은 인간이하지 말아야 할 일 목록보다 긍정적 인 지시를 선
호하는 방법과 일치합니다.
지시 사항은 원하는 결과를 직접 전달하는 반면, 제약 조건은 허용되는 내용에 대한 모델을 추측 할 수
있습니다. 정의 된 경계 내에서 유연성을 제공하고 창의성을 장려하는 반면 제약은 모델의 잠재력을
제한 할 수 있습니다. 또한 제약 조건 목록은 서로 충돌 할 수 있습니다.
제약은 여전히 가치가 있지만 특정 상황에서는 가치가 있습니다. 모델이 유해하거나 편향된 컨텐츠
를 생성하지 못하거나 엄격한 출력 형식 또는 스타일이 필요한 경우.
가능하다면 긍정적 인 지침을 사용하십시오. 모델에하지 말아야 할 일을 말하는 대신 대신해야 할 일
을 말하십시오. 이것은 혼란을 피하고 출력의 정확도를 향상시킬 수 있습니다.
하다:
Generate a 1 paragraph blog post about the top 5 video game consoles.
Only discuss the console, the company who made it, the year, and total
sales.
하지 마십시오 :
Generate a 1 paragraph blog post about the top 5 video game consoles.
Do not list video game names.
모범 사례로 지침 우선 순위를 정하고 모델이 원하는 것을 명확하게 명시하고 안전, 선명도 또는 특
정 요구 사항에 필요한 경우에만 제약 조건 만 사용하십시오. 다양한 지침 및 제약 조합을 테스트하
여 특정 작업에 가장 적합한 것을 찾아서 실험하고 반복하여이를 문서화하십시오.
February 2025
57
Prompt Engineering
최대 토큰 길이를 제어하십시오
생성 된 LLM 응답의 길이를 제어하려면 구성에서 최대 토큰 제한을 설정하거나 프롬프트에서 특정
길이를 명시 적으로 요청할 수 있습니다. 예를 들어:
"Explain quantum physics in a tweet length message."
프롬프트에 변수를 사용하십시오
프롬프트를 재사용하고 프롬프트에서보다 역동적 인 사용 변수를 만들려면 다른 입력에 대해 변경
할 수 있습니다. 예를 들어 표 20에 표시된 바와 같이, 도시에 대한 사실을 제공하는 프롬프트. 프롬
프트에서 도시 이름을 하드 코딩하는 대신 변수를 사용하십시오. 변수는 자신을 반복하지 않도록하
여 시간과 노력을 절약 할 수 있습니다. 여러 프롬프트에서 동일한 정보를 사용해야하는 경우 변수
에 저장 한 다음 각 프롬프트에서 해당 변수를 참조 할 수 있습니다. 프롬프트를 자신의 응용 프로그
램에 통합 할 때 이것은 의미가 있습니다.
Prompt
VARIABLES
{city} = "Amsterdam"
PROMPT
You are a travel guide. Tell me a fact about the city: {city}
Output
Amsterdam is a beautiful city full of canals, bridges, and narrow streets. It’s a
great place to visit for its rich history, culture, and nightlife.
표 20. 프롬프트의 변수 사용
February 2025
58
Prompt Engineering
입력 형식 및 쓰기 스타일을 실험하십시오
다른 모델, 모델 구성, 프롬프트 형식, 단어 선택 및 제출물은 다른 결과를 얻을 수 있습니다. 따라서 스
타일, 단어 선택 및 유형 프롬프트와 같은 신속한 속성을 실험하는 것이 중요합니다 (제로 샷, 몇 가지
샷, 시스템 프롬프트).
예를 들어 혁신적인 비디오 게임 콘솔 세가 드림 캐스트에 대한 텍스트를 생성하려는 목표를 가진
프롬프트는 질문, 진술 또는 지시로 공식화되어 다른 출력을 초래할 수 있습니다.
•질문 : Sega Dreamcast는 무엇이며 왜 그렇게 혁신적인 콘솔 이었습니까?
•성명서 : Sega Dreamcast는 1999 년 Sega가 발표 한 6 세대 비디오 게임 콘솔입니다. It ...
•교육 : Sega Dreamcast 콘솔을 설명하고 그것이 왜 그렇게 혁명적인지를 설명하는 단일 단락을
작성하십시오.
분류 작업으로 소수의 프롬프트를 위해 수업을 혼합하십시오.
일반적으로, 소수의 예제의 순서는 중요하지 않아야합니다. 그러나 분류 작업을 수행 할 때는 몇 가지
샷 예제에서 가능한 응답 클래스를 혼합해야합니다. 그렇지 않으면 예제의 특정 순서에 너무 적합 할
수 있기 때문입니다. 가능한 응답 클래스를 혼합함으로써 단순히 예제의 순서를 암기하는 대신 모델이
각 클래스의 주요 기능을 식별하는 방법을 배우도록 할 수 있습니다. 이로 인해 보이지 않는 데이터에
대한보다 강력하고 일반화 가능한 성능이 이어질 것입니다.
February 2025
59
Prompt Engineering
경험의 좋은 규칙은 6 개의 샷 예제로 시작하고 거기에서 정확도 테스트를 시작하는 것입니다.
모델 업데이트에 적응합니다
모델 아키텍처 변경, 추가 데이터 및 기능을 유지하는 것이 중요합니다. 새로운 모델 버전을 시도하
고 프롬프트를 조정하여 새로운 모델 기능을 더 잘 활용하십시오. Vertex AI Studio와 같은 도구는 다
양한 버전의 프롬프트를 저장, 테스트 및 문서화하기에 좋습니다.
출력 형식으로 실험하십시오
프롬프트 입력 형식 외에 출력 형식을 실험하는 것을 고려하십시오. 추출, 선택, 구문 분석, 주문,
순위 또는 분류와 같은 비 독창적 인 작업의 경우 데이터가 JSON 또는 XML과 같은 구조적 형식으
로 출력을 반환하도록 시도합니다.
데이터를 추출하는 프롬프트에서 JSON 객체를 반환하는 데 몇 가지 이점이 있습니다. 실제 응용 프
로그램에서는이 JSON 형식을 수동으로 생성 할 필요가 없으며 이미 정렬 된 순서로 데이터를 반환
할 수 있지만 (DateTime 객체와 함께 작업 할 때 매우 편리함) JSON 형식을 제시함으로써 모델이 구
조를 생성하고 환각을 제한하는 것이 좋습니다.
요약하면, 출력에 JSON을 사용하는 이점 :
•항상 같은 스타일로 반환합니다
•받고 싶은 데이터에 집중하십시오
February 2025
60
Prompt Engineering
•환각의 기회가 적습니다
•관계를 인식하게하십시오
•데이터 유형을 얻습니다
•정렬 할 수 있습니다
소수의 프롬프트 섹션의 표 4는 구조화 된 출력을 반환하는 방법에 대한 예를 보여줍
니다.
JSON 수리
JSON 형식의 데이터를 반환하면 많은 이점이 있지만 단점이 없습니다. JSON의 구조화 된 특성은
응용 프로그램에서 구문 분석 및 사용에 도움이되지만 일반 텍스트보다 훨씬 더 많은 토큰이 필요
하므로 처리 시간이 증가하고 비용이 더 높아집니다. 또한 JSON의 구두는 전체 출력 창을 쉽게 소
비 할 수 있으며, 토큰 제한으로 인해 생성이 갑자기 차단 될 때 특히 문제가됩니다. 이 잘림은 종종
유효하지 않은 JSON을 초래하고 결정적인 닫는 버팀대 나 브래킷이 누락되어 출력을 사용할 수 없
습니다. 다행히도 json-repair 라이브러리 (PYPI에서 사용 가능)와 같은 도구는 이러한 상황에
서 매우 중요 할 수 있습니다. 이 라이브러리는 지능적으로 불완전하거나 기형 JSON 객체를 자동으
로 고정하려고 시도하여 LLM 생성 JSON과 함께 작업 할 때 특히 잠재적 인 잘린 문제를 해결할 때
중요한 동맹국이됩니다.
February 2025
61
Prompt Engineering
Schemas와 협력합니다
구조화 된 JSON을 출력으로 사용하는 것은이 백서에서 여러 번 보았 듯이 훌륭한 솔루션입니다. 그
러나 input은 어떻습니까? JSON은 LLM이 생성하는 output를 구조화하는 데 탁월하지만, 제공하는
input을 구성하는 데 매우 유용 할 수 있습니다. 이곳은 JSON 스키마가 작용하는 곳입니다. JSON 스
키마는 JSON 입력의 예상 구조 및 데이터 유형을 정의합니다. 스키마를 제공함으로써 LLM에 예상
해야 할 데이터의 명확한 청사진을 제공하여 관련 정보에 attention에 초점을 맞추고 입력을 잘못 해
석 할 위험을 줄입니다. 또한 Schemas는 다양한 데이터 사이의 관계를 확립하고 특정 형식의 날짜 또
는 타임 스탬프 필드를 포함하여 LLM을 "시간을 인식"하게하는 데 도움이 될 수 있습니다.
간단한 예는 다음과 같습니다.
LLM을 사용하여 전자 상거래 카탈로그에서 제품에 대한 설명을 생성한다고 가정 해 봅시다. 제품
에 대한 무료 텍스트 설명 만 제공하는 대신 JSON 스키마를 사용하여 제품의 속성을 정의 할 수 있
습니다.
{
"type": "object",
"properties": {
"name": { "type": "string", "description": "Product name" },
"category": { "type": "string", "description": "Product category" },
"price": { "type": "number", "format": "float", "description": "Product
price" },
"features": {
"type": "array",
"items": { "type": "string" },
"description": "Key features of the product"
},
"release_date": { "type": "string", "format": "date", "description":
"Date the product was released"}
},
스 니펫 5. 구조화 된 출력 스키마의 정의
February 2025
62
Prompt Engineering
그런 다음 실제 제품 데이터를이 스키마를 준수하는 JSON 객체로 제공 할 수 있습니다.
{
"name": "Wireless Headphones",
"category": "Electronics",
"price": 99.99,
"features": ["Noise cancellation", "Bluetooth 5.0", "20-hour battery life"],
"release_date": "2023-10-27"
}
스 니펫 6. LLM의 구조적 출력
데이터를 전처리하고 스키마와 데이터를 모두 제공하는 전체 문서를 제공하는 대신 LLM에 출시 날짜
를 포함하여 제품의 속성에 대한 명확한 이해를 제공하므로 정확하고 관련된 설명을 생성 할 가능성
이 훨씬 높아집니다. LLM의 관련 분야에 대한 관심을 안내하는이 구조화 된 입력 접근법은 대량의 데
이터로 작업하거나 LLM을 복잡한 애플리케이션에 통합 할 때 특히 가치가 있습니다.
다른 프롬프트 엔지니어와 함께 실험하십시오
당신이 좋은 프롬프트를 생각해 내야하는 상황에 있다면, 여러 사람을 찾아 시도 할 수 있습니다. 모
든 사람이 모범 사례를 따르면 (이 장에 나열된대로) 모든 프롬프트 시도 간의 성능 차이가 나타납
니다.
February 2025
63
Prompt Engineering
침대 모범 사례
COT 프롬프트의 경우, 추론의 생성이 최종 답변을 예측할 때 모델이 얻는 토큰을 변경하기 때문
에 추론 후 답변을 요구합니다.
COT 및 일관성을 사용하면 추론과 분리 된 프롬프트에서 최종 답변을 추출 할 수 있어야합니다.
COT 프롬프트의 경우 온도를 0으로 설정하십시오.
사고 프롬프트는 욕심 많은 디코딩을 기반으로하며, 언어 모델에 의해 할당 된 최고 확률을 기반
으로 다음 단어를 순서대로 예측합니다. 일반적으로, 추론을 사용할 때, 최종 답변을 생각해 내기
위해 하나의 정답이 하나 일 수 있습니다. 따라서 온도는 항상 0으로 설정해야합니다.
다양한 신속한 시도를 문서화하십시오
마지막 팁은이 장에서 이전에 언급되었지만 우리는 그것이 얼마나 중요한지 강조 할 수 없습니다. 즉
, 신속한 시도를 자세히 설명하여 시간이 지남에 따라 잘 진행되지 않은 것을 배울 수 있습니다.
프롬프트 출력은 모델, 샘플링 설정 및 동일한 모델의 다른 버전에서도 다를 수 있습니다. 또한 동일한
모델과 동일한 프롬프트에서도 출력 문장 형식 및 단어 선택의 작은 차이가 발생할 수 있습니다. (예를
들어, 앞에서 언급 한 바와 같이, 두 개의 토큰이 동일한 예측 확률을 갖는 경우, 타이가 무작위로 파손
될 수 있습니다. 이렇게하면 후속 예측 토큰에 영향을 줄 수 있습니다.)
February 2025
64
Prompt Engineering
표 21을 템플릿으로 사용하여 Google 시트를 만드는 것이 좋습니다. 이 접근법의 장점은 필연적으로
프롬프트 작업을 다시 방문해야 할 때 완전한 기록을 가지고 있다는 것입니다. 미래에 수령하기 위해
(짧은 휴식 후에 잊어 버릴 수 있는지에 놀랄 수있는 금액), 다양한 버전의 모델에서 프롬프트 성능을
테스트하고 미래의 오류를 돕기 위해 미래의 오류를 돕습니다.
이 테이블의 필드 외에도 프롬프트 버전 (반복), 결과가 확인/가끔 OK/때때로 확인한 경우 캡처 할 필
드 및 피드백을 캡처하는 필드를 추적하는 것이 도움이됩니다. Vertex AI Studio를 사용하기에 운이
좋으면 프롬프트 (문서에 나열된 것과 동일한 이름과 버전 사용)를 저장하고 하이퍼 링크를 테이블의
저장된 프롬프트로 추적하십시오. 이런 식으로, 당신은 항상 당신의 프롬프트를 다시 실행하는 것을
클릭 할 수 있습니다.
retrieval augmented generation 시스템에서 작업 할 때 쿼리, 청크 설정, 청크 출력 및 기타 정보
를 포함하여 프롬프트에 삽입 된 내용에 영향을 미치는 RAG 시스템의 특정 측면을 캡처해야합니다
.
프롬프트가 완벽하다고 생각되면 프로젝트 코드베이스로 가져 가십시오. 코드베이스에서는 프롬프
트를 코드와 별도의 파일로 저장하므로 유지 관리가 더 쉽습니다. 마지막으로, 귀하의 프롬프트는 운
영 시스템의 일부이며, 프롬프트 엔지니어로서 귀하의 프롬프트가 작업에 얼마나 잘 일반화되는지
이해하기 위해 자동화 된 테스트 및 평가 절차에 의존해야합니다.
신속한 엔지니어링은 반복 프로세스입니다. 결과를 다른 프롬프트, 분석 및 문서화합니다. 모델
의 성능에 따라 프롬프트를 개선하십시오. 원하는 출력을 달성 할 때까지 실험을 계속하십시오.
모델 또는 모델 구성을 변경하면 돌아가서 이전에 사용 된 프롬프트를 계속 실험하십시오.
February 2025
65
Prompt Engineering
Name
[name and version of your prompt]
Goal
[One sentence explanation of the goal of this attempt]
Model
[name and version of the used model]
Temperature
[value between 0 - 1]
Token Limit
[number]
Top-K
[number]
Top-P
[number]
Prompt
[Write all the full prompt]
Output
[Write out the output or multiple outputs]
표 21. 프롬프트를 문서화하기위한 템플릿
요약
이 백서는 신속한 엔지니어링에 대해 설명합니다. 우리는 다음과 같은 다양한 프롬프트 기술을 배
웠습니다.
•제로 프롬프트
•소수의 샷 프롬프트
•시스템 프롬프트
•역할 프롬프트
•상황에 맞는 프롬프트
•계단식 프롬프트
•생각의 사슬
•자기 일관성
•생각의 나무
February 2025
66
Prompt Engineering
•반응
우리는 심지어 당신이 당신의 프롬프트를 자동화 할 수있는 방법을 조사했습니다.
그런 다음 백서는 프롬프트가 불충분 할 때 발생할 수있는 문제와 같은 Gen AI의 문제에 대해 논의합
니다. 우리는 더 나은 프롬프트 엔지니어가되는 방법에 대한 모범 사례를 마감했습니다.
February 2025
67
Prompt Engineering
endnotes
1. Google, 2023, Gemini By Google. https://gemini.google.com에서 구할 수 있습니다.
2. Google, 2024, Google Workspace 프롬프트 가이드를위한 Gemini. https://inthecloud.withgoogle.com/gemini-for-google-wo
rkspace-prompt-guide/dl-cd.html에서 사용할 수 있습니다. 3. Google Cloud, 2023, 프롬프트 소개. https://cloud.google.com/v
ertex-ai/generative-ai/docs/learn/prompts/introduction-prompt-design에서 구할 수 있습니다. 4. Google Cloud, 2023, 텍스트
모델 요청 본문 : Top-P & Top-K 샘플링 방법. https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/text#req
uest_body에서 사용할 수 있습니다. 5. Wei, J., et al., 2023, Zero Shot -Fine Tuned Language 모델은 제로 샷 학습자입니다. ht
tps://arxiv.org/pdf/2109.01652.pdf에서 구할 수 있습니다. 6. Google Cloud, 2023, Google Cloud Model Garden. https://cloud.g
oogle.com/model-garden에서 사용할 수 있습니다. 7. Brown, T., et al., 2023, 소수의 샷 - 언어 모델은 소수의 샷 학습자입니
다. https://arxiv.org/pdf/2005.14165.pdf에서 구할 수 있습니다. 8. Zheng, L., et al., 2023, 한 걸음 물러서 : 대형 언어 모델에
서 추상화를 통한 추론을 불러 일으킨다. https://openreview.net/pdf?id =3bq3jsvcq1 9. Wei, J., et al., 2023, 사고 프롬프트에
서 제공됩니다. https://arxiv.org/pdf/2201.11903.pdf에서 사용할 수 있습니다. 10. Google Cloud Platform, 2023, 사고 및 반응
체인. https://github.com/ googlecloudplatform/generative-ai/blob/main/language/prompts/examples/chain_of_thought_react.ipy
nb에서 사용할 수 있습니다.
11. Wang, X., et al., 2023, 자기 일관성은 언어 모델에서 사고 추론의 체인을 향상시킵니다. https://arxiv.org/pdf/2203.1
1171.pdf에서 사용할 수 있습니다. 12. Yao, S., et al., 2023, 사고의 나무 : 큰 언어 모델로 고의적 인 문제 해결. https://ar
xiv.org/pdf/2305.10601.pdf에서 사용할 수 있습니다. 13. Yao, S., et al., 2023, React : 언어 모델에서 시너지 효과와 행동.
https://arxiv.org/pdf/2210.03629.pdf에서 구할 수 있습니다. 14. Google Cloud Platform, 2023, Advance Prompting : 사고
및 반응. https://github.com/googlecloudplatform/applied-ai-engineering-samples/blob/main/genai- on-vertex-ai/advanced_p
rompting_training/cot_react.ipynb에서 구할 수 있습니다. 15. Zhou, C., et al., 2023, 자동 프롬프트 엔지니어링 - 대형 언
어 모델은 인간 수준의 프롬프트 엔지니어입니다. https://arxiv.org/pdf/2211.01910.pdf에서 구할 수 있습니다.
February 2025
68
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )