🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • Intro
  • 1) Zero Shot Prompt
  • 2) Few Shot Prmopt
  • Few Shot Prompt 실습
  • 3) Chain-of-Thought Prmopt(COT)
  • COT 실습
  • 4) Zero-Shot Chain-of-Thought(ZCOT)
  • Zero-Shot COT 실습
  • 5) Self-Consistency(자기일관성)
  • 정리
  1. LLM 서비스
  2. 2장 프롬프트 엔지니어링

기본 프롬프트 엔지니어링 태크닉

Previous프롬프트 작문 유형Next고급 프롬프트 엔지니어링 태크닉

Last updated 3 months ago

Intro

이전 챕터에서는 응답목적에 맞추어 프롬프트를 작문하는 방법들에 대해서 배워 봤습니다.

이번 챕터에서는 프롬프트를 최적화 할 수 있는 방법인 프롬프트 엔지니어링 패턴들에 대해서 알아보도록 하겠습니다.

프롬프트 엔지니어링을 통한 최적화로 얻을 수 있는 이점들은 다음과 같습니다.

  1. 정확한 응답 유도

    1. 프롬프트설계로 애매한 답변이 아닌 명확하고 원하는 정보를 얻을 수 있음

  2. 시간 & 비용 절감

    1. 적절한 프롬프트를 사용하면 불필요한 재요청 없이 원하는 결과를 빠르게 도출할 수 있음.

  3. 일관된 결과 유지

    1. 같은 질문에 대해 일정한 품질의 답변을 유지할 수 있음.

  4. AI모델 성능 극대화

    1. AI가 최적의 학습데이터를 활용할 수 있도록 유도할 수 있음.


1) Zero Shot Prompt

  • AI에게 예제를 주지 않고(Zero Shot) 작업을 수행하는 방법으로 LLM이 자체적으로 학습한 데이터를 기반으로 응답을 생성하도록 유도하는 방법

특징

  • 빠른 적용 : 예제 없이 바로 사용할 수 있다.

  • 일반적인 질문에 적합 : 모델이 사전 학습된 지식을 사용하기 때문에 일반적인 질문에 적합하다.

한계점

  • 정확성이 떨어질 수 있음 : 모델이 문맥을 잘못 이해하여 잘못된 응답을 반환할 수 있다.

2) Few Shot Prmopt

  • AI에게 몇 개의 예제(Few Shot)를 제공한 후, 추가적인 입력에 대해 유사한 방식으로 응답하도록 유도하는 방법 으로 복잡한 문제 수행에 있어서 Zero Shot Prompt보다 정확도가 높다.

System : 
예제1:
    질문 : "tomato가 뭐야"
    답변 : "토마토는 비타민 C, 비타민 K, 칼륨, 엽산 등이 풍부하며, 특히 리코펜(lycopene)이라는 항산화 물질을 다량 함유하고 있는 과일입니다"
예제2:
    질문 : "Strawberry에대해서알려줘"
    답변 : "사과는 비타민 C, 망간, 엽산, 식이섬유가 풍부합니다. 항산화 성분도 많이 함유되어 있어 건강에 여러 이로운 효과를 제공하는과일입니다"
User :
질문 : Apple에 대해서 알려줘    
Gpt Response

특징

  • 사전 예제 필요 : 모델이 원하는 형식을 학습할 수 있도록 프롬프트에 예제를 포함시켜줘야 한다.

  • 일관된 응답 : Zero Shot에 비해 문맥을 더 잘 파악할 수 있으며 일관된 답변을 생성한다

  • 적응력 증가 : AI가 사전학습하지 못한 새로운 개념이나 패턴을 학습할 때 유용하다

  • 예시 품질의 중요도 : 예시품질이 응답결과에 영향을 끼친다.

한계점

  • 복잡한 추론이 필요한 문제는 예제만으로 부족할 수 있다.

Few Shot Prompt 실습

Few Shot Prompt 기법을 사용하여 1년 후 , 5년 후 , 10년 후 , 20년 후 의 미래계획을 각 1줄 이상작성하세요. 각 년도별 미래계획은 다음 형식에 맞춰서 출력되어야 합니다.

  • N년 후의 나는 ..........


3) Chain-of-Thought Prmopt(COT)

  • 복잡한 과제 수행을 위해 , AI에게 논리적인 사고 과정을 단계별로 설명(Chain of Thought)하도록 유도하는 기법

Few-Shot Prompt방식

질문: 길동이는 과일가게에서 사과 5개를 구매했습니다. 그 후 오렌지 5개, 아보카도 3개를 구매했습니다.
사과는 개당 2000원, 오렌지는 개당 1000원, 아보카도는 개당 5000원 이라면 총 가격은 얼마인가요?
답변 : 30000원
  • 계산을 바로 출력하지만 계산 과정이 없음.

COT 방식

질문: "어떤 가게에서 사과를 3개 사고, 오렌지를 2개 샀습니다. 
사과는 개당 2000원, 오렌지는 개당 1000원이면 총 비용은 얼마인가요? 
생각하는 과정을 단계별로 설명해주세요."
답변:  
1. 사과 3개의 가격은: 3 × 2000 = 6000원입니다.  
2. 오렌지 2개의 가격은: 2 × 1000 = 2000원입니다.  
3. 총 비용은 6000 + 2000 = 8000원입니다.  
따라서 총 비용은 **8000원입니다.**
  • 응답결과에 답을 얻기 위한 추론 과정이 포함됨

  • 단, 최신 LLM들은 이전 모델들에 비해 더묵 많은 데이터를 학습하여 자연스럽게 추론능력이 향상되었고, 추가적인 학습과정에서 COT방식을 학습하였기 때문에 응답을 생성하는 과정에서 COT가 필요하다고 판단되는 경우 자동으로 적용된다.

  • 다만, 더욱 복잡한 문제나 정밀한 논리과정이 필요한 경우에는 아직 LLM이 문제해결방법에 대해 학습하지 못했을 가능성이 높으므로 COT를 사용하는 것이 효과적

특징

  • 단계별 사고 유도 : 응답을 바로 반환하는 것이 아닌 논리적인 추론을 수행한 후 응답을 생성한다

  • 복잡한 문제 해결 : 수학, 논리, 추론 기반의 질문에 효과적

  • 정확도 향상 : Few shot, Zero shot에 비해 더 깊이 있는 답변을 생성할 수 있다.

한계점

  • 소규모 LLM모델에서는 성능이 떨어진다.(100B 이상의 모델에서 사용할 것을 권장)

  • 직접적인 사고과정을 문장으로 작성해야 하는 번거로움이 있다.

  • 프롬프트의 완성도가 응답 퀄리티에 영향을 끼친다.

COT 실습

  • 다음 문제를 해결할 수 있는 COT Propmt를 작성하시오

철수는 시속 5km로 걷고, 영희는 시속 7km로 걷습니다. 
두 사람이 같은 출발점에서 동시에 출발했을 때, 
3시간 후 두 사람 사이의 거리는 몇 km인가요? 
논리적인 사고 과정을 포함하여 답을 도출하세요

4) Zero-Shot Chain-of-Thought(ZCOT)

  • ZCOT는 기존 Zero-Shot방식에 COT기법을 자연스럽게 적용하여 AI가 사고과정을 거쳐 응답을 생성하도록 유도하는 기법입니다.

  • 즉 COT와 같이 직접 사고과정을 작성하는 예제가 없이 단순한 질문을 던지더라도 AI가 자체적으로 단계별 사고과정을 포함한 답변을 생성해줍니다.

  • Zero shot기반의 프롬프트에 "단계적으로 사고하시오" 혹은 "논리적으로답변하시오" 같은 키워드를 추가하면 ZCOT방식의 응답 프롬프트가 완성된다.

어느 마을에 살고 있는 A,B,C,D 중 한명은 거짓말쟁이다.
다음 예제를 분석하여 거짓말쟁이를 찾는 단계별 사고 과정을 설명해 주세요.

A : B또는 C가 거짓말쟁이에요
B : 전 거짓말쟁이가 아닙니다
C : A가 거짓말쟁이입니다.
D : A 또는 B가 거짓말쟁이입니다.
GPT 응답 결과

이 문제의 목표는 A, B, C, D 네 사람 중에서 누가 거짓말쟁이인지 찾아내는 것입니다. 우리는 각 사람의 말을 분석하여 모순을 찾아야 합니다. 다음은 단계별 사고 과정입니다.

1. **조건 확인**:

- A: B 또는 C가 거짓말쟁이이다.

- B: 나는 거짓말쟁이가 아니다.

- C: A가 거짓말쟁이다.

- D: A 또는 B가 거짓말쟁이이다.

2. **가정 설정**:

- 우리는 네 사람 중 한 명만 거짓말쟁이라는 조건을 기반으로 각 가능성을 검토합니다.

3. **각 사람을 거짓말쟁이라고 가정하고 모순을 찾아봅시다**:

- **A가 거짓말쟁이라고 가정**:

- A의 말이 거짓이므로 B와 C 둘 다 거짓말쟁이가 아니어야 합니다. 이때, C의 말 "A는 거짓말쟁이"가 참이 되고, D의 말 "A 또는 B가 거짓말쟁이다"가 참이므로 모순이 발생하지 않습니다. 따라서 이 가정에서는 모순이 없습니다.

- **B가 거짓말쟁이라고 가정**:

- B의 말이 거짓이면, B는 거짓말쟁이가 맞습니다. A의 말 "B 또는 C가 거짓말쟁이이다"에서 B가 거짓말쟁이인 것이 성립하므로 만족합니다. 또한, D의 말 "A 또는 B가 거짓말쟁이이다"에서 B가 거짓말쟁이이므로 역시 만족합니다. 그러나 C의 말 "A가 거짓말쟁이다"는 모순이 없습니다. 따라서 B가 거짓말쟁이일 수도 없습니다.

- **C가 거짓말쟁이라고 가정**:

- C의 말이 거짓이므로 A는 거짓말쟁이가 아닙니다. 따라서 A의 말 "B 또는 C가 거짓말쟁이이다"에서 C가 거짓말쟁이인 것이 성립합니다. 또한, D의 말 "A 또는 B가 거짓말쟁이이다"에서도 A와 B 중 누구도 거짓말쟁이가 아닌 경우인데 이것은 모순입니다.

- **D가 거짓말쟁이라고 가정**:

- D의 말 "A 또는 B가 거짓말쟁이이다"가 거짓이면, A와 B 둘 다 거짓말쟁이가 아닙니다. A의 말 "B 또는 C가 거짓말쟁이이다"에서 C가 거짓말쟁이가 되어야 하므로 모순이 있으며, 또한 C의 말 "A가 거짓말쟁이다"에서 모순이 없습니다.

4. **결론**:

- A를 거짓말쟁이로 하면 전체적으로 모순은 없습니다. 다른 경우에는 모순이 발생합니다.

- 따라서, A가 거짓말쟁이입니다.

특징

  • 간결하고 강력한 사고력 : Zero shot방식의 간결함과 COT의 논리적 사고력을 동시에 갖춤

  • AI의 사고과정을 확인 할 수 있으므로 적절한 피드백을 부여하여 응답을 개선할 수 있다.

  • 복잡한 문제에서 더 정확한 답변을 얻을 수 있다

한계점

  • 논리적인 사고과정을 즉흥적으로 사용하기 때문에 논리적인 사고과정 자체가 불완전할 수 있다.

  • 단순한 질문에 대한 응답결과도 쓸데없이 장황해질 수 있다.(비용문제)

  • Few-shot COT보다는 부정확한 응답결과를 반환한다.

Zero-Shot COT 실습

  • 한 상점에 120개의 사과가 있습니다. 이 상점은 매일 15개의 사과를 판매합니다. 7일 후에는 몇 개의 사과가 남아 있는지를 ZCOT 기법을 활용하여 구하시오.


5) Self-Consistency(자기일관성)

  • 질문에 대한 답변들 중 가장 많이 등장하는 답변이 정답에 가까울 확률이 높다는 아이디어에서 만들어진 기법.

  • 기존 COT방식이 한 번의 사고과정을 거쳐 답변을 생성한다면 , Self-Consistency는 여러번의 독립적인 사고과정을 거친 후 , 가장 많이 등장하는 답변을 논리적으로일관성있는 최종 응답으로 채택 하는 기법

Self-Consistency 적용 과정

  1. 프롬프트 준비(Temperature는 0.7 이상)

  2. 같은 프롬프트를 최소 5 ~ 10번 실행

  3. 각 실행에서 얻은 답변을 기록

  4. 가장 많이 등장하는 답변을 채택

당신은 논리적 사고 과정을 단계별로 설명하는 AI입니다.

어느 마을에 살고 있는 A,B,C,D 중 한 명은 거짓말쟁이입니다.  
다음 예제를 분석하여 거짓말쟁이를 찾는 단계별 사고 과정을 설명해 주세요.  

A : B 또는 C가 거짓말쟁이에요  
B : 전 거짓말쟁이가 아닙니다  
C : A가 거짓말쟁이입니다.  
D : A 또는 B가 거짓말쟁이입니다.

논리적인 추론 과정을 거쳐 최종 답을 도출하세요.

특징

  • 응답 퀄리티 향상 : 단순 COT방식은 한 번의 추론과정만 거치기 때문에 실수할 가능성이 높으나, Self-Consistency는 여러번의 사고 과정을 거치므로 논리적으로 일관성 있는 답변을 채택할 가능성을 높여줌.

  • 정확한 정답 도출을 위해 여러 접근 방식으로 테스트하고자 할 때 유용하다.

한계점

  • 비용 문제 : 복잡한 추론과정을 거치므로 답변 하나를 생성하는데 비용이 많이 발생함

  • 프롬프트의 퀄리티에 의해 부정확한 응답이 발생할 가능성 존재

  • 복잡한 추론을 위해선 많은 양의 훈련데이터가 필요하므로 소규모 LLM에서는 성능이 저하된다.

정리


  1. 각 패턴의 동작방식에 대한 예시 이미지 추가하기

  2. 각 패턴을 적용 했을 떄의 응답퀄리티ㄱ 증가된 증거자료도 추가하기.

  3. 그 외, 요즘에는 기본이 되어버린 역할부여, 대화형 프롬프트같은 자료도 추가하기

  4. 최종정리

프롬프트 엔지니어링과 관련된 기술정리 블로그 참조
과일 apple정보를 얻고 싶다면?
Zero Shot Prompt에 COT 자동 적용