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

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

== '''기본 구성 요소''' ==
프롬프트는 다음 네 가지 주요 구성 요소로 이루어진다:

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

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

=== 주요 구성 요소 ===

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

=== 고려 사항 ===

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

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

=== 최적화 방법 ===

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

=== 주요 목표 ===

* 응답 정확도 향상
* 일관성 개선
* 환각 현상 감소
* 계산 효율성 증대[3]

== '''프롬프트의 종류''' ==

=== 사용자 프롬프트(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]
* 주요 특징: 상세한 설명과 중간 과정을 포함한 프롬프트 설계 강조

=== 2기: 체계화 시기 ( ~ 2023 ) ===

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

=== 3기: 원칙 기반 시기( ~ 현재 ) ===

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

== '''주요 기법''' ==

=== 구조와 명확성 ===

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

=== 구체성과 정보 ===

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

=== 복잡한 작업 처리 ===

* 작업을 단순한 하위 작업으로 분해
* 단계별 추론 유도
* 검증 단계 포함[3]

== '''프롬프트 종류별 작성 전략''' ==

=== 유저 프롬프트 작성 전략 ===
# '''명확성과 구체성'''
#* 상세한 맥락 제공
#* 명확한 목표 정의
#* 원하는 출력 형식 지정
# '''복잡한 작업 처리'''
#* 작업을 작은 단위로 분해
#* 단계별 지침 제공
#* 우선순위 지정 요청
# '''데이터와 제약사항'''
#* 관련 데이터나 예시 포함
#* 필요한 제약사항 명시
#* 중요 지표나 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의 성능에 영향을 미친다는 결과
* 영어, 중국어, 일본어 등 여러 언어에서 공손한 표현이 영향을 미침
* 무례한 프롬프트는 낮은 성능을 초래할 수 있음 

=== 주목할 만한 점: ===

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

=== '''성능이 향상된 진짜이유 :''' ===

* "그 이유는 공손한 표현 자체의 효과가 아니라 그 표현들이 대화에서 '''<nowiki/>'요청사항을 더 명확하게 구분'''<nowiki/>'하고

대화의 '''<nowiki/>'흐름 전환을 표시'''<nowiki/>'하는 역할을 하기 때문"

예) 

* "부탁드립니다" → 여기서 요청이 시작된다는 것을 명확히 표시
* "감사합니다. 다음으로는..." → 한 주제가 끝나고 다른 주제로 넘어간다는 전환점 표시

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

== '''각주''' ==
[1] 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.

[2] 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.

[3] Bsharat, S. M., Myrzakhan, A., & Shen, Z. (2024). Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4.

[4] OpenAI. (2024). Prompt engineering: Enhance results with prompt engineering strategies. ( Link : https://platform.openai.com/docs/guides/prompt-engineering )

[5] AWS. (2024). What is Prompt Engineering?( Link: https://aws.amazon.com/ko/what-is/prompt-engineering/)<ref>{{웹 인용|url=https://aws.amazon.com/ko/what-is/prompt-engineering/|제목=프롬프트 엔지니어링이란? - AI 프롬프트 엔지니어링 설명 - AWS|언어=ko-KR|확인날짜=2024-11-09}}</ref>
[[분류:인공지능]]
[[분류:딥 러닝]]
[[분류:기계 학습]]
[[분류:자연어 처리]]
[[분류:비지도 학습]]
[[분류:언어학]]