🐯
경민민 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. 프롬프트
  • 1-1. 프롬프트의 기본 요소
  • 1-2. 프롬프트 작성 팁
  • 1-3. 간단 프롬프트 실습
  • 2. 프롬프트 엔지니어링(Prompot Engineering)
  • 2-1. 프롬프트 엔지니어링이 필요한 이유
  • 2-2. 프롬프트 엔지니어
  1. LLM 서비스
  2. 2장 프롬프트 엔지니어링

프롬프트와 프롬프트 엔지니어링

Previous2장 프롬프트 엔지니어링NextGPT PlayGround

Last updated 2 months ago

Intro

지난 장에서는 LLM이란 무엇인지. LLM의 특징이 무엇인지 알아보았습니다. 이번 장에서는 LLM과 소통하기 위한 프롬프트의 개념과 프롬프트를 설계하기위한 방법론들에 대하여 알아보도록 하겠습니다.

1. 프롬프트

프롬프트는 LLM모델과 유저간의 대화를 하는 창입니다. 유저는 프롬프트를 통해 AI모델과 대화를 하고 원하는 응답결과를 반환받습니다.

다만, 내가 작성하는 프롬프트의 설계방법에 따라 같은 내용을 질문하더라도 훨씬 높은 퀄리티의 응답결과를 얻어 낼 수 있습니다. 이번 장에서는 효율적인 응답결과를 얻어내기 위한 프롬프트 설계 방법과, 이론들에 대해서 배워보도록 하겠습니다.

1-1. 프롬프트의 기본 요소

1. 문맥(Context) : LLM모델이 올바른 응답을 생성할 수 있는 배경지식. 명확한 배경지식을 추가할 수록 환각현상을 방지할 수 있음.

2. 지시(Instructions) : LLM 모델이 수행할 작업. 명확한 지시내용을 작성해야 제대로된 응답을 받을 수 있음.

3. 입력 데이터(Input Data) : LLM이 응답에 참고할 데이터

4. 출력지시문(Output Indicator) : LLM의 응답 형식(JSON/Table/MarkDown/List...)

GPT Response

{

"탈중앙화": "비트코인은 은행이나 정부 같은 중앙 기관이 없이 작동해요. 모든 거래는 많은 사람들이 공유하는 네트워크에서 직접 이루어져요. 마치 친구끼리 돈을 주고받을 때 은행을 거치지 않는 것과 비슷해요.",

"한정된 공급량": "비트코인은 2,100만 개만 만들어질 수 있어요. 더 이상 추가로 만들 수 없기 때문에 금과 비슷하게 희소성이 있어요. 이 때문에 시간이 지나도 가치를 유지할 가능성이 높아요."

, "보안": "비트코인의 거래 기록은 블록체인이라는 특별한 장부에 저장돼요. 이 장부는 많은 사람들이 함께 관리하기 때문에 쉽게 조작할 수 없어요. 즉, 매우 안전하게 보호되는 시스템이에요." }

  • 프롬프트의 기본요소를 사용하는 것 만으로도 프롬프트의 퀄리티를 높일 수 있음.

1-2. 프롬프트 작성 팁

  1. 최신 버전의 모델을 사용한다.

    1. 최신 모델일수록 이전 버전의 모델에 비해 더 많은 양의 데이터를 학습한 것

    2. 단, 모델의 응답속도와 가격을 비교하여 합리적인 모델을 선택하는 것도 중요

  2. 모델이 해야할 내용을 명확하게 지시하자.

    1. 한국어를 사용하여 프롬프트를 작성할 때는 여러 의미로 해석될 수 있는 단어사용을 지양 한다.

    2. 쓰다 X 작성해 O

    3. 적다 X 나열해 O

  3. 단문 중심의 간결한 문장 사용

    1. LLM은 문장이 길고 복잡할 수록 핵심을 파악하지 못한다. 따라서 최대한 짧고 간결한 문장을 사용하는게 효과적이다.

    2. 질문하고자 하는 내용이 3가지가 있다면 이를 한번에 물어보지 말고, 한번에 1가지만 물어보는 것을 권장.(사람도 답변하기 힘들게 물어보지 말것)

    3. LLM이 해석하기 힘든 프롬프트 : (BAD)
      블록체인 기술이 어떻게 작동하는지 알고 싶고, 
      특히 비트코인과 이더리움의 차이점을 설명해 주면서, 
      그것이 금융 시스템에 어떤 영향을 미치는지 간단하게 정리해 줄 수 있어?
    4. LLM이 해석하기 쉬운 프롬프트 : (GOOD)
      1. 블록체인 기술의 작동 방식을 설명해 줘.
      2. 비트코인과 이더리움의 차이점을 알려줘.
      3. 블록체인이 금융 시스템에 미치는 영향을 간단히 정리해 줘.
  4. 하지말아야할것 보다 해야할 것을 지시한다.

    1. 'xxx는 하지마세요'와 같은 부정적 키워드 보단 'xx 하세요'와 같은 긍정적 키워드를 사용

    2. LLM은 부정정키워드도 때론 강조하여 표시할 때가 있음.

  5. LLM이 해석하기 쉬운 구조로 만들기

    1. Markdown, 파이썬 , xml tag를 활용하여 구조화

    2. # 제목1 (# == <h1>)
      ## 제목2 (## == <h2>)
      ### 제목3 (### == <h3>)

1-3. 간단 프롬프트 실습

프롬프트의 기본 요소를 포함하여 GPT에게 LLM의 특징에 대하여 질문하는 프롬프트를 설계하시오.

  • 조건 3) 응답데이터는 Table형식의 데이터로 응답 받을 것 EX) 표형식 데이터 | 특징 | 내용 | |------------------------------------------------| | 특징1 | 내용 | | 특징n | 내용 |

GPT Response

2. 프롬프트 엔지니어링(Prompot Engineering)

  • Prompt + Engineering의 합성어로 직역하면 프롬프트 공학, 프롬프트 제조 과정을 의미

프롬프트 엔지니어링이란 LLM모델을 통해 원하는 답변을 얻을 수 있도록 프롬프트를 최적화 하여 설계하는 기술을 의미합니다.

GPT와 같은 LLM을 사용했을 때 부정확한 답변을 응답 받는경우가 종종 있으셨을 겁니다. 이는 LLM이 학습한 데이터의 문제일 수도 있지만 대부분의 경우는 사용자의 요청내용(Prompt)이 응답데이터를 얻기에 부정확 했기 때문입니다.

2-1. 프롬프트 엔지니어링이 필요한 이유

제대로 설계되지 않은 프롬프트는 LLM에게 혼동을 초래하고 잘못된 응답을 반환할 가능성이 높습니다. 이를 방지하기 위해서는 적절히 설계된 프롬프트가 필요하고 이를 위해선 프롬프트 엔지니어링 기술이 필요합니다. 프롬프트 엔지니어링을 활용하면 다음과 같은 장점이 있습니다.

  1. LLM모델의 성능을 극대화하고, 출력 결과물을 제어하여 사용자에게 높은 만족도를 부여할 수 있다

  2. LLM이 문맥의 패턴을 더욱 정확하게 이해하여 환각현상 및 편향을 줄이고 관련성 높은 응답결과를 받을 수 있다.

  3. 효율적인 템플릿 설계로 모델비를 절약할 수 있음

  4. 수학과 같은 LLM이 못하는 기능을 강화할 수 있음.

2-2. 프롬프트 엔지니어

프롬프트를 정교하게 설계하는 기술을 전문적으로 다루는 직종을 프롬프트 엔지니어라고 부릅니다. 최근 국내에서도 프롬프트 엔지니어를 채용하는 회사가 증가하는 추세입니다. 프롬프트 엔지니어가 맡게될 업무는 다음과 같습니다.

Prompt Engineer 업무


  1. 프롬프트 엔지니어를 끝으로 흐름에 대한 마무리가 애매함. 프롬프트 엔지니어링의 중요성을 좀더 강조할것.

  2. 응답출력 XML, JSON형식으로 받기 실행 가능하도록 소스코드 추가

조건 1 ) 문맥은 1장을 참고하여 작성할것

조건 2) 입력데이터는 1장 LLM의 이해에서를 이용하여 작성할 것.

GPT사용자들의 불만 사유(출처 : )

Gpt사용자들의 대응 방식(출처: 출처 : )

https://www.donga.com/news/Opinion/article/all/20240515/124949112/1
https://www.donga.com/news/Opinion/article/all/20240515/124949112/1
출처 :
출처 :
https://productmindset.substack.com/p/prompt-engineering-explained
https://t2informatik.de/en/smartpedia/prompt-engineering/
LLM
LLM의 특징과 한계