🐯
경민민 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
  • 1) Tree Of Thought(TOT)
  • TOT의 사고과정
  • 2) Prompt Chaing
  • Prompt Chaing 실습
  • 3) Automatic Prompt Enginner(APE)
  • APE 실습
  • 4) Meta Prompting
  • Meta Prompting 실습
  • 5) Generate Knowledge
  • Generate Knowlnage 실습
  1. LLM 서비스
  2. 2장 프롬프트 엔지니어링

고급 프롬프트 엔지니어링 태크닉

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

Last updated 3 months ago

  • 비용을 아끼기 위해 GptPlayGround에서 실습.

1) Tree Of Thought(TOT)

  • TOT는 문제를 해결하는 과정에서 여러가지 사고 경로(Branch)를 확장하고 탐색해 나가면서 최적의 응답을 생성하도록 유도하는 기법입니다.

  • AI가 하나의 문제에 대하여 여러 개의 논리적인 추론 경로를 동시에 고려하면서 가장 일관성 있는 답변을 점진적으로 찾아나가는 구조라고 할 수 있습니다.

  • 선형적인 방식으로 응답결과를 생성하는 COT와 비교하면 TOT는 응답을 추론하는 과정에서 더 적절한 응답을 위해 회귀를 한다.

TOT의 사고과정

  1. 생각 분해하기(Thought Decomposition) - 하나의 문제를 여러개의 작은 하위 문제로 나눈다.

  2. 생각 생성하기(Thought Generator) - 가능한 모든 추론 경로(Branch)를 생성

  3. 생각 평가하기(Thought Evaluator) - 각 Branch가 논리적으로 맞는지 검증

  4. 최적의 응답 평가(Search Algorithm) - 가장 적절한 응답을 선택

예시 프롬프트

당신은 논리 퍼즐을 해결하는 AI입니다. 
아래의 문제를 단계적으로 분석하세요.

### 문제 ###
A, B, C, D 네 명이 있습니다. 이들 중 단 한 명만이 거짓말쟁이이며, 나머지는 항상 진실을 말합니다.
각 사람의 발언은 다음과 같습니다.

A: "B 또는 C가 거짓말쟁이입니다."  
B: "나는 거짓말쟁이가 아닙니다."  
C: "A가 거짓말쟁이입니다."  
D: "A 또는 B가 거짓말쟁이입니다."  

### 해결 방식 ###
1. **Step 1: 생각 분해하기 (Thought Decomposition)**  
   - 문제를 해결하기 위해 필요한 주요 단계를 나누고, 어떤 정보가 필요한지 정리하세요.  

2. **Step 2: 생각 생성하기 (Thought Generator)**  
   - 가능한 모든 사고 경로(Branch)를 생성하세요.  
   - 즉, A가 거짓말쟁이일 경우, B가 거짓말쟁이일 경우, C가 거짓말쟁이일 경우, D가 거짓말쟁이일 경우를 각각 고려하여 분석하세요.  

3. **Step 3: 생각 평가하기 (State Evaluator)**  
   - 각 사고 경로에서 모순이 발생하는지 검토하세요.  
   - 만약 어떤 경우에서 논리적 모순이 발생한다면, 해당 경우를 제거하세요.  

4. **Step 4: 검색 알고리즘 (Search Algorithm)**  
   - 가장 논리적으로 일관된 결과를 선택하고, 최종 답을 도출하세요.  
   - 선택한 답을 단계별로 설명하세요.  

모든 과정을 자세히 서술하고, 논리적인 추론 과정을 명확히 표현하세요.  

한계

  • 응답을 반환하는데 많은 연산과정이 필요하므로 수행시간과 비용이 많이 발생한다.

2) Prompt Chaing

  • 복잡한 하나의 문제를 작은 문제로 분할하여 해결하기 위한 방법이다

  • 하나의 프롬프트에서 생성된 응답을 다음 프롬프트의 입력으로 사용하여 , 점진적으로 응답내용을 고도화 시키는 방법.

  • 각 단계에서 AI가 생성한 출력을 활용하여 더 정교한 답을 도출할 수 있다.

Prompt Chaing 동작방식

  1. 첫번째 prompt를 바탕으로 ai에게 요청

  2. ai는 응답데이터1을 반환

  3. 두번째 프롬프트는 응답데이터1과 두번째 prompt 내용을 합쳐서 ai에게 요청

  4. ai는 응답데이터2를 반환

  5. 세번째 프롬프트는 응답데이터1,2와 프롬프트 내용을 합쳐서 ai에게 요청

  6. ai는 최종 응답 반환.

Prompt Chaing 실습

  1. 복잡한 이슈 상황 가정

    1. 사용자가 투자 성향을 입력하면, AI가 적절한 투자전략을 추천하는 시스템을 만든다고 가정

  2. 투자성향 입력용 프롬프트와, 투자전략 추천 프롬프트 작성

System
당신은 투자 전문가이며, 사용자의 투자 성향을 분석하고 최적의 투자 전략을 추천하는 AI입니다.  
투자자의 성향을 기반으로 논리적으로 분석하여, 맞춤형 포트폴리오를 설계하세요.

------------------------------------------------------------------------------------
USER :  
사용자의 투자 성향을 분석하세요.

사용자의 입력:  
- 투자 기간: 장기 (5년 이상)  
- 리스크 선호도: 중간  
- 관심 자산: 주식, 암호화폐  
- 투자 목표: 안정적인 성장  

이 정보를 바탕으로, 사용자의 투자 스타일을 한 문장으로 요약하세요.

-------------------------------------------------------------------------------------
예상 응답 결과 :
사용자는 '중위험 장기 투자자'이며, 주식과 암호화폐를 통한 안정적인 성장을 추구합니다.
USER : 
다음 투자 스타일을 기반으로, 적절한 투자 전략을 추천하세요.

투자 스타일: 1번 예상 응답 결과

이에 적합한 투자 전략을 설명하고, 포트폴리오 예시를 제시하세요.
  1. 투자성향 입력용 프롬프트 실행

  2. 투자성향 입력용 프롬프트의 결과를 바탕으로 투자전략 프롬프트 실행


3) Automatic Prompt Enginner(APE)

  • 여러 LLM을 통해 AI가 자동으로 프롬프트를 생성하고 최적화하여 , 효과적인 응답을 제공하는 기법.

  • 여태까지의 Prompt Engineering은 사람이 직접 프롬프트를 설계하고 최적화하였지만, APE는 AI가 직접 최적화한 프롬프트를 설계하고 최적화 합니다.

  • ZCOT방식보다 정확도가 높은 응답을 생성한다.

APE 동작방식

  1. Proposal(제안)

    1. Inference Models LLM에 다양한 응답을 제공한다.

  2. Scoring(점수매기기)

    1. Scoring Models LLM에 의해 각 프롬프트가 적절한지 평가한다.

  3. Log(기록)

    1. 프롬프트마다 점수를 기록한다.

  4. High Score Canidates(후보군 추출)

    1. 프롬프트들중 점수가 높은 프롬프트는 유지하고, 낮은 점수를 받은 프롬프트는 제거된다.

  5. Similar Candiates(비슷한 후보군 추출)

    1. Resampling Models LLM에 의해 전달받은 프롬프트의 문맥을 유지하면서 다른 단어로 이루어진 프롬프트들을 생성한다.

    2. write the antonym(반의어) of the word --> write the opposite(반대) of the word

    3. Resampling Models이 응답한 프롬프트는 Scoring Models에 의해 다시한번 평가를 받는다.

    4. Similar Candiates은 APE과정에 있어서 필수는 아니기 때문에 생략이 가능하다.

  6. 최종 프롬프트 선택

    1. 최종적으로 점수가 가장 높은 write the opposite of the word given 프롬프트가 최종 선택된다.

APE 실습

  • 실제 구현 시에는 여러 개의 LLM을 Prompt Chaing시켜주어야 하지만, 실습단계에서는 1개의 LLM로 작업한다.

1. Inference Models LLM 구현

  • Inference Models LLM은 사용자의 프롬프트를 바탕으로 여러 개의 대체 프롬프트를 생성해줘야함

system : 
당신은 Automatic Prompt Engineering(APE)의 Inference Model입니다.  
사용자의 질문을 분석하고, 동일한 의미를 가지면서 다양한 표현을 사용하는 대체 프롬프트를 생성하세요.  
최소 5개 이상의 대체 프롬프트를 제시하세요.

2. Scoring Models LLM 구현

  • Scoring Models LLM은 1번 과정에서 응답받은 프롬프트를 평가할 수 있는 모델.

  • 평가기준은 Likelihood에 에 기반하여 점수를 부여

system : 
당신은 Automatic Prompt Engineering(APE)의 Scoring Model입니다.  
사용자가 제공한 여러 개의 프롬프트를 분석하고, 각 프롬프트의 품질을 평가하세요.  
각 프롬프트에 Log Likelihood 점수를 부여하고, 가장 높은 점수를 받은 프롬프트를 선택하세요.

3. Resampling Models LLM 구현

  • Resampling Models LLM은 2번과정에서 평가된 프롬프트중 높은 점수군을 가진 모델을 전달받은 후 동일한 의미를 가진 여러 샘플 프롬프트를 생성하는 모델

system :
당신은 Automatic Prompt Engineering(APE)의 Resampling Model입니다.  
사용자가 제공한 프롬프트의 의미를 유지하면서, 다양한 형태로 변형된 새로운 프롬프트를 생성하세요.  
최소 3개 이상의 변형된 프롬프트를 제공하세요.

4) Meta Prompting

  • Meta Prompting은 AI가 스스로 프롬프트를 개선하도록 유도하는 기법으로 , 특정 응답을 얻는데 초점을 맞추는 것이 아닌 더 명확한 프롬프트를 생성 하는 것에 초첨을 맞춘 기법이다.

  • 재귀적인 자기 피드백을 통해 점진적으로 프롬프트를 개선해 나간다.

  • Few-Shot Prompting과 비교하면 구체적인 예시 없이 AI가 더 응답하기 쉬운 구조의 프롬프트를 설계 할 수 있다.

Meta Prompting 동작방식

  1. 초기 프롬프트 제공 (Initial Prompt)

    1. 사용자가 ai에게 특정작업을 수행하도록 초기 프롬프트를 제공

  2. 합성 데이터 생성 (Synthetic Data Generation)

    1. ai가 프롬프트를 테스트하기 위해 합성데이터를 생성함.

  3. 주석 달기 (Minimalist Tagging)

    1. 사용자 혹은 ai가 생성된 데이터에 주석을 달아 성능을 평가함

  4. 프롬프트 최적화 (Prompt Optimization)

    1. ai가 프롬프트의 성능을 평가한 후 더 나음 프롬프트를 생성하도록 성능 최적화

    2. 기존 프롬프트를 개선하는 과정에서 LLM이 새로운 프롬프트를 추천

  5. 재귀학습 (Iterative Process)

    1. 1-4번 과정을 정지기준을 만족할 때 까지 반복

    2. 즉, 프롬프트 성능이 개선되면서 최적의 프롬프트를 찾을 때 까지 계속 진행된다.

  6. 최적화된 프롬프트 반환 (Calibrated Prompt)

    1. AI가 최적화된 프롬프트를 생성하여 제공

Meta Prompting 실습

  1. 초기 프롬프트 제공 (Initial Prompt)

system:
사용자의 프롬프트를 분석하고, **더 명확하고 효과적인 프롬프트로 변형하는 과정**을 수행하세요.  
각 단계에서 개선된 프롬프트를 제안하고, 이를 최적화하여 반복적인 개선을 진행하세요.

user:
"기술 블로그 글을 써줘."
  1. 재귀학습 (Iterative Process)

이전 프롬프트를 분석하고, 더 명확하고 최적화된 프롬프트를 다시 생성해줘.
  1. 최적화된 프롬프트 반환 (Calibrated Prompt)

위 프롬프트들의 품질을 평가하고, 최적의 프롬프트를 선택해줘.

5) Generate Knowledge

  • AI가 사전 학습된 데이터 외에 주어진 문제 해결을 위한 지식을 스스로 생성(Generate Knowlnage)하여 답변하도록 유도하는 기법

  • AI의 추론 능력을 향상 시키기 위한 방법으로 환각 현상을 완화하고자 사용한다.

Generate Knowlnage 동작방식

  1. 지식 생성(knowledge Generation)

    1. 사용자가 ai에게 질문(Question)을 입력하면 AI는 해당 질문을 기반으로 PLM(Pretrained Language Model)이 관련된 지식을 여러 개 생성(Knowledge1, Knowledge2)한다.

    2. PLM이 적절한 지식을 생성하기 위해서는 프롬프트에 예제 및 시연이 포함되어 있는 것이 좋다.

  2. 지식 통합(knowledge Integration)

    1. 생성된 여러 개의 지식을 평가하고 통합(Integration)한다.

  3. 답변 생성(Answer Generation)

    1. 통합된 지식을 바탕으로 최종 답변을 생성한다.

Generate Knowlnage 실습

  1. 미래 경제 예측

현재 글로벌 경제 상황을 고려할 때, 2040년까지 가장 유망한 산업 3가지를 예측하세요.  
각 산업이 성장할 이유와, 현재 존재하는 경제적 신호를 기반으로 논리적으로 분석하세요.
  1. 과학 이론 생성

당신은 미래의 과학자로서 새로운 물리학 이론을 제안해야 합니다.  
현재의 물리학 이론을 기반으로, 빛보다 빠르게 이동할 수 있는 새로운 방법을 가설적으로 생성하세요.  
이 이론이 왜 논리적으로 가능한지 설명하고, 실험적 검증 방법도 제안하세요
  • 질문과 연관 있는 최신 논문 데이터 및 연구 결과를 추가하면 더욱 유용한 응답 결과를 반환 받을 수 있음.


  1. 테크닉을 3단계로 구분하고나서 부터, 테크닉을 배우는 순서에 대해서 다시한번 고민해봐야 할것 같음

  2. 동장방식에 숫자 추가하기.

  3. 최종 정리 추가하기

출처 :
출처 :
https://www.semanticscholar.org/paper/Tree-of-Thoughts%3A-Deliberate-Problem-Solving-with-Yao-Yu/2f3822eb380b5e753a6d579f31dfc3ec4c4a0820
https://www.marktechpost.com/2024/03/04/automated-prompt-engineering-leveraging-synthetic-data-and-meta-prompts-for-enhanced-llm-performance/
https://www.aporia.com/learn/prompt-engineering/