Prompt Engineering

프롬프트 엔지니어링 기법 with 실습(1) / Few-shot prompting

jjowahye 2025. 3. 2. 20:27

프롬프트 엔지니어링 기법- 1, 2번

  1. 명확하고 직접적으로 전달: 응답을 안내하기 위해 명확한 지침과 컨텍스트 제공
  2. Few-shot 프롬프팅 : 원하는 출력 형식이나 스타일을 설명하기 위해 프롬프트에 예제 포함
  3. 역할 프롬프팅: 사용 사례에 대한 성능을 높이기 위해 AI가 (전문가와 같은) 특정 역할을 수행하도록 준비시킴
  4. XML 태그 사용: 명확성을 높이기 위해 XML 태그를 통합하여 프롬프트와 응답 구조화
  5. 프롬프트 연결: 더 나은 결과를 위해 복잡한 작업을 더 작고 관리 가능한 단계로 분할
  6. 생각할 시간 제공: 출력 품질을 개선하기 위해 단계별 사고 장려
  7. 응답 미리 채우기: 출력을 원하는 방향으로 안내하기 위해 몇 단어로 응답 시작
  8. 출력 형식 제어: 일관성과 가독성을 보장하기 위해 원하는 출력 형식 지정
  9. 다시 쓰기(rewrite) 요청: 루브릭에 기반하여 수정을 요청하여 반복적으로 출력을 개선하도록 함
  10. 긴 컨텍스트 창 팁: 더 긴 컨텍스트 창을 활용하는 프롬프트 최적화

 

1. 명확하고 직접적으로 전달하기

원하는 바를 직접적으로 더 많이 설명할수록 AI의 응답은 더욱 정확해진다. 

상세한 맥락과 지침 제공하기

  • 작업 결과가 어디에 사용될 것인지
  • 출력물이 어떤 대상을 위한 것인지
  • 작업이 어떤 워크플로우의 일부인지, 그리고 이 작업이 해당 워크플로우에서 어디에 속하는지
  • 작업의 최종 목표, 또는 성공적인 작업 완료가 어떤 모습인지

<나쁜예시>

이 텍스트에서 모든 개인 식별 정보를 제거해 주세요: {{TEXT}}

 

<좋은 예시>

우리는 모든 개인 식별 정보(PII)를 제거하여 일부 텍스트를 익명화하려고 합니다. 
다음 단계를 따라주세요: 
1. 이름, 전화번호, 집 주소 및 이메일 주소의 모든 인스턴스를 ‘XXX’로 
대체하세요. 
2. 텍스트에 PII가 포함되어 있지 않으면 아무것도 대체하지 않고 단어 그대로 
복사하세요. 
3. 추가 설명 없이 처리된 텍스트만 출력하세요. 

처리할 텍스트는 다음과 같습니다:{{TEXT}}
  • 작업의 성격에 대한 맥락을 먼저 제공
  • *PII 가 무엇인지 정의 (이름, 전화번호, 주소)
  • 작업 수행 방법에 대한 구체적이고 열거된 단계별 지침 제공
  • 출력형식 지침 제공

번호 목록이나 글머리 기호 사용하기

<나쁜예시>

이 교과서 장을 수업 계획으로 바꿔주세요:
{{CHAPTER}}

 

<좋은 예시>

주어진 교과서 장을 종합적인 수업 계획으로 바꾸는 것이 당신의 임무입니다. 이 
작업을 수행하려면 다음을 해야 합니다: 
1. 섹션별로 핵심 개념을 추출하고 요약하기 
2. 추출된 각 개념을 이해도를 확인하기 위한 질문 목록을 포함하여 30분 수업 
계획으로 변환하기 
3. 이 장에서 배운 내용을 강화하는 동반 과제 설계하기
다음은 해당 장입니다:

원하는 바를 구체적으로 명시하기

지침이 모호하거나 개방적이면 AI는 더욱 일반적인 응답을 제공한다.

<나쁜예시>

위와 같은 개방형 질문은 명확한 결과를 이끌어 낼 수 없는 프롬프트의 예시이다.

 

<좋은예시>

2. 예시 사용하기

예시를 사용함으로써 응답 정확성, 일관성 및 품질을 크게 개선할 수 있다. 패턴을 일반화하고 새로운 입력에 적용할 수 있기 때문이다. 이 기술은 특히 매우 상세하거나 구조화된 출력 또는 특정 형식을 준수해야 하는 작업에 효과적이다.

- few-shot prompting : 여러개의 예시 제공

- one-shot prompting : 하나의 예시만 제공

효과적인 예시 만들기에 대한 지침

1. 관련성: 예시가 AI가 처리해야하는 입력 및 출력 유형과 밀접하게 유사한지 확인. 실제 사용 예시와 유사해야함

2. 다양성: 다양한 시나리오, 극단적인 경우 및 잠재적 과제 포함. 더 잘 일반화 하고 더 넓은 범위의 입력처리에 유용

3. 명확성: 간결하고 명확하고 이해하기 쉽게 예시를 구성할 것. <example>같은 포맷팅 태그를 사용해 예시를 구조화하고 프롬프트 나머지 부분과 구별. 가능한 경우 어떤 종류의 예시를 만날 것인지에 대한 맥락 제공(ex. 다음은 APA 인용의 예시입니다 or 제가 작성한 이메일의 예시입니다.)

4. 수량: 시작할 때 최소 3-5개의 예시 제공을 지향할 것. 성능이 기대 이하라면 더 많은 타겟팅된 예시 추가 가능

 

예시 제공 시, 프롬프트에 예시를 포함하되 실제 작업과 명확히 구분해야한다. 예시를 <example></example> 태그로 감싸서 예시와 나머지를 쉽게 구별할 수 있다. 

출력 포맷팅

단계별 포맷팅 지침 제공 대신 원하는 출력 형식의 예시를 몇 개 포함해도 된다. 하지만 예시와 지침 둘 다 사용하는 것이 더 효과적이다. 

긴 장문에서 특정 조건 값으로 처리해야 할 때 예시 텍스트를 효과적으로 전달하여 쉽게 원하는 결과를 얻을 수 있다. 

 

<주의사항>

예시는 강력하지만 잠재적인 함정에 주의해야한다. 가끔 예시에서 의도하지 않은 패턴을 선택하여 과적합니아 예상치 못한 행동으로 이어질 수 있다. 예를 들어, 모든 예시 이메일이 “Sincerely”로 끝난다면 AI는 모든 경우에 적절하지 않더라도 생성하는 이메일에 항상 그렇게 서명하는 것을 배울 수 있다. 이를 완화하려면 예시가 다양하고 원하는 출력의 전체 범위를 대표하는지 확인해야한다.

반복 및 개선

성능이 기대 이하일 경우, 

1. 출력 분석: 출력 응답에서 원하는 것과 다른 패턴 찾기. 예시 불명확 또는 오해 소지가 있는 영역 등을 식별하는데 도움이 될 수 있음

2. 더 많은 예시 추가: 특정 유형의 입력으로 어려움을 겪는 경우, 해당 시나리오를 구체적으로 다루는 추가 예시 추가

3. 기존 예시 수정: 때로 예시를 약간만 수정해도 큰 차이를 만들 수 있음. 어떤 것이 가장 잘 작동하는지 확인하기 위해 다양한 표현, 형식 또는 구조를 실험해야함. 

4. AI의 도움 받기: 좋은 예시를 작성하는 것은 어렵다. AI에게 주어진 작업에 대한 예시의 다양성/관련성을 평가하거나, 참조할 기존 예시 세트를 제공하여 새로운 예시를 생성해 달라고 요청 가능

 

프롬프트 엔지니어링은 반복적인 프로세스임을 기억해야한다. 초기 예시가 완벽한 결과를 산출하지 않더라도 낙담할 필요가 없다. 약간의 조정과 실험을 통해 AI의 모든 잠재력을 끌어내고 최적의 결과를 얻기 위해 노력해야한다.