프롬프트 엔지니어링

필승! 강화도에서 해병대 장교로 국방의 의무를 다하고, 현재는 대학원에서 인공지능을 공부하고 있는 규씨입니다.


단순히 읽고 이해하는 것만으로는 기억에 오래 남지 않는다는 것을 깨닫고, 공부한 내용을 정리하고 공유하면서 더 오래 기억하기 위해 블로그를 시작하게 되었습니다.


읽으시면서 틀리거나 제가 잘못 이해한 부분 지적해 주시면 정말 감사하겠습니다.  함께 배우고 성장하는 공간이 되기를 바랍니다. 감사합니다!


먼저 이 글은 책을 읽으면서 실제로 제가 연구에 사용 할 법한 내용들을 정리하기 위해 작성하였습니다. 참고해주시면 감사하겠습니다.

 

프롬프트 엔지니어링은 LLM과 효과적으로 소통하기 위해 정확하고 명료한 질문이나 지시를 제공하는 기술로 모델이 더 정확한 답변과 유용한 결과를 도출하도록 합니다. 

 

 

프롬프트 엔지니어링의 대표적인 5가지 방법

  • 제로샷 프롬프팅(Zero-shot): LLM에 아무런 데이터나 에시를 주지 않고 특정 작업 수행
  • 원샷 프롬프팅(One-shot): LLM에 특정 명령을 내릴때 실행 방법에 대한 예시 한개를 제공
  • 퓨샷 프롬프팅(Few-shot): LLM에 특정 명령을 내릴때 실행 방법에 대한 예시 2~3개에서 수십개 제공
  • CoT(Chain of Thought): 문제 해결 과정에서 따라야 할 생각의 단계나 논리적 순서 제시
  • 제로샷 CoT(Zero-shot Chain of Thought): CoT와 비슷한 방식이지만 구체적인 가이드는 제공하지 않음
    예: 천천히 생각해보세요. 단계별로 생각해보세요. 

 

좋은 프롬프트 만들기

  • 지시문을 명확히 함
  • 적절한 예시 제공
  • 모델에 생각할 시간을 줌
  • 작업을 하위 작업으로 분해
  • 적절한 컨텍스트 제공
  • 프롬프트 엔지니어링 기법이 작동하지 않는 상황도 항상 고려
  • 프롬프트를 구조하여 작성

 

프롬프트 디자인 프레임워크

  • 역할 정의: AI의 페르소나 또는 역할 정의
    예: 당신은 법률전문가 입니다. 법률관련 질문에 답하십시오.
  • 대상 명시: 응답의 대상이 되는 사용자나 그룹 명시
    예: 초등학생에게 태양계의 행성에 대해서 설명해 주세요.
  • 지식과 정보 제공: 질문과 관련하여 참고할 만한 지식과 정보를 DB나 검색 엔진 등에서 가져와 삽입
  • 수행해야 할 작업 및 목표 명시: 수행해야 하는 특정 작업이나 목표 설정
    예: 500 단어내로 자기소개서를 작성해주세요. 서론, 본론, 결론을 나누어 작성하세요. 경험, 성과, 개인적 성장 등 구체적 사례를 들어 설명력을 높이세요.
  • 정책 및 규칙, 스타일 가이드, 제약 사항 설정
    예: 성격의 긍정적인 측면만을 강조하며 작성해주세요. 유머러스한 톤으로 작성해주세요. 한페이지 내로 작성해주세요
  • 형식 및 구조 설정
    예: JSON 형식으로 작성해주세요.
  • 구체적인 예시 제공

 

프롬프트 디자인 구체적 예시

역할 정의 및 대상 명시
당신은 친근한 초등학교 영어 선생님입니다.


수행해야 할 작업 및 목표 명시
다음 내용을 참고하여 학생들에게 나폴레옹 보나파르트에 대해 설명해주세요. 
지식과 정보 제공

“”” 나폴레옹 보나파르트는 프랑스 혁명 이후 권력을 잡고, 유럽 대부분을 정복한 프랑스의 황제였습니다. “””

정책 및 규칙, 스타일 가이드, 제약 사항 설정
다음 규칙에 따라 답변을 작성해주세요.
- 친근하고 교육적인 톤으로 작성
- 단순하고 이해하기 쉬운 영어로 설명
- 3분 안에 읽을 수 있는 길이로 작성

형식 및 구조 설정, 구체적인 예시 제공
결과 포맷: 
User: 나폴레옹이 누구야?
Assistant: 나폴레옹 보나파르트는 18세기 말과 19세기 초에 프랑스를 지배한 역사적인 인물이에요.

 

 

부록: 프롬프팅 확장 테크닉

  • Expert Prompting: 프롬프트 디자인에서 역할을 설정하는 것과 동일한 방법으로 LLM에게 전문가로서 응답하도록 요청하는 방법
  • According to Wikipedia: 단순히 ‘위키피디아를 참조해서 답하세요’라고 하는 것만으로도 높은 성능을 얻을 수 있는 기법
  • Generated Knowledge Prompting: 주어진 질문에 대한 관련 지식을 먼저 생성한 다음, 생성한 지식을 바탕으로 답변을 생성하는 기법
  • Retrieval Augmented Generation: 답변을 생성하기 전에 사용자의 요청과 관련된 외부 검색 컴포넌트에서 검색한 후 해당 내용을 프롬프트에 컨텍스트로 제공하여 결과를 생성하는 기법

 

부록: 토크나이저(Tokenizer)

보통의 경우 영어 문서에 비해 한글 문서는 대략 4~5배 정도 더 많은 토큰을 사용

대다수의 LLM은 한글 토큰 사용이 비효율적이므로 다음과 같은 전략으로 토큰 사용 최적화 추천

  • 프롬프트를 영어로 작성: 프롬프트를 영어로 작성하면 사용하는 토큰의 수를 줄일 수 있고, 출력 품질이나 추론 성능이 향상되는 효과도 있음
  • 입출력하기 전에 영어로 번역하여 사용: 프롬프트에 포함시킬 컨텍스트를 영어로 번여, 영어로 출력된 내용을 다시 한글로 번역

 

Reference: 김진중. (2024). 최고의 프롬프트 엔지니어링 강의. 리코맨드.