# LLM 프롬프트 튜닝 플레이북

> Clean Markdown view of GeekNews topic #17953. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17953](https://news.hada.io/topic?id=17953)
- GeekNews Markdown: [https://news.hada.io/topic/17953.md](https://news.hada.io/topic/17953.md)
- Type: news
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-26T09:46:01+09:00
- Updated: 2024-11-26T09:46:01+09:00
- Original source: [github.com/varungodbole](https://github.com/varungodbole/prompt-tuning-playbook)
- Points: 30
- Comments: 0

## Summary

이 문서는 Post-Trained LLM의 프롬프트 작성 능력을 향상시키기 위한 가이드로, 사전학습과 사후학습의 개념을 설명하고 효과적인 프롬프트 작성 전략을 제시합니다. 사전학습은 대규모 데이터셋을 통해 일반적인 특징을 학습하는 과정이며, 사후학습은 모델이 특정 유니버스에서 일관된 출력을 생성하도록 돕는 역할을 합니다. 프롬프트 작성 시 명확하고 간결한 지시를 제공하고, 반복적인 개선 절차를 통해 최적의 프롬프트를 찾는 것이 중요하다고 강조합니다.

## Topic Body

### 이 문서는 누구를 위한 것인가?  
- Post-Trained LLM의 프롬프트 작성 능력을 향상시키고자 하는 사람들을 위한 문서  
- 기술적 배경이 부족하더라도, 기본적인 LLM 사용 경험이 있는 사람을 대상으로 함  
- **전반부**: 사후 학습과 프롬프트에 대한 직관적 이해를 제공  
- **후반부**: 구체적인 프롬프트 작성 절차 및 팁 제공  
  
### 왜 튜닝 가이드가 필요한가?  
  
- LLM 프롬프트 작성은 경험적이고 지속적으로 학습과 수정이 필요한 작업  
- 이 문서는 효과적인 프롬프트 작성 전략을 체계적으로 공유하고자 함  
- Gemini와 같은 후교육 모델을 중심으로 작성되었으나 다른 모델에도 적용 가능  
  
### Pre-Training vs. Post-Training  
  
#### 사전학습 (Pre-training)  
- **사전학습의 개념**  
  - 사전학습은 딥러닝에서 오래된 개념으로, 작은 데이터셋(A)과 비슷하지만 훨씬 더 큰 데이터셋(B)을 활용해 일반적인 특징을 먼저 학습한 후, A 데이터셋에서 세부 조정을 하는 방법임.  
  - 예시로는 소량의 유방촬영 데이터셋(A)과 인터넷에서 수집된 대규모 자연 이미지 데이터셋(B)을 생각할 수 있음.  
- **사전학습의 절차**  
  1. 큰 데이터셋(B)에서 모델을 학습해 일반적인 유용한 특징을 학습함.  
  2. 이후, 모델을 A 데이터셋에 맞게 미세 조정하여 A에서 더 나은 성능을 얻음.  
  3. 구체적으로, B 데이터셋에서 물체 분할이나 이미지 내 위치에 관계없이 개념을 인식하는 기본 기술을 학습한 후, 이를 기반으로 A 데이터셋의 특정 기술을 추가 학습하는 방식임.  
- **사전학습의 필요성**  
  - B 데이터셋을 통해 학습하지 않으면, A 데이터셋만으로는 일반적인 기술을 학습하기에 데이터가 부족하여 성능이 떨어질 수 있음.  
  - B 데이터셋에서 일반적인 기술을 학습한 모델은 A 데이터셋에서 제한된 데이터를 사용해 전문화된 기술만 추가로 학습하면 됨.  
- **LLM(대규모 언어 모델)의 사례**  
  - LLM의 사전학습은 인터넷 텍스트의 "다음 단어를 예측하는 작업"을 수행함으로써 이루어짐.  
  - 이 과정에서 모델은 웹에 반영된 세상의 구조를 암묵적으로 학습함.  
- **인터넷과 세상의 반영**  
  - 인터넷이 어떤 세상을 반영하는지에 대한 질문은 중요하며, 이를 이해하기 위해 '시네마틱 유니버스'라는 비유를 사용할 수 있음.  
  
#### 사전학습의 '시네마틱 유니버스' 직관  
- **텍스트와 세상의 묘사**  
  - 대규모 언어 모델(LLM)은 텍스트를 통해 세상을 학습함.  
  - 텍스트는 반드시 "진실"만을 반영해야 하는 제약을 가지지 않음.  
  - 허위정보나 잘못된 진술 외에도, 텍스트가 단일한 객관적 현실만을 반영하지 않는 이유는 다양함.  
- **예시: 아라고른과 곤도르**  
  - "아라고른은 결국 곤도르의 왕이 된다"는 문장이 진실인지 여부는 문맥과 전제에 따라 달라짐.  
    - **"반지의 제왕" 시네마틱 유니버스:** 진실로 간주될 수 있음.  
    - **"마블 시네마틱 유니버스" 또는 현실:** 아라고른과 곤도르는 허구적 존재이므로 진실이 아님.  
- **진실의 기준**  
  - 진술이 진실인지 여부는 "어떤 세계"를 전제로 하느냐에 따라 달라짐.  
  - 이는 철학적·언어학적 논의의 오랜 주제이며, 진리에 대한 자세한 개요는 [이 링크](https://plato.stanford.edu/entries/truth/)에서 확인 가능함.  
  - 실용적으로는, "진술이 진실인지 아닌지는 그 진술이 배경으로 삼는 시네마틱 유니버스에 따라 달라진다"는 개념으로 단순화 가능함.  
- **사전학습 데이터와 시네마틱 유니버스**  
  - 사전학습 코퍼스는 인간 문화가 만든 다양한 시네마틱 유니버스의 합집합에 가까움.  
  - 정확히는, 사전학습 데이터 소스(예: 웹)에 크게 기여한 문화들의 집합임.  
> **중요**  
> 사전학습 코퍼스는 인간 문화가 만든 시네마틱 유니버스의 합집합으로 간주 가능하며, 특히 웹과 같은 데이터 소스에 크게 기여한 문화를 반영함.  
- **모델의 맥락 이해**  
  - LLM은 주어진 맥락(즉, 프리픽스)을 기반으로 어떤 "유니버스"에 있는지 추론함.  
  - 이후 해당 유니버스의 규칙, 관습, 사실에 따라 행동함.  
  - 강한 맥락 신호가 있는 프롬프트는 모델이 "스크립트"를 이해하기 쉽게 함.  
    - 예: 뉴욕에 대한 블로그 글의 시작 ("*꿈이 이루어지는 콘크리트 정글은 단순한 가사가 아니라 뉴욕의 전기 같은 진실이다...*")  
  - 반면, "Hi, how are you?"처럼 맥락이 약한 프롬프트는 모델이 어떤 유니버스에 있는지 판단하기 어려움.  
    - 이와 같은 일반적인 표현은 다양한 코퍼스에 걸쳐 등장하므로 여러 가능성을 열어둠.  
- **사후학습(Post-training)의 역할**  
  - 맥락이 부족한 경우, 모델이 보다 구체적이고 일관된 출력을 생성할 수 있도록 사후학습이 중요하게 작용함.  
  
#### 사후학습 (Post-training)  
  
- **사후학습의 역할**  
  - 사후학습은 LLM이 기본적으로 작동하는 "디폴트 유니버스"에 대한 지침을 제공함.  
  - 프롬프트만으로 유니버스를 추론하는 대신, 사후학습을 통해 특정 가정을 고정하거나 모호성을 일관되게 해결하도록 제약을 설정함.  
  - 이는 모델의 유용성을 높이는 데 필요하며, 예를 들어 LLM에게 기본적으로 "사용자 지시를 따르는 것"을 가르치는 데 유용함.  
- **사후학습의 중요성**  
  - 사후학습이 없으면, "조지 워싱턴에 대한 보고서를 작성하라"라는 지시가 단순히 그 지시를 이어가는 텍스트를 생성하는 식으로 오작동할 수 있음.  
  - 사후학습은 모델의 기본 동작을 사회적 규범과 일치시키는 데 도움을 줄 수 있음.  
  - 이를 통해 모델이 더 안전하고 생산적인 도구가 되도록 지원함.  
> **중요**  
> 사후학습은 다양한 배포 환경에서 모델이 일관되고 기본적인 역할을 수행하도록 가르침.  
- **사후학습에서 학습할 수 있는 내용**  
  - 사후학습 중 모델이 학습할 수 있는 내용은 실용적이고 구체적인 것부터 주관적이고 개인적인 것까지 다양함.  
- 사후학습에서 가르칠 수 있는 주요 내용  
  - **특정 형식을 따르는 방법**  
    - 예: [Gemma's Formatter](https://ai.google.dev/gemma/docs/formatting)에서는 모델이 항상 사용자와 대화를 나누는 시네마틱 유니버스에서 동작한다고 가정함.  
    - 이 시나리오에서 모델은 시스템 지시에 따라 행동하며, 대화는 항상 인간 사용자의 턴으로 시작됨.  
  - **사용자의 지시를 따르는 방법**  
    - 예: "강아지에 대한 에세이를 작성하라"는 요청에 대해 실제로 에세이를 작성해야 함.  
    - 사용자의 요청을 무시하고 다른 방식으로 응답하지 않도록 사후학습을 통해 학습 가능.  
  - **“현실 세계”와의 일치**  
    - 모델의 디폴트 시네마틱 유니버스를 사용자들이 주로 관심을 가질 "현실 세계"로 맞추는 데 활용됨.  
    - 예: "유명인 $CELEBRITY는 어디에서 태어났나?"라는 질문에 대해, 팬 픽션 세계가 아닌 현실 세계의 정보를 기본으로 가정함.  
  - **안전성 강화**  
    - 인터넷은 다양한 규범적 기준을 포함하며, 일부 콘텐츠는 상업적 배포 환경에서 부적합할 수 있음.  
    - 사후학습은 모델이 특정 안전 정책에 맞춰 조정되도록 도움을 주며, 생성 내용에 대한 규범적 기준을 설정함.  
    - 이는 모델이 복잡한 텍스트를 생성할 때 필수적인 규범적 가정을 내포하도록 함.  
- **결론**  
  - 사후학습은 모델이 다양한 사용 환경에서 기대에 부합하는 동작을 일관되게 수행하도록 지원함.  
  - 모델의 유용성과 안전성을 극대화하는 데 필수적인 과정임.  
  
#### 사후학습 데이터 수집  
- **핵심 요약**  
  - 사후학습 중 LLM은 인간 평가자들이 만든 데이터를 기반으로 학습되고 평가됨.  
  - 사후학습 중 모델은 "디지털 역할 연기자"로서 데이터를 생성한 인간 평가자를 역할 모델로 삼음.  
- **사후학습 데이터 수집 과정**  
  - **다양한 입력 예제 데이터셋 생성**  
    - LLM이 수행할 수 있는 작업을 묘사한 프롬프트 모음 생성 (예: JSON으로 데이터 재구성, 결혼식 계획 지원 등).  
    - 이 데이터는 개발자의 직관이나 인간 평가자가 제안한 아이디어를 기반으로 생성될 수 있음.  
  - **인간 평가자 모집**  
    - 평가자의 역할: 입력 예제에 대해 "정답" 작성 또는 모델의 응답을 순위별로 평가.  
    - 모델 학습 단계에 따라 평가자는 다른 유형의 데이터를 생성함.  
  - **평가 지침 작성**  
    - 평가자가 작업을 잘 이해할 수 있도록 예제와 세부 지침 제공.  
  - **데이터 수집 및 사후학습 수행**  
    - 수집된 데이터를 사전학습 모델에 활용하여 사후학습 진행.  
  - **모델 배포**  
    - 사후학습 완료 후 모델을 실제 환경에 배포.  
- **사후학습의 영향**  
  - LLM이 인간처럼 행동할 수 있는 이유 중 하나는 신중하게 수집된 인간 행동 데이터셋을 학습했기 때문임.  
  - 사전학습은 모델의 핵심 역량을 구축하며, 사후학습은 모델의 행동 방향을 인간 시연을 통해 조정함.  
> **중요**  
> LLM이 인간처럼 행동할 수 있는 이유는 신중하게 수집된 인간 행동 데이터를 학습했기 때문임.  
- 사후학습 데이터 수집의 도전 과제  
  - **반복적인 작업의 단조로움**  
    - 평가 작업은 지루할 수 있음. 예를 들어, 뛰어난 파이썬 프로그래머는 자신의 프로젝트를 진행하는 것이 더 흥미로울 수 있음.  
    - 시인은 자신의 시를 쓰는 것을 선호하며, AI가 생성한 시를 평가하는 데 흥미를 느끼지 않을 가능성이 큼.  
    - 평가자는 작업 반복성, 데이터 소유권에 대한 부족한 통제, 작업의 사회적 의미 결여 등으로 동기 저하를 경험할 수 있음.  
  - **"좋은" 응답 정의의 어려움**  
    - 작업의 "좋은" 응답을 정의하는 것은 복잡함.  
    - 좋은 작문, 사실성, 사회적 현실의 복잡성을 반영하는 작업의 기준을 명확히 하기 어려움.  
    - 법 체계에서 판례를 통해 에지 케이스를 해결하듯, 이러한 문제는 주관성과 맥락에 크게 의존함.  
  - **평가자의 작업 이해 부족**  
    - 평가자가 작업을 제대로 이해하지 못할 가능성이 있음.  
    - 잘못된 기술 수준의 평가자를 채용하거나 평가자가 자신의 한계를 인지하지 못하는 경우 발생.  
    - 예: 생물학 질문에 대해 오래된 대학 지식을 바탕으로 잘못된 응답 작성.  
  - **인간의 실수**  
    - 인간은 실수를 함. 교수는 잘못된 답안을 포함한 시험 문제를 낼 수 있고, 의사는 피로 상태에서 오진 가능성이 높음.  
    - 인간 평가 데이터의 품질이 완벽하지 않기 때문에 AI 시스템도 종종 잘못된 데이터를 학습할 가능성이 있음.  
- **결론**  
  - 사후학습 데이터 수집은 모델 품질에 중요한 역할을 하지만, 데이터 품질 보장을 위한 많은 노력이 필요함.  
  - 정확하고 신뢰할 수 있는 데이터를 얻기 위해 평가자와 작업 간의 적합성을 보장하는 것이 중요함.  
  
---  
  
### 프롬프트 작성  
- **핵심 요약**  
  - 시스템 지시문과 프롬프트를 작성할 때, 이는 사후학습 팀의 평가자 집단의 "집합적 정신"을 염두에 두고 작성해야 함.  
  - 평가자들이 이해하고 충실히 따를 수 있는 지시를 작성하면 모델도 이를 더 잘 따를 가능성이 높음.  
> **중요**  
> 시스템 지시문과 프롬프트는 사후학습 팀의 평가자 집단의 집합적 정신을 반영하여 작성해야 함.  
  
#### 프롬프트 작성시 주요 고려사항  
  
- **명확하고 간결하며 명시적인 지시인지 확인**  
  - 예: 파이썬 코드를 생성하는 지시라면, 무작위로 선택된 숙련된 파이썬 프로그래머가 지시를 읽고 바로 이해할 수 있어야 함.  
    - **나쁨:** "Write a Python function that computes prime numbers."  
    - **좋음:** "Write a Python function that computes prime numbers from 1 to 100. Include pytype annotations for the function and use 2-space indentation."  
  
- **지시가 모순되거나 따르기 어려운지 확인**  
  - 사람이 피곤하거나 배고플 때도 지시를 충실히 따를 수 있도록 간결하고 직관적으로 작성해야 함.  
    - **나쁨:** "Don’t write a story about a mean dog, unless it's friendly, and also sad..."  
    - **좋음:** "Write a short story (200-300 words) about a loyal golden retriever named Buddy..."  
  
- **지시가 너무 많은가?**  
  - 모델은 길고 복잡한 지시를 모두 따르기 어려울 수 있음. 가능한 경우 작업을 하위 작업으로 나누는 것이 좋음.  
    - **나쁨:** "Read each article and, for each key idea, rate it on a scale of 1-10..."  
    - **좋음:** *하위 작업으로 나눔:* 1) 주요 아이디어 목록 생성, 2) 각 아이디어 평가, 3) 상위 아이디어 번역, 4) 소셜 미디어용 게시물 생성.  
  
- **긍정적 지시 사용**  
  - "하지 말아야 할 것"을 지시하기보다 "해야 할 것"을 명시하는 것이 효과적임.  
    - **나쁨:** "Don’t ever end your response with a full stop."  
    - **좋음:** "Your response should always end with an exclamation mark or a question mark."  
  
- **모델에 대한 "리마인더" 역할의 지시**  
  - 다양한 입력 예제를 고려하여 명확하지 않은 경우에 대한 추가적인 지침을 제공함.  
  - 예: "추가 고려사항" 또는 "추가 가정" 섹션에 에지 케이스를 명확히 설명.  
  
- **프롬프트는 새로운 하이퍼파라미터**  
  - 프롬프트의 품질은 시스템 성능에 큰 영향을 미침. "최적의" 프롬프트를 찾는 것은 불가능하지만, 점진적으로 더 나은 프롬프트를 찾기 위한 실험은 중요함.  
  
- **"모르겠다"는 응답 지시**  
  - "알 수 없음" 또는 "모호한 경우"에 대한 명시적 지침을 제공하여 모델이 잘못된 응답 대신 명확히 모호함을 표시하도록 유도.  
  
- **프롬프트와 체크포인트의 밀접한 연계**  
  - 프롬프트는 특정 모델 체크포인트와 깊이 연계됨. 새로운 모델 버전에서는 동일한 프롬프트가 다르게 작동할 수 있음.  
  
#### 프롬프트 스타일 가이드(기초)  
  
- **마크다운 사용 고려** : 각 프롬프트를 별도의 마크다운 파일에 저장하고, 제목 및 섹션을 잘 구성하여 가독성을 높임.  
- **다른 사용자에 대한 고려** : 프롬프트는 모델뿐만 아니라 유지보수 담당자를 위해 작성되어야 함.  
- **단순성 유지** : 프롬프트가 길거나 복잡하면 모델 변경 시 유지보수 부담이 증가할 수 있음. 간결하고 명확하게 작성할 것.  
- **제로샷 지시 선호** : 제로샷 지시는 간단하고 디버깅 및 이해가 용이함. 몇 샷(few-shot)은 마지막 수단으로 사용.  
- **예제 통합** : "For example"과 같은 방식으로 지시문에 예제를 자연스럽게 포함시키는 것이 좋음.  
  - 예: "Always start your response to the user with something passive aggressive. For example, start with something like 'Oh that’s what you want? ...'"  
  
---  
  
### 새로운 시스템 지시문 반복 개선 절차  
  
- **프롬프트 개발은 반복적 과정**  
  - 프롬프트 작성은 검증 데이터셋을 사용해 모델을 훈련하는 과정과 유사함.  
  - 명확하고 간결한 문장 작성이 핵심이며, 생성과 편집 단계를 분리하여 접근하는 것이 효과적임.  
- **검증 데이터셋 없이 시작 가능**  
  - 초기에는 간단한 MVP(Minimum Viable Product)를 빠르게 구축하며, 나중에 정량적 평가를 통해 성능을 추적해야 함.  
  - 예상치 못한 모델 동작에도 제품이 안정적으로 작동하도록 설계가 중요함.  
  
#### 시스템 지시문 반복 절차  
  
1. **다양한 입력 예제 준비**  
  - 문제를 잘 나타내는 약 10~50개의 다양한 입력 예제를 수집.  
  - 원하는 출력 행동에 대한 직관을 형성.  
2. **간단한 지시문으로 시작**  
  - 가능한 한 간단하고 명확한 지시문을 작성.  
  - 예산이 적은 모델(예: Gemini Flash 8B)을 먼저 사용.  
3. **첫 번째 입력 예제에 실행**  
  - 모델이 적절한 응답을 생성하도록 테스트.  
4. **첫 번째 예제에 과적합**  
  - 모델의 응답에서 발견된 특정 결함을 해결하기 위해 지시문에 "리마인더" 추가.  
  - 예: 사람 이름만 추출해야 하는데 건물 이름도 포함될 경우, 지시문에 이를 명시적으로 언급.  
5. **다음 예제로 이동**  
  - 다른 입력 예제에서도 지시문이 효과적인지 테스트.  
  - 첫 번째 예제에 과도하게 맞춘 지시가 있다면 이를 조정하여 보다 일반화.  
6. **지시문 정리**  
  - 모든 입력 예제에서 작동하는 지시문을 만든 후, 문장을 정리하고 철자 오류 수정.  
  - 정리된 지시문이 여전히 모든 예제에서 작동하는지 확인.  
7. **자동화 가능성**  
  - 미래에는 메타 최적화 도구가 지시문 생성을 자동화할 수 있을 것.  
  - 하지만 정성적 분석과 품질 보증 작업은 여전히 필요함.  
> **중요**  
> 정성적 분석은 모델 개발에서 필수적이며 이를 회피할 수는 없음.  
  
#### LLM이 유용한 상황  
  
1. **검증이 쉬운 문제**  
   - LLM은 "답을 만드는 것은 어렵지만, 검증은 쉬운" 문제에 가장 적합.  
   - 예: 생성적 AI의 "스위트 스팟"에 대한 [Chris Gorgolewski의 게시글](https://www.linkedin.com/pulse/hmec-principle-finding-sweet-spot-generative-ai-gorgolewski-ph-d--3zl5e) 참조.  
2. **문제를 하위 문제로 분해**  
   - 복잡한 프롬프트 대신 문제를 잘 정의된 하위 문제로 나눠 모델의 추론 체인을 구성.  
3. **미래를 염두에 둔 접근**  
   - 하드웨어, 비즈니스 모델의 혁신으로 추론 용량이 증가할 가능성을 고려.  
   - 현재 비용이 아닌 가치 중심으로 기능을 설계.  
4. **추론 비용의 감소**  
   - 추론 비용이 점차 감소할 것으로 예상되며, "가치" 중심의 의사결정이 필요.  
   - 더 가치 있는 기능 구현을 위해 현재 경제적 한계를 감안한 점진적 롤아웃 고려.  
> **예상**  
> LLM 추론 비용에 대해 무어의 법칙에 준하는 가격 하락이 나타날 가능성.  
  
---  
  
#### 추가 자료  
  
- [Anthropic의 프롬프트 엔지니어링 강의](https://www.youtube.com/watch?v=T9aRN5JkmL8)  
- [OpenAI 프롬프트 엔지니어링 가이드](https://platform.openai.com/docs/guides/prompt-engineering)  
- [Gemini 프롬프트 작성 가이드](https://services.google.com/fh/files/misc/gemini-for-google-workspace-prompting-guide-101.pdf)

## Comments



_No public comments on this page._
