Prompt Engineering
1. 소개
LLM을 사용할때 명령을 어떻게 내리느냐에 따라서 결과가 많이 달라진다. 우리는 보통 이때 프롬프트 엔지니어링을 통해 내가 원하는 바가 LLM에게 잘 전달되게 노력해보자!
프롬프트 엔지니어링은 사용자의 의도를 인공지능이 이해할 수 있는 최적의 형태로 변환하는 기술이다. 단순히 질문을 던지는 것보다 모델이 사고할 수 있는 프레임워크를 제공할 때 답변의 일관성과 품질이 상승한다..! 아니 상승할 수 있는 가능성이 높아진다. RAG나 모델 튜닝 이전에 가장 적은 비용으로 효과를 볼수 있는 프롬프트 엔지니어링을 공부해보자.
2. LLM 핵심 파라미터
대규모 언어 모델(LLM)을 활용할 때, 단순히 좋은 프롬프트를 작성하는 것만큼 중요한 것이 파라미터 설정이다. 동일한 입력값이라도 파라미터 설정에 따라 모델의 응답은 논리적이고 정교해질 수도, 혹은 창의적이고 자유로워질 수도 있다. 주요 파라미터인 Temperature, Top-K, Top-P 등이 모델의 텍스트 생성 메커니즘에 어떤 영향을 주는지 정리해보자.
2-1. Temperature
Temperature 는 모델이 다음 토큰을 선택할 때 확률 분포의 첨도를 조절하는 역할을 한다.
- 동작 원리: 확률 분포를 재조정하여 모델이 생성할 단어의 다양성을 결정한다.
- 낮은 값(0에 수렴): 확률 분포가 특정 토큰에 집중된다. 모델은 항상 가장 높은 확률을 가진 단어만을 선택하게 되어 결정론적이고 일관된 답변을 내놓는다. 수학 문제 풀이나 코드 생성 등 정답이 명확한 과업에 적합하다.
- 높은 값(2에 근접): 확률 분포가 평평해지며 낮은 확률을 가진 단어들도 선택될 기회를 얻는다. 2023년 11월 GPT-4 Turbo 출시 이후 최대값이
1에서2로 확장되었다. 소설 작성이나 브레인스토밍처럼 창의적인 결과물이 필요할 때1.7~1.8수준의 높은 값을 사용한다.
2-2. Top-K
Top-K 는 모델이 예측한 토큰들 중 확률이 높은 순서대로 상위 K개만을 후보군으로 남기고 나머지는 배제하는 방식이다.
- 후보군의 개수를 고정함으로써 모델이 지나치게 엉뚱한 단어를 선택하는 것을 방지한다.
- K값이 작을수록 출력은 사실에 기반하여 안정되지만 단조로워지며, K값이 커질수록 출력의 다양성이 증가한다.
2-3. Top-P
현업에서 가장 빈번하게 사용되는 방식인 Top-P는 누적 확률을 기준으로 후보군을 선정한다. 상위 토큰들의 확률을 합산했을 때 특정 임계값 p를 넘지 않는 지점까지만 후보로 포함한다.
- P값이
0.1이라면 누적 확률 10% 이내의 핵심 토큰들만 고려하며,1.0이면 어휘집 내의 모든 토큰을 후보로 둔다. - 문맥에 따라 후보군의 개수가 가변적으로 변하기 때문에
Top-K보다 유연하다. 특정 문맥에서 확신이 높을 때는 소수의 후보만 보고, 확신이 낮을 때는 더 많은 후보를 고려하게 된다.
2-4. Output Length
출력 길이를 제한하는 파라미터이다. 단순히 글자 수를 맞추는 것이 아니라, 모델이 생성할 수 있는 최대 토큰 수를 지정한다. 효율적인 리소스 관리와 의도한 형식의 응답을 얻기 위해 적절한 프롬프트 설계와 병행되어야 한다.
2-5. LLM 파라미터 요약
LLM 파라미터 조정은 결국 확률의 제어 이다. 과제의 성격이 정답이 하나로 정해진 수학 문제라면 Temperature 를 0으로 설정하여 엄밀함을 확보해야 하고, 사용자와의 자유로운 대화나 창작이 목적이라면 이를 높여 유연함을 부여해야 한다. 각 파라미터가 확률 분포에 미치는 영향을 정확히 이해할 때, 모델의 성능을 한계치까지 끌어낼 수 있다.
3. RICE
특히 효율적인 프롬프트 구성을 위해 RICE (Role, Instruction, Context, Example) 개념을 적용하면 보다 정교한 제어가 가능하다.
- Role (역할)
- AI에게 특정한 페르소나를 부여한다. 전문 개발자, 데이터 분석가 등 역할을 정의함으로써 답변의 톤과 지식의 깊이를 결정한다. 우리가 흔히
너는 10년차 베테랑 인사 담당자야...(중략)하는 부분과 일맥상통하다.
- AI에게 특정한 페르소나를 부여한다. 전문 개발자, 데이터 분석가 등 역할을 정의함으로써 답변의 톤과 지식의 깊이를 결정한다. 우리가 흔히
- Instruction (지시)
- 수행해야 할 작업을 구체적이고 단계적으로 명시한다.
- Context (맥락)
- 답변에 필요한 배경지식, 대상 독자, 제약 사항을 전달한다. 이 맥락 제공을 통해 정보의 범위를 제한하여 모델이 엉뚱한 답변을 내놓는 환각 현상을 방지한다.
- Example (예시)
- 원하는 답변의 형식이나 스타일을 샘플로 제공한다. 모델은 이 예시를 통해 출력의 구조를 학습한다.
RICE 개념을 적용한 구조적 프롬프트 예시
RICE 프레임워크를 모두 활용하여 기술적인 코드 리뷰를 요청하는 프롬프트의 예시를 한번 살펴보자.
# Role
너는 10년 차 이상의 시니어 백엔드 개발자이자 보안 아키텍트이다.
주니어 개발자가 작성한 코드를 꼼꼼하게 검토하고 피드백을 주는 역할을 수행한다.
# Instruction
1. 제시된 코드의 로직상 오류나 비효율적인 부분을 찾아낸다.
2. OWASP Top 10을 기준으로 보안 취약점이 있는지 점검한다.
3. 개선된 코드를 제시하고, 왜 그렇게 수정해야 하는지 이유를 설명한다.
# Context
- 언어 및 환경: Node.js (Express)
- 상황: 사용자로부터 입력받은 ID를 통해 데이터베이스에서 회원 정보를 조회하는 API이다.
- 제약 사항: 설명은 기술적인 용어를 사용하되 명확해야 하며, 답변은 Markdown 형식을 유지한다.
# Example
입력: function(data) { console.log(data); }
출력: [로직 리뷰] 단순 출력 함수입니다. [개선] 화살표 함수를 사용하면 더 간결합니다.
# Input Code
function getUser(userId) {
const query = "SELECT * FROM users WHERE id = '" + userId + "';";
return db.execute(query);
}
4. Shot
RICE 를 직접 활용해보면 알겠지만, 그냥 단도직입적으로 LLM에게 질의하는 것보다 조금 더 내가 원하는 정보와 응답을 받아내기 용이하다. 이때, 모델에게 제공하는 예시의 양에 따라 성능과 효율성이 달라짐을 어느정도 느낄 수 있을 것이다. 이제 RICE의 Example 요소를 좀 더 구체화한 Shot 기법에 대해서 알아보자.
4-1. Zero-shot
- 추가 학습 데이터나 예시 없이 지시사항만 전달
- 모델의 내장된 지식과 기본적인 추론 능력에만 의존
지시: 다음 문장의 감성을 '긍정' 또는 '부정'으로 분류하라.
문장: "오늘 새로 산 키보드의 타건감이 생각보다 훨씬 부드럽다."
결과: ~~
4-2. One-shot
- 단 하나의 예시를 통해 출력의 방향성과 형식을 제시
- 모델이 작업의 의도를 파악하는 데 매우 유용
지시: 기술 용어를 초등학생도 이해할 수 있게 비유로 설명하라.
예시: "데이터베이스는 정리 정돈이 잘 된 거대한 도서관과 같다."
작업: "API를 비유로 설명하라."
결과: ~~
4-3. Few-shot
- 여러 개의 예시를 제공하여 복잡한 형식을 학습시킴
- 특히 논문이나 연구 결과에 따르면, 모델의 크기가 클수록 Few-shot을 통한 성능 향상 폭이 크다고 함
- 예시의 정답 여부보다 **입력과 출력의 형식(Format)**을 일정하게 유지하는 것이 모델이 규칙을 파악하는 데 더 큰 영향을 미침
지시: 사용자 문의 사항을 카테고리별로 분류하고 중요도를 측정하라.
예시 1: "결제가 안 돼요." -> [카테고리: 결제], [중요도: 상]
예시 2: "아이디를 변경하고 싶어요." -> [카테고리: 계정], [중요도: 중]
예시 3: "앱 화면에 오타가 있어요." -> [카테고리: UI/UX], [중요도: 하]
작업: "로그인이 계속 실패하고 서버 에러 메시지가 뜹니다."
결과: ~~
5. 아주아주 간단한 논문 리뷰
Gemini로 요약
5-1. Model Size and Few-shot
Language Models are Few-Shot Learners (Brown et al. 2020)
- 모델의 크기를 1,750억 개(175B)의 파라미터로 확장함으로써 별도의 가중치 업데이트 없이 몇 가지 예시만으로 작업을 수행하는
Few-shot학습 능력을 구현했다. - 모델 크기, 데이터량, 컴퓨팅 자원이 증가할수록 성능이 로그 선형적으로 향상된다는 스케일링 법칙'을 입증했다.
- Fine-tuning 과정 없이 프롬프트 입력만으로도 다양한 자연어 처리 작업에서 기존의 특화 모델들과 대등한 성능을 기록했다.
5-2. 예시의 품질
Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? (Min et al. 2022)
- 프롬프트 내 퓨샷 예시의 정답 레이블을 무작위로 섞거나 틀린 답을 제공하더라도 모델의 성능 저하는 미미하다는 충격적인 사실을 밝혔다.
- 인컨텍스트 러닝의 핵심은 정답의 정확성이 아니라, 레이블의 범주(Space), 입력 데이터의 분포, 그리고 시퀀스의 형식(Format)을 파악하는 데 있다.
- 모델은 예시를 통해 새로운 지식을 학습하는 것이 아니라, 이미 내재된 지식 중 현재 작업에 적합한 영역을 찾아내어 활성화하는 방식을 취한다.
5-3. 친절 vs 무례
Should We Respect LLMs? (2024.02)
- 무례한 태도의 프롬프트는 모델의 성능을 유의미하게 저하시키며, 이는 학습 데이터인 인터넷 커뮤니티의 부정적 답변 패턴을 모델이 복제한 결과이다.
- 언어권별로 공손함의 효과가 다르게 나타나는데, 특히 일본어의 경우 경어(Keigo) 사용 여부가 모델의 전문성과 답변 품질에 결정적인 영향을 미친다.
- AI를 존중하는 태도로 대하는 것은 단순한 윤리적 선택이 아니라, 고품질의 결과물을 얻기 위한 가장 효율적인 확률 제어 전략이다.
5-4. 감정을 담아 질의하기
Large Language Models Understand and Can be Enhanced by Emotional Stimuli (2023.11)
- "이 작업은 내 커리어에 매우 중요하다"와 같은 감정적 자극(EmotionPrompt)을 추가했을 때, 다양한 벤치마크에서 모델의 추론 능력이 비약적으로 향상되었다.
- 사회인지이론 등 심리학적 원리를 적용하여 책임감이나 긴박감을 부여하면 모델의 주의(Attention) 기제가 강화되어 더 논리적인 해결책을 도출한다.
- 감정적 문맥은 모델이 학습한 방대한 데이터 중 '문제 해결 지향적'이고 '신중한' 텍스트 영역을 활성화하는 트리거 역할을 수행한다.
5-5. Temperature와 Hallucination
Is Temperature the Creativity Parameter of Large Language Models (2024.05)
- Temperature 파라미터를 높이는 행위는 모델을 창의적으로 만드는 것이 아니라, 단순히 확률 분포를 평탄화하여 선택의 무작위성을 증가시키는 것이다.
- 온도가 높아질수록 어휘의 다양성은 증가하지만, 글의 전체적인 논리적 일관성과 응집성은 급격히 무너지는 부작용이 발생한다.
- 진정한 의미의 창의적 결과물은 파라미터 조절이 아닌, 구체적인 제약 조건과 맥락을 담은 정교한 프롬프트 설계를 통해 도출된다.