필승! 강화도에서 해병대 장교로 국방의 의무를 다하고, 현재는 대학원에서 인공지능을 공부하고 있는 규씨입니다.
단순히 읽고 이해하는 것만으로는 기억에 오래 남지 않는다는 것을 깨닫고, 공부한 내용을 정리하고 공유하면서 더 오래 기억하기 위해 블로그를 시작하게 되었습니다.
읽으시면서 틀리거나 제가 잘못 이해한 부분 지적해 주시면 정말 감사하겠습니다. 함께 배우고 성장하는 공간이 되기를 바랍니다. 감사합니다!
먼저 이 글은 책을 읽으면서 실제로 제가 연구에 사용 할 법한 내용들을 정리하기 위해 작성하였습니다. 참고해주시면 감사하겠습니다.
프롬프트 엔지니어링은 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). 최고의 프롬프트 엔지니어링 강의. 리코맨드.
'딥러닝' 카테고리의 다른 글
양자와 양자화: 기본 개념부터 딥러닝까지의 적용 (0) | 2024.07.25 |
---|---|
[비전공자도 이해하는 트랜스포머] 3. Multi-Head Attention (0) | 2024.06.26 |
[비전공자도 이해하는 트랜스포머] 2. Self-Attention (1) | 2024.06.26 |
[비전공자도 이해하는 트랜스포머] 1. Scaled Dot-Product Attention (0) | 2024.06.26 |