프롬프트란?
- 프롬프트는 모델에 입력되는 명령문
- 사용자가 모델에게 주는 지시 사항
- 프롬프트에는 사용자가 원하는 요청 사항이 들어가야 함
프롬프트 엔지니어링이란?
- 프롬프트 엔지니어링은 모델에 입력하는 프롬프트를 설계하고 개발하는 행위
- 프롬프트 엔지니어링을 통해 모델의 성능, 정확성, 유용성을 높이는 것이 목표
- 단순히 프롬프트를 바꾸는 것만으로도 더 좋은 결과물을 얻을 수 있음
프롬프트 엔지니어링 예시
- 위처럼 질문 프롬프트에 따라 다르게 답변이 출력
- 프롬프트 활용에 따라 본인이 필요한 내용, 형태의 정보를 얻는 것이 가능
프롬프트 작성 시 주의 사항
명확하고 구체적인 지시를 작성
- 추상적이고 애매한 명령보다 명확하고 구체적인 지시가 효과적
- 마크다운이나 XML을 활용해 강조하고 싶은 부분을 강조하면 AI 모델이 해당 부분이 중요 요소라는 것을 알 수 있음
복잡한 작업은 단계별로 지시
- 한 번에 해결하기 어려운 작업은 여러 차례에 걸쳐 처리
- 체이닝을 이용해 단순한 문제를 해결하는 프롬프트를 여러 개 결합
부정형보다는 긍정형 지시어 사용
- 하지 않아야 할 것을 지정하기보다는 해야 할 것을 지정해 주는 것이 효과적
- ex. “어려운 단어를 사용하지 말아줘” → “쉬운 단어로 설명해 줘”
구조화된 프롬프트 사용
- 프롬프트를 작성할 때 모든 요소를 줄글로 작성하기보다는 구조화하는 것이 효과적
- ex. 넌 인공지능 박사 학위를 가진 대학교 교수야. Attention is all you need 논문을 개요, 기능별 설명, 성능 평가, 추가 실험의 부분으로 요약해 주고 그걸 JSON 형태로 출력해 줘 대신 아래와 같이 작성
### Role
- 당신은 인공지능 박사 학위를 가진 대학교 교수입니다.
### Objective
- Attention is all you need 논문 요약
- 논문을 개요, 기능별 설명, 성능 평가, 추가 실험으로 나눠서 요약
### OutputFormat
- 개요, 기능 별 설명, 성능 평가, 추가 실험을 각각 key로 사용하는 JSON 형태로 출력
충분한 배경 정보 제공
- LLM이 질문을 잘 이해할 수 있도록 충분한 배경 정보를 제공하는 것이 효과적
참고 사항을 지시 사항보다 먼저 배치
- LLM 모델은 글을 앞에서부터 해석하는 경향이 강함
- 따라서 모델이 참고 사항을 바탕으로 지시 사항을 수행할 수 있도록 참고 사항을 지시 사항보다 먼저 배치
- ex. “논문을 추천해 줘. LLM 관련 리서치를 진행할 예정이야” → “LLM 관련 리서치를 진행할 예정이야. 논문을 추천해 줘”
프롬프트 엔지니어링의 주요 요소
요청 사항
- 모델에게 요청할 사항
- 요청은 명확하고 상세해야 함
- ex. "논문을 요약해 줘"
정보 입력
- 모델에게 전달할 정보
- 요청할 사항과 관련된 정보를 전달하여 원하는 결과물에 가까운 답을 얻을 수 있음
- ex."요약할 논문은 Attention Is All You Need야"
역할 지정
- 모델에게 가상의 역할을 지정하는 것
- 특정 업무를 수행할 때 그에 맞는 역할을 지정해 주면 더 좋은 결과를 얻을 확률이 높아짐
- 해당 문제를 해결할 수 있을 만한 역량이나 그런 역량을 가지고 있을 만한 직업을 언급
- ex."당신은 인공지능 학과 교수입니다"
어조 지정
- 원하는 말투나 어휘 수준 지정 가능
- ex. “전문 용어를 사용하지 않고 비전공자도 이해할 수 있을 만한 단어들로 설명해줘”
형식 지정
- 프롬프트에 원하는 템플릿의 형태를 입력해 그에 맞는 출력물을 얻을 수 있음
- ex. "개요, 본문, 요약 형태로 출력"
출력 포맷 지정
- 프롬프트에 원하는 출력 포맷을 지정하고 원하는 형태로 답변을 받을 수 있음
- ex. "JSON 포맷으로 출력"
예시 추가
- 모델에게 질문과 응답의 예시를 제시하면 원하는 결과에 더 가까운 답을 얻을 수 있음
- 이렇게 예시를 통해 LLM을 간단하게 학습 시키는 것을 few-shot learning이라고 함
- 단, 예시도 토큰 수에 포함이 되므로 성능과 비용의 trade-off가 발생