10X AI Club의 'Prompt Engineering에 대한 모든 기법 소개' 영상과 Google Prompt 엔지니어링 백서(64p,PDF)
을 보고 요약한 내용을 정리하였습니다. 이미 알고 있던 ReAct, Few-shot, Zero-shot 기법뿐아니라 전반적인 프롬프트엔지니어링 기법이 총망라되어있어 참고하면 좋을 듯합니다.
기본 기법
Zero-Shot prompting
Few-Shot Prompting
System, Context, Role Prompting
고급 기법
Step-Back Prompting
CoT(Chain of Thought)
셀프 컨시스턴시(Self Consistency)
Tree of Thoughts(ToT)
리액트(ReAct) 프롬프팅
APE(Automatic Prompt Engineering)
1. 프롬프트 엔지니어링의 필요성 및 고려 사항
- 프롬프트 엔지니어링은 LLM 모델의 구조 때문에 필요함 .
- LLM은 다음 단어를 예측하여 문장을 생성하는 구조임 .
- 프롬프트 작성을 잘해야 이전 토큰과 학습 데이터에 기반한 답변을 제대로 예측하고 생성할 수 있음 .
- 프롬프트 작성 시 여러 변수를 고려해야 함 .
- 사용하는 모델
- 모델의 학습 데이터
- 모델 설정값
- 단어 선택
- 스타일과 톤
- 구조
- 이 변수들에 따라 LLM의 결과물이 크게 달라짐 .
- 프롬프트 엔지니어링은 주관적이고 바로 원하는 결과를 얻기 어려움 .
- 고려해야 할 사항이 많음 .
2. LLM 아웃풋 제어 설정
- LLM의 아웃풋 값을 제어하는 설정들이 있음 .
- 아웃풋 길이 설정이 중요함 .
- LLM이 생성할 토큰 개수에 제한을 두는 것을 말함 .
- 제한을 두지 않으면 에너지 소비량이 많아지고 답변 속도가 느려짐 .
- API 비용이 많이 들게 됨 .
- 길이 제한을 얼마나 잘 두는지에 따라 LLM의 답변이 결정됨 .
- 길이 제한이 답변 퀄리티를 떨어뜨릴 것이라고 생각할 수 있음 .
- 하지만 단순히 더 이상 토큰 예측을 그만하겠다는 의미임 .
- 프롬프트가 잘 작성되었다면 토큰 제한 내에서도 퀄리티 높은 답변을 받을 수 있음 .
- 샘플링 컨트롤 값들이 있음 .
- 템퍼처, 탑 K, 탑 P가 있음 .
- 템퍼처는 답변의 창의성을 조절함 .
- 0에 가까울수록 정해진 답변을 내놓음 .
- 1에 가까울수록 창의적인 답변을 내놓음 .
- 스토리나 창의적인 답변을 원하면 템퍼처를 1에 가깝게 설정함 .
- 탑 K는 예측 토큰 중 상위 K개만 선택함 .
- 탑 K 값이 높으면 더 많은 양을 가져와 창의적인 답변이 가능함 .
- 탑 K 값이 낮으면 예측 점수가 가장 높은 토큰들만 가져와 정해지고 확실한 답변을 생성함 .
- 탑 P는 예측 점수가 지정된 P 값 안에 있는 토큰들만 가져옴 .
- 설정값은 0에서 1까지 정할 수 있음 .
- 0은 템퍼처 0과 유사하게 정해진 답변을 내놓음 .
- 1은 LLM의 모든 단어를 가져옴 .
- 이 세 가지 설정값 선택에 따라 LLM 생성 답변이 달라짐 .
- 설정값 간의 상관관계가 있음 .
- 템퍼처를 0으로 하면 탑 K와 탑 P는 효과가 없음 .
- 탑 K를 1로 하면 템퍼처와 탑 P는 효과가 없음 .
- 탑 P를 0으로 하면 샘플링 데이터 중 가장 확률 높은 토큰만 가져와 템퍼처와 탑 K는 효과가 없음 .
- 어떤 값을 지정해야 할지 애매한 부분이 있음 .
- 추천 초기 설정값이 있음 .
- Temperature 0.2, Top P 0.95, Top K 35로 설정하면 프롬프트를 잘 이해하고 답변을 생성하는 경우가 많음 .
- 더 창의적인 답변을 원하면 설정값을 변경함 .
- 수학 문제처럼 정해진 답변이 있는 경우는 템퍼처를 0으로 설정해야 실수하지 않음 .
설정값 | 설명 | 0에 가까울수록 | 1에 가까울수록 |
템퍼처 | 답변의 창의성 조절 | 정해진 답변 | 창의적인 답변 |
Top K | 예측 토큰 중 상위 K개 선택 | 예측 점수 높은 토큰만 선택, 확실한 답변 생성 | 더 많은 토큰 선택, 창의적인 답변 생성 |
탑 P | 예측 점수가 지정된 P 값 안에 있는 토큰 선택 | 템퍼처 0과 유사 | 모든 단어 가져옴 |
상관관계 | 템퍼처 0이면 탑 K, 탑 P 효과 없음 탑 K 1이면 템퍼처, 탑 P 효과 없음 탑 P 0이면 템퍼처, 탑 K 효과 없음 | ||
추천 초기값 | 템퍼처 0.2, 탑 P 0.95, 탑 K 35 | 수학 문제 등 정해진 답이 있는 경우 템퍼처 0으로 설정 | 창의적인 답변을 원할 때 설정값 변경 |
3. 다양한 프롬프트 엔지니어링 기법 소개 (기본)
Zero-Shot prompting
- 아무런 컨텍스트 없이 바로 질문하는 것을 뜻함 .
- 예시: "Her" 영화 리뷰에 대해 긍정/중립/부정 판단 요청 .
- 예시 구문 없이 바로 질문했을 때 LLM이 답변하는지 테스트함 .
- 가끔 이상하게 답변할 때가 있음 .
Few-Shot Prompting
- 프롬프트 자체에 여러 가지 예시 구문을 같이 넣어 프롬프팅하는 기법임 .
- 원샷 프롬프트는 한 가지 예시를 포함함 .
- 퓨샷 프롬프팅은 여러 가지 예시를 넣음 .
- 퓨샷 프롬프팅 시 좋은 조언이 있음 .
- 예시 구문은 세 가지에서 다섯 가지 정도 넣는 것이 좋음 .
- 다양한 예시를 넣어야 LLM이 잘 이해하고 올바른 답변을 내놓을 수 있음 .
- 예시 구문의 퀄리티가 높고 잘 쓰여야 함 .
- 그렇지 않으면 LLM이 실수하거나 할루시네이션할 확률이 높아짐 .
- 예시: 고객 피자 주문을 JSON 형태로 아웃풋 생성 요청 .
- 사용자 주문 예시 구문과 예상 JSON 아웃풋을 같이 제공함 .
- 다른 예시를 추가로 제공함 .
- 새로운 질문을 했을 때 예시를 참고하여 올바르게 답변함 .
System, Context, Role Prompting
- 시스템 프롬프팅은 모델 자체에 넣을 프롬프트임 .
- 모델이 무엇을 해야 하는지에 대해 대략적으로 설명하는 큰 그림의 프롬프트임 .
- 모델의 기본적인 역할, 기능, 페르소나에 대해 얘기함 .
- 예시: 리뷰문이 긍정/부정/중립인지 알려달라는 요청 .
- 컨텍스트 프롬프팅은 LLM이 참고해야 하는 배경 지식과 관련된 프롬프트임 .
- 배경 컨텍스트를 같이 제공함 .
- 예시: 80년대 아케이드 비디오 게임에 대한 블로그 글 작성 요청 시 컨텍스트 제공 .
- 롤 프롬프팅은 LLM 모델이 어떤 역할을 해야 하는지 지정함 .
- 창의적인 스토리텔링이나 캐릭터 AI를 만들 때 중요함 .
- LLM 모델의 성격, 아웃풋 스타일, 보이스를 정해줌 .
- 예시: 투어 가이드 역할을 부여하여 여행 일정 추천 요청 .
- 프롬프트 작성에 유용한 단어 예시들이 제공됨 .
- 이런 단어들을 쓰면 LLM이 훨씬 잘 이해함 .
- 예시: 유머 감각 있게, 캐주얼하게, 설득력 있게 등 톤을 다르게 하는 예시 .
4. 다양한 프롬프트 엔지니어링 기법 소개 (고급)
기법 | 설명 | 주요 특징 | 활용 분야 |
스텝 백 프롬프팅 | 답변 생성 전 참고 사항을 다른 LLM에게 생성하게 한 후 프롬프트에 포함하여 요청 | 일반적인 답변 대신 특화된 답변 유도 | 특정 주제에 대한 구체적인 정보 요청 |
체인 오브 소트 | 복잡한 문제 해결 시 단계별로 생각하며 답변 생성 지시 | 정확도 및 퀄리티 향상 싱글샷/퓨샷과 결합 가능 | 수학 문제, 보고서 작성 등 복잡한 태스크 |
셀프 컨시스턴시 | 샘플링 + 다수결 투표 답변을 여러 개 생성 후 가장 많이 나온 답변 선택 | LLM의 추론 한계 극복 어려운 NLP 태스크에 유용 | 감성 평가 등 애매한 판단이 필요한 태스크 |
트리 오브 소트 | 단계별로 여러 답변 생성 후 좋은 답변 선택 반복하며 파이프라인 생성 | 체인 오브 소트와 달리 여러 방향 탐색 | 복잡한 수학/물리 문제 해결 |
리액트 | 생각(Thought)과 행동(Action) 반복 외부 툴 호출(검색 등)과 결합 | 에이전트 활용에 적합 단계별 문제 해결 | 외부 정보 검색, 코드 실행 등 에이전트 기반 태스크 |
오토매틱 프롬프트 엔지니어링 (APE) | LLM이 프롬프트 자체를 자동으로 생성 모델을 프롬프팅하여 더 많은 프롬프트 생성 유도 | 프롬프트 작성 부담 감소 다양한 요청 형태 생성 가능 학습 데이터 확장 가능 | 챗봇 학습 데이터 생성, 다양한 프롬프트 테스트 |
Step-Back Prompting
- LLM이 답변을 생성하기 전에 참고할 만한 사항들을 다른 LLM에게 먼저 생성하게 함 .
- 그 생성된 답변을 프롬프트에 넣어 함께 요청하여 더 좋은 답변을 받음 .
- 예시: FPS 비디오 게임 스토리 라인 작성 요청 .
- 그냥 요청하면 일반적인 답변이 나옴 .
- 먼저 인기 있는 FPS 게임들의 스토리라인 인기가 있는 다섯 가지 이유를 다른 LLM에게 생성하게 함 .
- 예시 답변: 밀리터리 베이스, 사이버펑크, 에일리언, 좀비 등 다섯 가지 설정 생성 .
- 이 답변을 컨텍스트로 프롬프트에 포함시킴 .
- 다섯 가지 중 하나를 선택하여 게임에 맞는 스토리라인을 구체적으로 써달라고 요청함 .
- 훨씬 특화되고 구체적인 답변을 생성함 .
CoT(Chain of Thought)
- 복잡한 문제 해결 시, 바로 답변 생성 대신 단계별로 생각하며 답변을 생성하도록 지시하는 기법임 .
- 예시: 복잡한 수학 문제 .
- 간단한 수학 문제도 빨리 답변하려다 실수할 때가 있음 .
- "단계별로 스텝 바이 스텝 생각하면서 풀어봐" 같은 문구를 추가함 .
- 올바른 답변을 내놓음 .
- COT 기법을 호출하려면 단순하게 문구 하나만 추가해도 됨 .
- 훨씬 천천히 생각하고 단계별로 풀어서 정확도 높고 퀄리티 높은 답변을 받음 .
- 싱글샷 또는 퓨샷 프롬프팅과 합치면 훨씬 좋은 퀄리티의 답변을 받을 수 있음 .
- 예시: 스텝 바이 스텝 풀어서 쓴 예시 문제들을 프롬프트에 넣고 새로운 문제 질문 .
- 올바른 답변을 잘 내놓음 .
셀프 컨시스턴시(Self Consistency)
- LLM이 생각하고 논리적으로 추론하는 데 한계가 있기 때문에 사용될 수 있음 .
- 모델 사이즈를 올려도 해결되지 않는 부분임 .
- 샘플링과 다수결 투표(majority voting)를 합친 것임 .
- 질문에 대한 답변을 여러 개 생성하도록 함 .
- 생성된 답변들 중 가장 많이 공통적으로 나온 답변을 선택함 .
- 예시: 이메일이 중요한지 중요하지 않은지 분류 요청 .
- 인간의 유머, 비꼬는 말투, 친근한 톤 등 복합적 요소 때문에 LLM이 바로 이해하기 어려움 .
- 이런 감성 평가 시 Consistency를 쓰는 것이 중요함 .
- 답변을 세 번 생성하게 함 .
- 아웃풋 1, 2, 3을 통해 LLM이 세 번 생각하도록 함 .
- 첫 번째는 '중요하다', 두 번째는 '중요하지 않다', 세 번째는 '중요하다'고 결론냄 .
- 세 가지 답변 중 '중요하다'가 두 번 나와 최종적으로 '이 이메일은 중요한 내용이다'라고 판단함 .
Tree of Thoughts(ToT)
- CoT가 1차원적으로 단계별로 내려가는 것과 다름 .
- 인풋이 있을 때 바로 한 방향으로 내려가지 않음 .
- 단계별로 여러 가지 답변을 생성하고 그중 좋은 답변을 선택하는 과정을 반복함 .
- 생성된 여러 답변 중 좋은 것 위주로 스스로 파이프라인을 만들며 아웃풋을 내놓음 .
- 복잡한 수학, 물리 문제 등을 풀 때 중요하게 쓰일 수 있음 .
리액트(ReAct) 프롬프팅
- 요즘 에이전트들이 많이 사용할 기법임 .
- 자연어 테스크 문제 해결 시, 외부 툴(검색, 코드 해석 등) 호출이 필요한 경우 효과적임 .
- 문제를 단계별로 쪼갠 후 생각(Thought)하고 행동(Action)하는 과정을 반복함 .
- 예시: 메탈리카 밴드 멤버들의 자녀 수 질문 .
- Zero shot react description 에이전트 타입을 통해 실행함 .
- 생각하고 행동하며 답변을 내놓음 .
- 'Each' 액션을 통해 네 명의 멤버가 있음을 찾음 .
- 각 멤버별 자녀 수를 찾아봄 .
- 'Observation'으로 검색을 통해 'James는 세 명의 자녀가 있다'는 정보를 찾음 .
- 생각: 네 명의 멤버 중 한 명이 세 명의 자녀를 가짐 .
- 나머지 멤버들의 자녀 수를 찾아 합쳐 총 열 명의 자녀가 있다고 결론냄 .
APE(Automatic Prompt Engineering)
- 프롬프트 작성이 익숙하지 않은 사람들에게 유용함 .
- LLM이 프롬프트 자체를 자동으로 생성할 수 있도록 하는 것임 .
- 모델을 프롬프팅하여 더 많은 프롬프트를 생성하게 함 .
- 예시: 티셔츠 웹사이트 챗봇 학습 .
- 고객들이 특정 티셔츠 구매 요청 시 다양한 질문 형태가 있을 수 있음 .
- 이런 유형들을 생성하도록 프롬프트를 만듦 .
- 예시: 메탈리카 티셔츠 S 사이즈 요청을 사용자가 어떤 다양한 방식으로 할 수 있는지 예시 생성 요청 .
- 여러 가지 경우의 수로 요청할 수 있는 예시를 생성함 .
- 여러 개 중에서 연관성이 높은 예시를 선택하고 그 인스트럭션을 통해 챗봇을 학습시킴 .
- 계속 반복적으로 더 많은 프롬프트를 생성하도록 모델을 프롬프팅하는 것임 .
5. 코드 프롬프팅 및 활용 전략
- 코드 관련 다양한 태스크에 프롬프트를 활용할 수 있음 .
- 코드 생성 프롬프트가 있음 .
- 특정 기능에 대한 코드 작성을 요청할 수 있음 .
- 코드 설명 프롬프트가 있음 .
- 코드를 복사하여 설명해달라고 요청하면 잘 설명함 .
- 코드 변환(번역) 프롬프트가 있음 .
- JSON이나 Node.js 코드를 파이썬으로 변환해달라고 요청하면 잘 해줌 .
- 디버깅 및 코드 리뷰에도 활용할 수 있음 .
- 코드의 오류를 찾거나 개선점을 제시하도록 요청할 수 있음 .
- 이 내용들은 대부분 기본적인 활용법에 해당함 .
6. 효과적인 프롬프트 작성 팁 및 관리 방법
- 좋은 프롬프트 작성을 위한 몇 가지 팁이 있음 .
- 예시 포함이 매우 중요함 .
- 창의적이고 다양하며 확실한 예시를 세 개에서 다섯 가지 정도 넣어야 좋은 답변을 받을 수 있음 .
- 간결하고 명확한 지시가 중요함 .
- 복잡하게 질문하면 제대로 이해하지 못할 수 있음 .
- 훨씬 심플하고 명료하게 프롬프트를 써야 함 .
- 명령 어조 사용이 효과적임 .
- 자신의 생각을 말하며 "이런 것들은 어떻게 해야 돼?"라고 하는 것보다 .
- "네가 이런 식으로 액트 해서 이렇게 이렇게 해 줘"와 같이 바로 명령하는 어조가 더 효과적임 .
- 액션을 설명할 수 있는 동사를 많이 사용하는 것이 좋음 .
- 예시 동사: act, analyze, categorize, classify, contrast, compare 등 .
- 직관적으로 이해할 수 있는 액션 동사를 많이 사용하라는 팁임 .
- 구체적인 아웃풋 형식 지정이 필요함 .
- LLM이 생성해야 하는 답변 형식을 구체적으로 말해줘야 함 .
- 예시: 그냥 "블로그 포스트 생성해 줘"는 다양한 형태가 나올 수 있음 .
- "세 개의 문단으로 작성하고 탑 5 비디오 게임에 대해 설명해 줘"처럼 확실하게 지정하면 더 확실한 답변을 받을 수 있음 .
- 해야 할 것 (instruction)에 집중해야 함 .
- 하지 말아야 할 것 (constraint)보다는 해야 할 것에 더 많이 집중하도록 해야 함 .
- 리서치를 통해 보면 해야 할 것(instruction)을 더 많이 넣어야 좋은 답변을 생성함 .
- 사람에게 지시할 때도 해야 할 것을 말하는 것이 하지 말아야 할 것보다 긍정적으로 와닿아 좋은 결과를 내놓음 .
- 예시: "이것에 대해서만 작성해 줘"가 "이것에 대해서는 얘기하지 말아 줘"보다 좋음 .
- 하지 말아야 할 것을 언급하면 오히려 역효과가 날 수 있음 .
- 토큰 리밋 설정이 유용함 .
- 생성할 수 있는 토큰 개수에 제한을 두면 좋음 .
- 변수 활용이 좋음 .
- 프롬프트 안에 변수를 설정해 놓으면 동적으로 값을 조정할 수 있어 좋은 방법임 .
- 다양한 프롬프트 형태 테스트를 추천함 .
- 질문 형태, 문장 형태, 지시 사항 형태로 요청하며 테스트해 보는 것이 좋음 .
- 모델 업데이트를 인지해야 함 .
- 모델이 업데이트될 때마다 계속 파악하고 있어야 함 .
- JSON, XML 등 구조화된 아웃풋 형식 사용이 장점임 .
- 편차가 줄어든 답변을 받을 수 있음 .
- JSON 형식으로 답변을 받으면 코딩할 때 유리함 .
- 항상 똑같은 스타일로 답변을 생성함 .
- 받아야 하는 데이터에 더 집중할 수 있음 .
- 할루시네이션을 줄일 수 있음 .
- JSON 사용의 여러 장점이 있음 .
- COT 사용 시 템퍼처는 0으로 두어야 함 .
- COT 기법은 답변이 정해져 있는 문제 위주로 사용되기 때문임 .
- 문제를 푸는 것 등 답변이 정해진 태스크에는 템퍼처를 항상 0으로 두어야 함 .
- 프롬프트 기록 및 관리
- 앱이나 챗봇 개발 시 프롬프트 기법을 다양하게 사용하고 계속 테스트할 것이므로 사용했던 프롬프트를 모두 기록해 놓아야 함 .
- Google 시트 등에 저장하며 계속 업데이트하는 것이 좋음 .
- 프롬프트 관리를 위한 예시 테이블이 제시됨 .
- 이름, 목표, 사용 모델, 템퍼처, 탑 K, 탑 P, 토큰 리밋, 사용된 프롬프트, 아웃풋, 답변 퀄리티(좋음/안 좋음/가끔 좋음) 등을 기록함 .
- 이렇게 분류해 놓으면 나중에 프롬프트를 관리하기 쉬움 .
항목 | 예시 |
이름 | 영화 리뷰 감성 분석 프롬프트 |
목표 | 리뷰의 긍정/부정/중립 판단 |
사용 모델 | GPT-3.5 |
템퍼처 | 0.2 |
탑 K | 35 |
탑 P | 0.95 |
토큰 리밋 | 100 |
프롬프트 내용 | "다음 영화 리뷰가 긍정, 부정, 중립 중 어느 것인지 판단해 줘: [리뷰 내용]" |
아웃풋 | 긍정 |
답변 퀄리티 | 좋음 |
7. 결론 및 요약
- 다양한 프롬프팅 기법들을 살펴보았음 .
- 이 기법들에 대해 어느 정도 이해했을 것이라고 생각함 .
- 제대로 알고 있지 못했더라도 직관적으로 많이 사용했을 법한 기법들을 다시 요약함 .
- 요약을 통해 머릿속에 다시 들어오고 좋은 답변을 받을 수 있음 .
- 프롬프트 엔지니어링 학습을 통해 LLM 활용 능력을 향상시킬 수 있음 .
'Data Science > ML & DL' 카테고리의 다른 글
[gemma3모델 사용하기] 멀티모달 vs 텍스트 only (0) | 2025.04.25 |
---|---|
[Module 4] 6.Ensemble | 머신러닝 모델을 동시에 사용하기 (1) | 2024.01.10 |
Lv2. 결측치 보간법과 랜덤포레스트로 따릉이 데이터 예측하기 (1) | 2023.12.26 |
Lv1. 의사결정회귀나무로 따릉이 데이터 예측하기 (2) | 2023.12.26 |
Segemntation | 개요 (1) | 2023.11.09 |