프롬프트 엔지니어링
프롬프트 엔지니어링(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/)[1]
- ↑ “프롬프트 엔지니어링이란? - AI 프롬프트 엔지니어링 설명 - AWS”. 2024년 11월 9일에 확인함.