Be clear, direct, and detailed
- 프롬프트를 작성할때 명확하고 구체적으로 작성해야한다.
- 프롬프트의 절대적인룰 : 프롬프트를 동료에게 보여줬을 때 "나에게 질문 없이" 일을 할 수 있는가?
(1) Be clear, direct
- 해야할 작업을 구체적으로 명시
- 작업 결과 형식 설명
- 알고 있다고 가정하지 않기
- 꼭 포함되어야 할 내용과 규칙 명시
- 모델이 하지 말아야 할 것 명시
(2) Be detailed
- 풍부한 맥락 정보 제공
- 작업의 목표 명시
- 타겟 대상 명시
- 작업의 맥락과 배경 정보 제공
Use Examples
- 프롬프트에 작업을 수행하는 예시를 추가하는 방법
- 이런 예시는 AI모델이 작업을 보다 더 잘 이해하도록 돕는다
- 설명하기 어려운 미묘한 뉘앙스 까지 포착할 수 있다
- 복잡한 작업의 예시의 개수는 수십개까지도 쓸 수 있다
어떤 예시를 사용해야 할까?
- 관련성 : 실제 작업과 같거나 관련성이 큰 예시를 사용해야 함
- 다양성 : 다양한 케이스를 다뤄야 하고 Edge Case를 고려해야 함
- 명확성 : 예시는 프롬프트의 다른 지시들과 섞이지 않게 구별해줘야 함
--> 관련있고 다양하고 명확한 예시를 들자
Crafting Effective Example Tips
- AI 모델에게 예시를 생성해 달라고 하기
- 예시의 수는 케이스마다 균현을 이뤄야 함
- 간단한 예시부터 복잡한 예시까지 모두 넣어주면 좋음
- Edge Case 예시도 넣어주면 좋음
- Counterfactual 예시도 넣어주면 좋음
- 예시의 순서도 고려사항이다. 처음과 끝 예시는 보다 중요한 예시를 넣자
Let LLM think
- LLM에게 작업을 수행하기 위해 생각할 시간을 주는 것
- 문제를 단계적으로 해결하도록 만드는 것
- 비용과 지연시간이 늘어나는 문제가 발생하긴 함
예시)
이메일을 작성하기 전에 <thinking> 태그 안에서 먼저 생각하세요.
먼저, 이 기부자가 과거에 지원했던 캠페인과 기부 기록을 바탕으로 어떤 메시지가 그들에게 호소력이 있을지 고민하세요.
그다음, 이 기부자의 기록을 고려하여 'Care for Kids' 프로그램의 어떤 측면이 그들에게 매력적일지 생각하세요.
마지막으로, <email> 태그 안에서 여러분의 분석을 바탕으로 개인화된 기부자 이메일을 작성하세요.
- LLM이 단순히 생각만 하도록 하지 말고 사고 과정을 출력하도록 해야함
- 모델이 생각하는 순서를 명확하게 정의
- "step-by-step", "Think carefully", "Consider every step"등의 문구를 이용
- 최적화된 사고 과정을 명시
- Advanced CoT에 대해 알고 필요하면 적용하기
- 프롬프트의 구성 요소들에 XML 태그를 사용해서 구별하기
- 태그 이름은 본문과 관련있고 일관성 있게 사용하기. 태그를 이용해서 참조하기
- 계층 구조의 태그는 중첩해서 사용하기
- 추가적인 맥락 제공을 위해 Attributed-Based Tag를 사용하기
- 맥락에 따라 동작하는 조건부 태그 사용하기
Giving LLM a role with a system prompt
- AI 모델에게 특정 역할이나 페르소나를 부여하는 기법
- 해당 역할 관점으로 작업을 분석 및 출력을 생성(e.g 톤, 스타일, 적절한 언어)
- 역할은 시스템 프롬프트에 입력하면 됨.
- 동일한 프롬프트라도 지정한 역할에 따라서 결과가 다르게 나올 수 있으므로 다양한 역할을 실험해보자
- role prompting도 구체적으로 입력해야 한다
- 복잡한 작업을 위해 여러 역할을 섞을 수도 있다
- Prefill LLM's response for greater output control을 적용해서 역할을 한번 더 상기시키자
Long context prompting tips
- 긴 문서나 입력을 프롬프트 상단에 배치
- 질문을 마지막에 배치하거나 마지막에 질문을 다시 상기시켜주자
- XML Tags를 이용해서 문서를 구조화 해주자
- 문서를 기반으로 응답을 생성할 때 인용을 해서 답변하라고 말해주자