프롬프트 엔지니어링

프롬프트 엔지니어링(Prompt Engineering)은 대규모 언어 모델(Large Language Models, LLMs)과 시각-언어 모델(Vision-Language Models, VLMs)의 출력을 최적화하기 위해 입력 프롬프트를 설계하고 구조화하는 기술이다. 모델 파라미터를 수정하지 않고도 특정 작업에 대한 모델의 성능을 향상시키는 것을 목표로 한다.

**개요**
프롬프트는 LLM으로부터 사용자가 원하는 결과를 도출하기 위한 입력으로, AI 모델에게 내리는 지시사항이나 대화 시작의 기초가 된다. 프롬프트 엔지니어링은 생성된 결과물의 품질을 높일 수 있는 프롬프트 입력값들의 최적의 조합을 찾는 작업이다. 이는 자연어 지시사항을 통해 LLM의 동작을 제어하는 방법론으로, 모델 재훈련이나 미세조정 없이도 다양한 작업에서 원하는 출력을 얻을 수 있게 한다.

**기본 구성 요소**
프롬프트는 다음 네 가지 주요 구성 요소로 이루어진다:
# Instruction (지시사항)
#* LLM 모델이 수행해야 할 구체적인 작업에 대한 설명
#* 명확하고 구체적인 행동 지침 포함
# Context (맥락)
#* 모델이 더 나은 답변을 할 수 있도록 제공되는 배경 정보
#* 관련된 예시나 참조 정보 포함
# Input Data (입력 데이터)
#* 해결하고자 하는 문제나 질문에 대한 구체적인 데이터
#* 모델이 처리해야 할 실제 내용
# Output Indicator (출력 지시자)
#* 원하는 결과물의 형식이나 구조를 명시
#* 응답의 길이, 형식, 스타일 등을 지정

**프롬프트 엔지니어링 - 프롬프트 디자인**
프롬프트 엔지니어링 중 한 영역인 프롬프트 디자인(Prompt Design)은 대규모 언어 모델의 출력을 제어하기 위한 입력 텍스트를 구조화하고 작성하는 과정이다. 이는 다음과 같은 요소들을 포함한다:

**주요 구성 요소**
 프롬프트  구조화- 맥락 설정- 지시사항 명시- 예시 제공- 출력 형식 지정

**고려 사항**
 명확성과 구체성- 편향성 회피- 모델의 제약사항 이해- 사용 목적에 따른 맞춤화

**프롬프트 엔지니어링 - 최적화**
프롬프트 엔지니어링 중 한 영역인 프롬프트 최적화(Prompt Optimization)는 프롬프트의 성능을 개선하고 원하는 결과를 더 효과적으로 얻기 위한 체계적인 접근 방식이다. 다음과 같은 과정을 포함한다:

**최적화 방법**
 성능 메트릭 정의- 반복적 테스트- 결과 분석- 프롬프트 수정- 검증 및 평가

**주요 목표**
 응답 정확도 향상- 일관성 개선- 환각 현상 감소- 계산 효율성 증대

**프롬프트의 종류**

**사용자 프롬프트(User Prompt)**
 특정 작업이나 쿼리에 대한 구체적이고 동적인 지시사항- 각 상호작용마다 변경되는 "what"에 해당하는 부분- 명확한 목표와 원하는 출력 형식을 포함- 예시:
** 데이터 분석 요청
** 콘텐츠 생성 지시
** 특정 질문에 대한 답변 요청

**시스템 프롬프트(System Prompt)**
 AI의 전반적인 행동과 응답 방식을 정의하는 기본 지침- 일관된 "how"와 "why"를 설정하는 프레임워크- 역할, 톤, 윤리적 가이드라인 등을 포함- 예시:
** 전문가적 태도 유지 지침
** 윤리적 경계 설정
** 브랜드 톤앤보이스 가이드라인

**프롬프트 엔지니어링의 역사**

**2018년: NLP 통합 접근법의 시작**
 2018년 연구진은 자연어처리(NLP)의 모든 개별 작업을 맥락 기반 질의응답 형태로 통합할 수 있다는 혁신적인 제안을 했다. 이들은 감정 분석, 번역, 일반 상식 질문 등 다양한 작업을 수행할 수 있는 최초의 다목적 통합 모델을 개발했다.

**2021년: T0 모델의 등장**
 2021년에는 12개의 NLP 작업(62개 데이터셋 포함)을 처리하는 생성형 사전학습 모델 T0가 개발되었다. T0는 구조화된 프롬프트를 활용해 새로운 작업에서도 뛰어난 성능을 보였으며, 단일 작업 특화 모델의 성능을 넘어섰다.

**2022년: 프롬프트 기술의 확장**
 2월: 170여 개의 데이터셋에 대한 2,000개 이상의 프롬프트가 공개 저장소를 통해 공유됨- 구글 연구진이 '사고의 사슬(Chain-of-Thought)' 기법을 발표

**2023년: 멀티모달 프롬프트의 발전**
 텍스트 기반 프롬프트와 이미지-텍스트 프롬프트 데이터베이스가 공개되며 프롬프트 엔지니어링이 멀티모달 영역으로 확장됨

**프롬프트와 프롬프팅의 차이**

**프롬프트**
 AI 모델에 제공되는 입력 텍스트- 질문, 지시문, 문맥 정보 등을 포함- AI 모델의 응답 방향을 결정하는 역할

**프롬프팅**
 프롬프트를 활용한 AI 모델과의 전체 상호작용 과정- 프롬프트 입력부터 응답 생성까지의 전체 흐름- 반복적인 대화와 피드백을 포함

**프롬프트 엔지니어링의 발전 단계**

**1기: 기초 확립기 ( ~ 2022 )**
 Zero-shot과 Few-shot 학습 등을 활용한 프롬프트 엔지니어링 -> 높은 효율성- "Let's think step by step"과 같은 단계적 사고 유도 기법 등장- Chain-of-Thought(CoT) 추론의 기초가 확립됨- 주요 특징: 상세한 설명과 중간 과정을 포함한 프롬프트 설계 강조

**2기: 체계화 시기 ( ~ 2023 )**
 Chain-of-Thought 프롬프팅의 고도화- 자동화된 프롬프트 최적화 기법 등장- 인간 수준의 프롬프트 엔지니어링 능력 달성- 주요 특징: 구조화된 프롬프트 포맷의 중요성 부각

**3기: 원칙 기반 시기( ~ 현재 )**
 "less is more" 원칙 확립 - 간결하고 명확한 지시 선호- 복잡한 작업의 모듈화 강조- 새로운 프롬프트 최적화 전략 도입:
** 마음을 읽으려 하지 않고 명시적인 지시에 집중
** 텍스트 참조를 통한 환각 현상 감소
** 복잡한 작업의 하위 작업 분할
** 모델에게 "생각할 시간" 제공
** 외부 도구와의 통합 강화
** 체계적인 성능 테스트 도입- 주요 패러다임 전환:
** 과거의 'step by step' 접근법에서 벗어나 더 자연스러운 지시 방식 채택
** 불필요한 공손성이나 감정적 조작 배제
** 구체적이고 직접적인 지시 선호
** 모듈식 접근방식 강조- 성능 최적화를 위한 새로운 강조점:
** 참조 텍스트 기반 답변 생성
** 외부 도구 활용 (임베딩 기반 검색, 코드 실행 등)
** 체계적인 테스트와 평가

**주요 기법**

**구조와 명확성**
 대상 청중 명시적 지정- 긍정적인 지시문 사용- 프롬프트 구성요소 간 명확한 구분

**구체성과 정보**
 few-shot 예시 제공- 편향을 피하기 위한 명시적 지시- 구체적인 출력 형식 지정

**복잡한 작업 처리**
 작업을 단순한 하위 작업으로 분해- 단계별 추론 유도- 검증 단계 포함

**프롬프트 종류별 작성 전략**

**유저 프롬프트 작성 전략**
# 명확성과 구체성
#* 상세한 맥락 제공
#* 명확한 목표 정의
#* 원하는 출력 형식 지정
# 복잡한 작업 처리
#* 작업을 작은 단위로 분해
#* 단계별 지침 제공
#* 우선순위 지정 요청
# 데이터와 제약사항
#* 관련 데이터나 예시 포함
#* 필요한 제약사항 명시
#* 중요 지표나 KPI 지정

**시스템 프롬프트 작성 전략**
# 역할과 맥락 설정
#* AI의 역할 명확히 정의
#* 비즈니스 환경과 맥락 제공
#* 전문성 수준 설정
# 커뮤니케이션 가이드라인
#* 톤과 스타일 정의
#* 전문용어 사용 지침
#* 브랜드 일관성 유지
# 윤리와 규정 준수
#* 법적/윤리적 가이드라인 설정
#* 데이터 처리 프로토콜
#* 민감 정보 취급 지침

**프롬프트 엔지니어링과 프롬프트 템플릿의 관계**
프롬프트 엔지니어링(Prompt Engineering)과 프롬프트 템플릿(Prompt Template)은 모두 대규모 언어 모델(Large Language Models, LLMs)을 효과적으로 활용하기 위한 방법이다. 프롬프트 엔지니어링이 전체적인 설계 방법론이라면, 프롬프트 템플릿은 이를 실현하기 위한 구체적인 구현 도구로 볼 수 있다.

**개요**
프롬프트 엔지니어링은 AI 언어 모델에서 원하는 출력을 얻기 위해 입력(프롬프트)을 최적화하는 과정을 의미한다. 이 과정에서 프롬프트 템플릿은 재사용 가능하고 구조화된 프롬프트를 생성하기 위한 프레임워크 역할을 한다.

**관계성**
 프롬프트 엔지니어링은 전략적 방법론을 제시- 프롬프트 템플릿은 이를 실제로 구현하는 도구를 제공- 템플릿은 엔지니어링 과정에서 도출된 최적의 프롬프트 구조를 재사용 가능한 형태로 표준화

**확장성**
 프롬프트 엔지니어링이 제시하는 다양한 기법(Few-shot learning, Chain of Thought 등)을 템플릿 형태로 구조화- 템플릿을 통해 엔지니어링된 프롬프트의 재현성과 일관성 확보

**효율성**
 프롬프트 엔지니어링의 결과물을 템플릿화하여 반복 작업 최소화- 최적화된 프롬프트 패턴의 재사용을 통한 개발 효율성 향상

**프롬프트 체인**
 프롬프트 체인 : 하나의 복잡한 작업을 여러 개의 작은 단계로 분해하여 처리하는 프롬프팅 기법- 각 단계의 출력이 다음 단계의 입력으로 연결되는 연쇄적 구조- 대규모 프롬프트 대신 작은 단위의 프롬프트들을 연결하여 더 나은 결과 도출

**프롬프트 압축**
 프롬프트 압축 : 하나의 복잡한 작업을 여러 개의 작은 단계로 분해하여 처리하는 프롬프팅 기법- 각 단계의 출력이 다음 단계의 입력으로 연결되는 연쇄적 구조- 대규모 프롬프트 대신 작은 단위의 프롬프트들을 연결하여 더 나은 결과 도출

**프롬프트 템플릿(Prompt Template) - LangChain 기반**

**1. 기본 개념**
 프롬프트: 모델에 대한 입력을 의미- 프롬프트 템플릿: 고정된 부분과 가변적인 부분으로 구성된 프롬프트 구조- 목적: 사용자가 매번 전체 프롬프트를 작성하지 않고 필요한 부분만 입력하도록 함

**2. 프롬프트 템플릿 종류**
 기본 프롬프트 템플릿: 일반적인 GPT 모델용- 챗 프롬프트 템플릿: 챗봇 형태의 대화형 모델용
** 시스템 메시지 프롬프트
** AI 메시지 프롬프트
** 휴먼 메시지 프롬프트

**3. Few-shot 예제 활용하는 법**

**개념**
 딥러닝 모델이 결과물을 출력할 때 예시를 미리 제시하여 원하는 방향으로 결과 유도- 특수하거나 구조화된 답변이 필요할 때 유용

**Example Selector 기능**
 동적으로 Few-shot 학습 수행- 사용자 입력에 따라 적절한 예시를 선택- SemanticSimilarityExampleSelector: 입력과 가장 유사한 예시 선택- 불필요한 예시를 제외하여 프롬프트 길이 최적화

**4. 출력값 조정을 위한 Output Parser**

**기능**
 출력된 형태를 원하는 포맷으로 고정- 리스트, JSON 등 다양한 형태로 변환 가능

**예시(CommaSeparatedListOutputParser)**
 콤마로 구분된 리스트 형태로 출력 변환- 기본 instruction 포함- 서비스 개발 시 데이터 처리 용이

**5. 실습**

**기본 설정**
 LangChain과 OpenAI 라이브러리 설치- API 키 설정- 모델 설정 (GPT-3 Davinci-003, temperature=0 등)

**= 실제 구현 =**
 프롬프트 템플릿 생성 및 변수 설정- Few-shot 예제 구성- Example Selector 구현- Output Parser 적용

**기타 - LLM에게 공손하게(예의있게) 부탁하는게 좋은가?**
Should we respect LLMs (2024.02) 연구를 보면, 공손함의 효과에 대해 아래와 같이 설명하고 있다.

**공손함의 효과:**
 프롬프트에서 "공손함의 레벨"이 LLM의 성능에 영향을 미친다는 결과- 영어, 중국어, 일본어 등 여러 언어에서 공손한 표현이 영향을 미침- 무례한 프롬프트는 낮은 성능을 초래할 수 있음 

**주목할 만한 점:**
 지나치게 예의 바른 언어가 반드시 더 나은 결과를 보장하지는 않는다- 성능 향상이 일관적이지 않음

**성능이 향상된 진짜이유 :**
 "그 이유는 공손한 표현 자체의 효과가 아니라 그 표현들이 대화에서 '요청사항을 더 명확하게 구분'하고
대화의 '흐름 전환을 표시'하는 역할을 하기 때문"
예) - "부탁드립니다" → 여기서 요청이 시작된다는 것을 명확히 표시- "감사합니다. 다음으로는..." → 한 주제가 끝나고 다른 주제로 넘어간다는 전환점 표시

**효과성**
연구에 따르면 체계적인 프롬프트 엔지니어링을 적용했을 때, GPT-4에서 응답 품질이 평균 57.7%, 정확도가 36.4% 향상되었다. 특히 모델의 규모가 클수록 프롬프트 엔지니어링의 효과가 더 크게 나타나며, LLaMA-2-7B에서 GPT-4로 갈수록 성능 향상 폭이 20% 이상 증가하는 것으로 나타났다. 효과적인 프롬프트 엔지니어링은 모델의 출력 품질을 크게 향상시키고, 특정 작업에 대한 성능을 최적화하는 데 핵심적인 역할을 한다.

**각주**
 Sahoo, P., Singh, A. K., Saha, S., Jain, V., Mondal, S., & Chadha, A. (2024). A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications.- Zhou, Y., Muresanu, A. I., Han, Z., Paster, K., Pitis, S., Chan, H., & Ba, J. (2023). Large Language Models are Human-Level Prompt Engineers. Published as a conference paper at ICLR 2023.- Bsharat, S. M., Myrzakhan, A., & Shen, Z. (2024). Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4.- OpenAI. (2024). Prompt engineering: Enhance results with prompt engineering strategies. ( Link : https://platform.openai.com/docs/guides/prompt-engineering )- AWS. (2024). What is Prompt Engineering?( Link: https://aws.amazon.com/ko/what-is/prompt-engineering/)
분류:인공지능
분류:딥 러닝
분류:기계 학습
분류:자연어 처리
분류:비지도 학습
분류:언어학