프롬프트 엔지니어링

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

개요

[편집]

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

기본 구성 요소

[편집]

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

  1. Instruction (지시사항)
    • LLM 모델이 수행해야 할 구체적인 작업에 대한 설명
    • 명확하고 구체적인 행동 지침 포함
  2. Context (맥락)
    • 모델이 더 나은 답변을 할 수 있도록 제공되는 배경 정보
    • 관련된 예시나 참조 정보 포함
  3. Input Data (입력 데이터)
    • 해결하고자 하는 문제나 질문에 대한 구체적인 데이터
    • 모델이 처리해야 할 실제 내용
  4. 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 예시 제공
  • 편향을 피하기 위한 명시적 지시
  • 구체적인 출력 형식 지정

복잡한 작업 처리

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

프롬프트 종류별 작성 전략

[편집]

유저 프롬프트 작성 전략

[편집]
  1. 명확성과 구체성
    • 상세한 맥락 제공
    • 명확한 목표 정의
    • 원하는 출력 형식 지정
  2. 복잡한 작업 처리
    • 작업을 작은 단위로 분해
    • 단계별 지침 제공
    • 우선순위 지정 요청
  3. 데이터와 제약사항
    • 관련 데이터나 예시 포함
    • 필요한 제약사항 명시
    • 중요 지표나 KPI 지정

시스템 프롬프트 작성 전략

[편집]
  1. 역할과 맥락 설정
    • AI의 역할 명확히 정의
    • 비즈니스 환경과 맥락 제공
    • 전문성 수준 설정
  2. 커뮤니케이션 가이드라인
    • 톤과 스타일 정의
    • 전문용어 사용 지침
    • 브랜드 일관성 유지
  3. 윤리와 규정 준수
    • 법적/윤리적 가이드라인 설정
    • 데이터 처리 프로토콜
    • 민감 정보 취급 지침

프롬프트 엔지니어링과 프롬프트 템플릿의 관계

[편집]

프롬프트 엔지니어링(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.