본문 바로가기

AI

Google's Prompt Engineering

들어가며 (Introduction)

구글이 2025년 2월에 발표한 68페이지 분량의 'Prompt Engineering' 백서(저자: Lee Boonstra)는 대규모 언어 모델(LLM)과의 상호작용을 최적화하기 위한 포괄적인 가이드 문서이다. 이 문서는 해외 개발자들 사이에서 상당한 주목을 받은 것으로 보이며, 국내에서도 관련 논의나 요약 자료들이 공유되기 시작했다. 다만, 아무래도 최신 기술의 상세한 원문 정보가 비영어권에 빠르게 전파되는 데에는 다소 시간이 걸릴 수 있다는 생각에, 구글의 공식 문서인 만큼 원문을 통해 주요 내용을 빠르게 훑어보았다. 단순 번역 + 응용 + 핵심단어로 내용을 정리해보았다.

구글의 Lee Boonstra가 저술했으며, 여러 콘텐츠 기여자, 큐레이터, 편집자, 기술 작가 및 디자이너가 참여했고, 2025년 2월에 작성하여 배포한 백서 이고 궁금해서 읽어보고 내용을 요약 해보았음.

원본 백서 : 22365_3_Prompt Engineering_v7.pdf

22365_3_Prompt Engineering_v7.pdf
6.50MB

리 분스트라(Lee Boonstra)는 Lee씨인가(?) 한국계인가 궁금해서 뭐하는 사람인지 구글링해보니 구글의 소프트웨어 엔지니어이자 개발자 지원 부서(Developer Advocate) 소속으로, 최고기술책임자(CTO) 사무실에서 근무하고 있다. 2017년부터 구글에 재직 중이며, 네덜란드 암스테르담을 기반으로 활동하고 있다.(심지어 Boonstra가 성인거 같다)

분스트라의 주요 전문 분야는 대화형 AI(Conversational AI), 생성형 AI(Generative AI), Dialogflow, 컨택센터 AI(Contact Center AI) 및 음성 기술입니다. 과거 소프트웨어 엔지니어, 프롬프트 엔지니어, 모바일 웹 개발자, 기술 트레이너 등 다양한 역할을 수행한 경험이 있다.

또한, 분스트라는 여러 기술 서적을 출판한 저자이기도 하다. 위에서 언급된 구글의 프롬프트 엔지니어링 백서의 저자이기도 하다. 활발한 공개 강연 활동도 하고있다고 한다. 분스트라가 저술한 서적중 한국에서도 판매 되고있는 서적은 아래와 같음.

프롬프트 엔지니어링 백서 요약

구글에서 발행한 "프롬프트 엔지니어링" 백서는 대규모 언어 모델(LLM)로부터 의미 있는 결과물을 얻기 위한 효과적인 프롬프트 설계의 반복적인 과정을 다룬다. 이 문서는 데이터 과학자나 머신러닝 엔지니어가 아니더라도 누구나 프롬프트를 작성할 수 있지만, 사용하는 모델, 학습 데이터, 모델 구성, 단어 선택, 스타일, 어조, 구조 및 맥락 등 다양한 요소가 프롬프트의 효과에 영향을 미치기 때문에 효과적인 프롬프트 작성은 복잡할 수 있다고 한다.

구글 프롬프트 엔지니어링 원칙 해부 (리 준스트라 백서 기반)

구글의 프롬프트 엔지니어링 가이드라인은 AI로부터 최적의 결과를 얻기 위한 체계적인 접근 방식을 제시한다. 이는 단순히 운이나 감에 의존하는 것이 아니라, 명확한 원칙과 기법을 통해 예측 가능하고 유용한 결과물을 만들어내는 공학적 방법론에 가깝다.  

A. 효과적인 프롬프트의 구성 요소 (핵심 원칙)

효과적인 프롬프트는 명확한 구조를 가지며, 모델이 사용자의 의도를 정확히 파악하는 데 필요한 모든 정보를 제공해야 한다. 구글 가이드에서 강조하는 주요 구성 요소는 다음과 같다.

  1. 입력 (Input - 필수): 모델이 응답을 생성하기 위해 필요한 핵심 텍스트이다. 이는 질문, 수행해야 할 작업, 처리 대상, 또는 모델이 완성하거나 이어갈 부분적인 내용일 수 있다. 명확하고 구체적인 입력은 원하는 결과의 첫걸음이다.  
  2. 컨텍스트 (Context - 선택 사항이지만 중요): 모델이 응답을 생성할 때 참고하거나 따라야 할 배경 정보 또는 지침이다. 컨텍스트는 모델의 행동 방식을 지정하거나, 응답의 범위를 제한하는 데 사용될 수 있다. 예를 들어, 특정 주제에 대한 요약을 요청할 때 원본 텍스트를 컨텍스트로 제공하면 모델은 해당 텍스트 내에서만 정보를 찾게 된다. 풍부하고 적절한 컨텍스트를 제공하는 것은 AI 응답의 질을 극적으로 향상시키는 핵심 요소이다. 사용자가 제공하는 배경 정보가 많을수록 모델은 사용자의 요구사항을 더 정확하게 이해하고 관련성 높은 답변을 생성할 가능성이 커진다.  
  3. 예시 (Examples - 선택 사항이지만 강력함): 입력-출력 쌍으로 구성된 예시를 프롬프트에 포함시켜 모델에게 이상적인 응답의 형태를 보여주는 것이다. 이를 **퓨샷 프롬프팅(Few-Shot Prompting)**이라고 하며, 응답 형식, 어투, 범위 등을 사용자가 원하는 대로 맞추는 데 매우 효과적이다. 예시를 제공하지 않는 제로샷(Zero-shot) 프롬프팅보다 훨씬 정교한 결과물을 얻을 수 있으며, 특히 특정 스타일이나 복잡한 형식을 요구할 때 그 효과가 두드러진다.  
  4. 역할, 작업, 형식 (Role, Task, Format - RTF): 일부 구글 문서에서는 프롬프트를 구조화하는 방식으로 역할(AI에게 특정 페르소나를 부여), 작업(수행할 구체적인 임무), 형식(원하는 출력물의 구조)을 명시하는 것을 권장한다. 예를 들어, "당신은 숙련된 여행 작가입니다(역할). 다음 정보를 바탕으로 매력적인 여행 블로그 게시물을 작성해주세요(작업). 각 단락은 3-4문장으로 구성하고, 주요 장소는 굵게 표시해주세요(형식)." 와 같이 구성할 수 있다.  

이러한 구성 요소들을 전략적으로 조합함으로써 사용자는 AI 모델과의 소통을 보다 정교하게 제어할 수 있다.

B. 주요 프롬프팅 기법 상세 설명

구글 가이드에서는 다양한 프롬프팅 기법을 소개하며, 각 기법은 특정 상황과 목적에 따라 효과적으로 활용될 수 있다.

  1. 제로샷, 원샷, 퓨샷 프롬프팅 (Zero-shot, One-shot, Few-shot Prompting):
    • 제로샷 프롬프팅: 모델에게 어떠한 예시도 제공하지 않고 지시만으로 응답을 요청하는 방식이다. 간단한 작업에는 유용할 수 있지만, 복잡하거나 특정한 형식을 요구하는 경우에는 정확도가 떨어질 수 있다.  
    • 원샷/퓨샷 프롬프팅: 모델에게 하나(원샷) 또는 여러 개(퓨샷)의 작업 예시를 제공하여 원하는 결과물의 패턴을 학습시키는 방식이다. 예시를 통해 모델은 사용자의 의도를 더 명확히 파악하고, 일관된 형식과 스타일로 응답을 생성할 가능성이 높아진다. 일반적으로 퓨샷 프롬프팅이 제로샷보다 더 나은 결과를 제공하는 경향이 있다.  
  2. 사고의 연쇄 프롬프팅 (Chain-of-Thought Prompting, CoT): 복잡한 추론이 필요한 문제에 대해, 모델이 단계별로 생각하는 과정을 명시적으로 유도하는 기법이다. 예를 들어 수학 문제 풀이를 요청할 때, 단순히 답만 요구하는 것이 아니라 풀이 과정을 함께 보여주는 예시를 제공하면 모델은 유사한 방식으로 단계적으로 문제를 해결하려 한다. 이는 모델이 정답에 도달하기까지의 논리적 흐름을 따라가도록 하여, 특히 산술, 상식 추론, 기호 추론 등 복잡한 작업에서 성능을 크게 향상시킬 수 있다.  
  3. ReAct (Reasoning and Acting): 추론(Reasoning)과 행동(Acting)을 결합하여 모델이 외부 도구를 사용하거나 정보를 검색하는 등의 행동을 수행하고, 그 결과를 바탕으로 다시 추론하여 목표를 달성하도록 하는 고급 기법이다. 이는 모델이 단순히 주어진 정보 내에서만 작동하는 것을 넘어, 능동적으로 필요한 정보를 찾고 문제를 해결하는 에이전트처럼 기능하게 만든다.  
  4. 단계별 지시 / 복잡한 작업 분해: 복잡한 작업을 한 번에 요청하기보다, 여러 개의 단순한 하위 단계로 나누어 각 단계별로 명확한 지시를 제공하는 방식이다. 각 단계의 출력이 다음 단계의 입력이 되는 연쇄적인 프롬프트 구성도 가능하다. 이러한 접근 방식은 모델이 각 단계를 성공적으로 완료하도록 유도하여 전체 작업의 성공률을 높인다. 복잡한 문제를 작은 단위로 나누어 처리함으로써, AI는 각 부분에 집중하여 더 정확하고 관리 가능한 결과물을 생성할 수 있다.  
  5. 시스템 지침 / 페르소나 설정: 모델이 프롬프트를 처리하기 전에 따르도록 하는 전반적인 지침이다. 여기에는 모델의 역할(예: "당신은 친절한 고객 서비스 담당자입니다"), 응답 스타일, 특정 정보를 참조하거나 회피하도록 하는 지침 등이 포함될 수 있다. 이는 모델의 행동과 응답 톤을 일관되게 유지하는 데 유용하다.

C. 반복과 개선: 최적의 결과물을 향한 여정

프롬프트 엔지니어링은 한 번에 완벽한 결과를 얻는 과정이라기보다는, 지속적인 실험과 개선을 통해 최적의 프롬프트를 찾아가는 반복적인 프로세스이다. 첫 번째 시도에서 만족스러운 결과를 얻지 못하더라도 실망할 필요가 없다. 다음과 같은 전략을 통해 프롬프트를 개선해 나갈 수 있다.  

 

  • 다른 표현 사용: 동일한 의미라도 다른 단어나 문장 구조로 프롬프트를 다시 작성하면 모델의 응답이 달라질 수 있다.  
  • 유사한 작업으로 전환: 모델이 특정 지시를 이해하는 데 어려움을 겪는다면, 동일한 결과를 얻을 수 있는 유사하지만 더 쉬운 작업으로 바꾸어 시도해볼 수 있다.  
  • 프롬프트 내용 순서 변경: 프롬프트 내 정보의 제시 순서가 모델의 응답에 영향을 미칠 수 있다. 중요한 정보를 앞부분에 배치하거나, 논리적인 흐름에 따라 정보를 재배열하는 것이 도움이 될 수 있다.  
  • 예시 구체화 및 다양화: 퓨샷 프롬프팅 시, 예시를 더욱 구체적이고 다양하게 제공하여 모델이 패턴을 더 잘 학습하도록 유도한다.  

이러한 반복적인 개선 과정은 마치 조각가가 돌을 깎아 작품을 완성해 나가듯, 사용자가 원하는 정교한 결과물을 AI로부터 얻어내는 핵심적인 활동이다.

D. 모델 구성 매개변수 이해 (온도, Top-K, Top-P 등)

프롬프트 자체의 내용 외에도, LLM의 출력을 제어하는 다양한 구성 매개변수를 이해하고 조정하는 것이 중요하다. 이러한 매개변수들은 모델 응답의 무작위성, 다양성, 결정성 등에 영향을 미친다.  

  • 온도 (Temperature): 토큰 선택의 무작위성을 제어한다. 낮은 온도(예: 0.2)는 더 결정론적이고 일관된 응답을 생성하며, 사실 기반의 답변이나 정해진 형식이 필요할 때 유용하다. 높은 온도(예: 0.8 이상)는 더 다양하고 창의적이며 예기치 않은 결과를 생성할 수 있어, 브레인스토밍이나 창작 활동에 적합하다.
  • Top-K: 모델이 다음 토큰을 예측할 때, 확률이 가장 높은 K개의 토큰 중에서만 선택하도록 제한한다. K 값이 작을수록 더 안전하고 예측 가능한 텍스트가 생성되며, K 값이 크면 더 다양한 결과가 나올 수 있다. Top-K가 1이면 가장 확률 높은 토큰만 선택하는 탐욕적 디코딩(greedy decoding)과 같다.  
  • Top-P (Nucleus Sampling): 확률의 합이 P 값이 될 때까지 가장 가능성 높은 토큰부터 순서대로 선택하는 방식이다. Top-K와 유사하게 응답의 다양성을 조절하지만, 고정된 개수가 아닌 확률 분포에 기반하여 동적으로 후보군을 결정한다.  
  • 최대 출력 토큰 (Max output tokens): 응답으로 생성될 수 있는 최대 토큰 수를 지정한다. 토큰은 대략 4개의 문자에 해당하며, 100개의 토큰은 약 60-80단어에 해당한다. 응답 길이를 제어하는 데 사용된다.  

이러한 매개변수들을 적절히 조합하고 실험함으로써 사용자는 특정 작업에 가장 적합한 AI 응답 스타일과 내용을 찾아낼 수 있다. 이는 프롬프트 내용만큼이나 결과물의 질에 큰 영향을 미치는 중요한 조정 과정이다.

실제 적용: 미지의 문제에 대한 효율적 프롬프팅 및 직무별 활용 사례

구글의 프롬프트 엔지니어링 원칙을 이해했다면, 이제 실제 문제 해결에 이를 적용해 볼 차례이다. 특히 처음 접하는 생소한 문제에 대해 효과적으로 프롬프트를 작성하는 과정과, 각기 다른 직무를 가진 전문가들이 이 지식을 어떻게 활용할 수 있는지 살펴본다.

A. 미지의 문제 해결을 위한 단계별 프롬프팅 가이드

새롭거나 복잡한 문제에 직면했을 때, LLM으로부터 유용한 해결책이나 아이디어를 얻기 위한 프롬프팅 과정은 다음과 같은 단계로 진행될 수 있다. 이 과정에서 핵심은 명확성, 충분한 맥락 제공, 그리고 반복적인 개선이다.

  1. 문제 명확히 정의하기: 해결하고자 하는 문제가 무엇인지 구체적으로 정의한다. 모호한 질문은 모호한 답변으로 이어지기 쉽다.
  2. 관련 컨텍스트 및 제약 조건 제공: 문제 해결에 필요한 모든 배경 정보, 데이터, 제약 조건(예: 예산, 시간, 특정 기술 스택) 등을 상세히 제공한다.
  3. 원하는 결과물의 형식과 내용 명시: 어떤 형태의 답변을 원하는지(예: 목록, 보고서, 코드 스니펫, 단계별 계획), 어떤 내용을 포함해야 하는지 구체적으로 명시한다.
  4. (가능하다면) 소수의 좋은 예시 제공 (Few-shot): 유사한 문제에 대한 이상적인 해결책이나 답변의 예시를 제공하여 모델이 패턴을 학습하도록 돕는다.
  5. 초기 프롬프트 실행 및 결과 분석: 작성한 프롬프트를 실행하고 AI의 응답을 면밀히 검토한다.
  6. 반복 및 개선: 기대에 미치지 못하는 결과가 나왔다면, 프롬프트를 수정하고 다시 실행한다. 컨텍스트를 추가하거나, 질문을 더 명확하게 하거나, 예시를 바꾸거나, 모델 매개변수를 조정하는 등의 개선 작업을 반복한다.

백서 기반 : 최적의 프롬프팅 방안에 대한 응용

특정 상황을 만들어 보고 이상황이 리 분스트라가 작성한 프롬프팅 기준에 잘 부합할수 있는 상황을 예로 들어 한번더 정리 해보았음.

개발자 홍길순 님의 좋은 프롬프팅 과정 예시: 온닫이서비스 기능 JSON 변환

서비스의 크리에이터로 활동하는 개발자 홍길순 님은 자신의 아이디어를 체계적으로 관리하고 개발팀과 공유하기 위해, 사용자 스토리를 특정 JSON 형식으로 변환하는 작업을 LLM으로 자동화하려고 합니다. 리 분스트라의 백서에서 제시된 좋은 프롬프팅 과정을 따라 진행합니다.

홍길순 님의 요구사항 (사용자 스토리):

온닫이서비스 크리에이터로, 내 동네소식포스팅을 카테고리별로 페이지로 나누어 보고 싶습니다. 
그래야 지난 포스팅에서 어떤 카테고리를 가장 많이 작성했는지 쉽게 찾아볼 수 있습니다. 
이 기능은 다음 분기까지 꼭 필요합니다.

 

홍길순 님이 원하는 JSON 형식 (목표):

{
  "title": "크리에이터 동네 포스팅 카테고리별 분류 및 통계 기능",
  "description": "온닫이서비스 크리에이터가 자신의 동네 소식 포스팅을 카테고리별로 분류하여 페이지 단위로 조회하고, 이를 통해 과거에 어떤 카테고리의 글을 가장 많이 작성했는지 쉽게 파악할 수 있도록 지원하는 기능입니다.",
  "acceptance_criteria": [
    "크리에이터는 자신의 포스팅 목록에서 '카테고리별 보기' 옵션을 선택할 수 있다.",
    "카테고리별 보기 선택 시, 각 카테고리명과 해당 카테고리 포스팅 수가 함께 표시된다.",
    "특정 카테고리를 선택하면 해당 카테고리의 포스팅만 한 페이지당 10개씩 페이징되어 보여진다.",
    "가장 많이 작성한 카테고리가 시각적으로 강조되거나 별도로 표시된다."
  ],
  "priority": "High"
}

홍길순 님의 프롬프팅 과정:

1단계: 명확한 목표 설정 및 LLM 구성 최적화

  • 목표: "온닫이서비스 크리에이터의 사용자 스토리를 입력받아, 'title', 'description', 'acceptance_criteria' (문자열 배열), 'priority' 필드를 가진 JSON 객체로 변환한다."
  • LLM 구성:
    • 모델: (사용 가능한 LLM 중 하나 선택, 예: Gemini)
    • 온도 (Temperature): 0.2 (일관성 있고 구조적인 출력을 위해 낮게 설정)
    • 최대 토큰 (Max Tokens): 512 (JSON이 잘리지 않고 충분히 생성될 수 있도록 설정, 필요시 조정)

2단계: 초기 프롬프트 설계 (Crafting)

  • 시도 1 (Zero-shot - LLM에게 바로 요청):
다음 사용자 스토리를 JSON 객체로 변환해 주세요.
JSON 객체에는 title, description, acceptance_criteria (문자열 배열), priority 필드가 포함되어야 합니다.
사용자 스토리:
온닫이서비스 크리에이터로, 내 동네소식포스팅을 카테고리별로 페이지로 나누어 보고 싶습니다. 그래야 지난 포스팅에서 어떤 카테고리를 가장 많이 작성했는지 쉽게 찾아볼 수 있습니다. 이 기능은 다음 분기까지 꼭 필요합니다.

예상 결과: LLM이 일부 필드를 누락하거나, acceptance_criteria를 배열 형태로 만들지 못하거나, priority를 제대로 추론하지 못할 가능성이 있습니다.

  • 시도 2 (Few-shot - LLM에게 예시 제공): (백서 p.15, 54 참고)
당신은 사용자 스토리를 분석하여 체계적인 JSON 형식으로 변환하는 AI 어시스턴트입니다.
주어진 사용자 스토리를 다음 예시와 같이 title, description, acceptance_criteria (문자열 배열), priority 필드를 가진 JSON 객체로 변환해 주세요.

### 예시 사용자 스토리:
온닫이 마켓 판매자로서, 내 상품에 달린 고객 문의글에 빠르게 답변하고 싶어요. 답변을 안하면 고객이 떠나버릴 수 있으니까요. 실시간 알림 기능이 있으면 좋겠어요.

### 예시 JSON 출력:
{
  "title": "판매자 고객 문의 실시간 알림 기능",
  "description": "온닫이 마켓 판매자가 자신의 상품에 새로운 고객 문의가 등록되면 실시간으로 알림을 받아 신속하게 답변할 수 있도록 지원합니다. 이를 통해 고객 만족도를 높이고 판매 기회 손실을 방지합니다.",
  "acceptance_criteria": [
    "새로운 고객 문의가 등록되면 판매자에게 앱 푸시 알림이 발송된다.",
    "알림을 클릭하면 해당 문의글로 바로 이동한다.",
    "판매자는 알림 설정을 켜고 끌 수 있다."
  ],
  "priority": "High"
}

### 변환할 사용자 스토리:
온닫이서비스 크리에이터로, 내 동네소식포스팅을 카테고리별로 페이지로 나누어 보고 싶습니다. 그래야 지난 포스팅에서 어떤 카테고리를 가장 많이 작성했는지 쉽게 찾아볼 수 있습니다. 이 기능은 다음 분기까지 꼭 필요합니다.

### JSON 출력:

예상 결과: 이전 시도보다 훨씬 정교한 JSON이 생성될 것입니다. 특히 acceptance_criteria를 배열로 만들고, 예시를 통해 priority 추론 방식을 학습할 가능성이 높습니다.

 

3단계: 실험 및 반복 (Tinkering & Testing)

홍길순 님은 실제 변환된 JSON을 보면서 만족스럽지 않은 부분을 개선하기 위해 프롬프트를 수정하고, 다른 유형의 사용자 스토리도 테스트합니다.

  • 프롬프트 수정 및 구체화:
    • 만약 acceptance_criteria가 너무 일반적이거나 부족하다면, "수용 조건(acceptance_criteria)은 사용자가 해당 기능을 사용할 때 만족해야 하는 구체적인 시나리오나 검증 가능한 항목들로 최소 3개 이상 작성해 주세요."와 같이 명확한 지침을 추가합니다.
    • priority가 "다음 분기까지 꼭 필요합니다"라는 문장에서 'High'로 잘 추론되지 않는다면, 예시에 다양한 우선순위 표현과 그에 해당하는 JSON 값을 추가하거나, "사용자 스토리에서 '꼭 필요하다', '필수적이다' 등의 표현이 있으면 priority를 'High'로 설정하고, '있으면 좋다', '고려해볼 만하다' 등의 표현은 'Medium'으로, 언급이 없으면 'Low'로 설정해주세요."와 같이 명시적인 규칙을 제공합니다. (백서 p.56 - 구체적인 출력 명시)
  • LLM 설정 변경:
    • 결과가 여전히 너무 다양하게 나온다면 온도를 0.1로 더 낮춰봅니다. (백서 p.9)
    • JSON이 중간에 끊긴다면 최대 토큰 수를 1024로 늘려봅니다. (백서 p.8)
  • 역할 부여 (Role Prompting) 강화: (백서 p.21 참고)
     
당신은 '온닫이서비스'의 신규 기능 기획을 담당하는 시니어 기획자입니다. 크리에이터가 요청한 다음 사용자 스토리를 분석하여, 개발팀이 이해하기 쉽도록 명확한 JSON 형식으로 정리해 주세요. JSON에는 title, description, acceptance_criteria (최소 3개의 구체적인 검증 항목을 포함한 배열), priority (High, Medium, Low 중 택1) 필드가 반드시 포함되어야 합니다.
... (이하 예시 및 변환할 스토리 동일) ...

 

4단계: 결과 분석 및 평가 (Output Analysis & Evaluation)

  • 생성된 JSON이 유효한 형식인지, 모든 필드가 정확한 의미를 담고 있는지, 특히 acceptance_criteria가 사용자의 핵심 요구(카테고리별 페이징, 가장 많이 작성한 카테고리 파악)를 충족하는 조건들로 잘 작성되었는지 꼼꼼히 확인합니다.
  • 실패 사례 분석: "카테고리 통계 관련 수용 조건이 항상 빠지네.", "우선순위가 'Medium'으로만 나오는데?" 등 특정 패턴의 오류를 찾아내고 원인을 분석합니다.

5단계: 꼼꼼한 문서화 및 지속적 개선 (Documentation & Continuous Refinement)

홍길순 님은 각 프롬프트 시도와 결과를 체계적으로 기록하여 개선 과정을 추적합니다. (백서 p.64-65 참고)

버전
주요 변경점/프롬프트 요약 모델 온도 최대토큰 결과만족도 개선방향 및 다음시도
v1.0 Zero-shot 기본 요청 Gemini 0.2 512 낮음 필드 누락 및 형식 오류. Few-shot 예시 도입 필요.
v1.1 Few-shot (타 서비스 예시 1개 추가) Gemini 0.2 512 중간 acceptance_criteria 구체성 부족. priority 추론 강화 필요.
v1.2 acceptance_criteria 구체화 지침 추가, priority 추론 규칙 명시 Gemini 0.2 512 중상 "가장 많이 작성한 카테고리 파악" 관련 수용 조건 누락. 역할 부여 프롬프팅 시도.
v1.3 역할 부여(시니어 기획자) 및 acceptance_criteria 최소 개수 지정 Gemini 0.1 1024 대부분 만족. 예외적인 사용자 스토리에 대한 강건성 테스트 및 미세 조정 필요.
 
 

이처럼 홍길순 님은 목표 설정 → 초기 설계 → 다양한 실험과 반복 → 결과 분석 → 문서화 및 개선이라는 체계적인 과정을 통해 LLM이 자신의 요구사항을 정확히 이해하고 원하는 JSON 결과물을 꾸준히 생성하도록 프롬프트를 발전시켜 나갑니다. 이것이 바로 리 분스트라의 백서에서 강조하는 효과적인 프롬프트 엔지니어링의 실제 모습입니다.

 

단어로 보는 핵심 내용 요약

기본 개념:

  • 프롬프트 (Prompt): LLM의 응답이나 예측을 생성하기 위해 모델에 제공되는 입력입니다.
  • 프롬프트 엔지니어링 (Prompt Engineering): LLM이 정확한 결과물을 생성하도록 안내하는 고품질 프롬프트를 설계하는 과정입니다.
  • LLM (Large Language Model): 대규모 언어 모델로, 텍스트 입력을 기반으로 다음 토큰을 예측하는 엔진입니다.
  • 토큰 (Token): LLM이 텍스트를 처리하는 기본 단위입니다.
  • 모델 구성 (Model Configuration): LLM의 출력을 제어하는 다양한 설정값 (예: Temperature, Top-K, Top-P)을 의미합니다.

LLM 출력 구성 관련 키워드:

  • 출력 길이 (Output Length): 생성되는 응답의 토큰 수입니다.
  • 샘플링 제어 (Sampling Controls): 예측된 토큰 확률을 처리하여 단일 출력 토큰을 선택하는 방식을 결정하는 설정입니다.
  • Temperature (온도): 토큰 선택의 무작위성 정도를 제어합니다.
  • Top-K: 가장 가능성이 높은 K개의 토큰 중에서 다음 토큰을 선택하는 방식입니다.
  • Top-P (Nucleus Sampling): 누적 확률이 특정 값 P를 초과하지 않는 상위 토큰 중에서 선택하는 방식입니다.

주요 프롬프팅 기법:

  • 제로샷 프롬프팅 (Zero-Shot Prompting): 작업 설명만 제공하고 예시는 제공하지 않는 가장 간단한 프롬프트 유형입니다.
  • 원샷 프롬프팅 (One-Shot Prompting): 단일 예시를 제공하여 모델이 작업을 모방하도록 합니다.
  • 퓨샷 프롬프팅 (Few-Shot Prompting): 여러 예시를 제공하여 모델이 따라야 할 패턴을 보여줍니다.
  • 시스템 프롬프팅 (System Prompting): 언어 모델의 전체적인 맥락과 목적을 설정합니다 (예: 출력 형식 지정).
  • 역할 프롬프팅 (Role Prompting): 언어 모델이 특정 캐릭터나 정체성을 채택하도록 지정합니다.
  • 컨텍스트 프롬프팅 (Contextual Prompting): 현재 대화나 작업과 관련된 특정 세부 정보나 배경 정보를 제공합니다.
  • 스텝백 프롬프팅 (Step-Back Prompting): LLM이 특정 작업 전에 관련된 일반적인 질문을 먼저 고려하도록 유도하여 배경 지식과 추론 과정을 활성화합니다.
  • Chain of Thought, CoT: 연쇄적사고, LLM이 중간 추론 단계를 생성하도록 유도하여 추론 능력을 향상시킵니다.
  • Self-Consistency:자기일관성, 다양한 추론 경로를 생성하고 가장 일관된 답변을 선택하여 정확도를 높입니다.
  • Tree of Thoughts, ToT(생각의 나무 ?? ): 여러 다른 추론 경로를 동시에 탐색할 수 있도록 하여 복잡한 문제 해결에 적합합니다.
  • ReAct (Reason & Act): 추론과 외부 도구(검색, 코드 실행 등) 사용을 결합하여 복잡한 작업을 해결합니다.
  • 자동 프롬프트 엔지니어링 (Automatic Prompt Engineering, APE): 모델을 사용하여 더 나은 프롬프트를 생성하고 평가하는 방식입니다.