프롬프트 엔지니어링 소개

OpenAI의 GPT-3, GPT-3.5 및 GPT-4 모델은 프롬프트 기반입니다. 프롬프트 기반 모델에서 사용자는 텍스트 프롬프트를 입력하여 모델과 상호 작용하고 모델은 텍스트 완료로 응답합니다. 이렇게 완료하면 모델의 텍스트 입력이 계속됩니다.

이러한 모델은 매우 강력하지만 해당 동작은 프롬프트에 매우 민감하기도 합니다. 따라서 프롬프트 생성은 개발해야 하는 중요한 기술에 해당합니다.

프롬프트 생성이 어려울 수 있습니다. 실제로 프롬프트는 원하는 작업을 완료하기 위해 모델 가중치를 구성하는 역할을 하지만 과학이라기보다는 예술에 가깝기 때문에 성공적인 프롬프트를 만들기 위해서는 경험과 직관이 필요한 경우가 많습니다. 이 문서의 목표는 이 학습 프로세스를 시작하는 데 도움이 주기 위한 것입니다. 모든 GPT 모델에 적용되는 일반적인 개념과 패턴을 캡처하려고 합니다. 그러나 각 모델이 다르게 동작하므로 학습이 모든 모델에 동일하게 적용되지 않을 수 있음을 이해하는 것이 중요합니다.

기본 사항

이 섹션에서는 GPT 프롬프트의 기본 개념 및 요소에 대해 설명합니다.

텍스트 프롬프트는 사용자가 GPT 모델과 상호 작용하는 방법입니다. 모든 생성 언어 모델과 마찬가지로 GPT 모델은 이전 텍스트에서 따를 가능성이 가장 높은 다음 단어 시리즈를 생성하려고 시도합니다. 그것은 마치 우리가 내가 <prompt>라고 말할 때 당신의 마음에 떠오르는 첫 번째 생각은 무엇입니까?. 아래 예제에서는 이 동작을 보여 줍니다. 잘 알려진 콘텐츠의 첫 번째 단어를 제시하면 모델은 텍스트를 정확하게 계속할 수 있습니다.

프롬프트 Completion
Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal. […]
"Call me Ishmael." "Some years ago—never mind how long precisely—having little o no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world." […]

더 복잡한 프롬프트를 개발할 때는 이러한 기본 동작을 염두에 두는 것이 유용합니다. 제공된 프롬프트에 관계없이 모델은 학습 데이터 및 학습 대상을 고려할 때 가장 가능성이 높다고 판단되는 내용으로 응답하기만 하면 됩니다. 프롬프트에서 질문을 하는 경우 모델은 별도의 "Q&A" 코드 경로를 따르지 않으며, 대답이 입력으로 지정된 질문에 대한 가장 가능성이 높은 응답이므로 질문에 대답하는 것처럼 보입니다.

프롬프트 구성 요소

프롬프트의 서로 다른 부분 간에 구분이 없을 때 완료 API를 사용하는 경우 학습 및 토론으로 기본 프롬프트 구성 요소를 식별하는 것이 여전히 유용할 수 있습니다. 채팅 완료 API를 사용하면 연결된 역할(시스템, 사용자 및 도우미)이 있는 사전 배열 형식으로 API로 전송되는 프롬프트의 고유한 섹션이 제공됩니다. 이 지침은 하나의 API와 관련된 규범적 지침을 제공하는 대신, 프롬프트 생성을 고려하는 방식에 더 일반적으로 초점을 맞춥니다.

프롬프트를 분석하는 다른 유효한 방법이 있을 수 있지만 이 분석의 목표는 프롬프트 생성에 대해 비교적 간단한 고려 방식을 제공하는 것입니다. 완료 API를 사용하면 모든 구성 요소는 선택 사항이지만 하나 이상이 있어야 하며, 대부분의 프롬프트에는 둘 이상의 구성 요소가 포함됩니다. 구성 요소 사이에 회색 영역이 있을 수도 있습니다. 아래에 제시된 순서는 각 구성 요소가 사용되는 빈도(가장 많이 사용되는 것부터)와 거의 일치합니다.

지침

지침은 가장 일반적으로 사용되는 프롬프트 구성 요소일 수 있습니다. 지침은 단순합니다. 즉, 수행할 작업에 대해 모델에 제공되는 지침입니다. 개념에서는 간단하지만 실제로는 복잡할 수 있습니다. 다음 표에서는 두 가지 형식으로 간단한 지침과 좀 더 복잡한 지침을 모두 보여 줍니다.

명령 형식 프롬프트 Completion
간단한 지침 주간 뉴스레터 소개를 작성하세요. 주간 뉴스레터에 오신 것을 환영합니다. 이번 주에는 생산성에 특별히 초점을 둡니다. 여러분이 삶의 모든 영역에서 생산성을 유지하는 방법에 대한 팁과 트릭을 공유하려고 합니다. 즐겁게 살펴보시고 친구와도 공유해 보세요.
복잡한 지침 Contoso라는 회사로 보낼 주간 뉴스레터에 대한 소개를 작성하세요. 지난 주에 진행했던 대대적인 전사적 회의에 대해 언급하고 팀에 지난 몇 개월에 걸쳐 모두 열심히 일해준 점에 대한 감사 인사를 전하세요. Contoso의 주간 뉴스레터에 오신 것을 환영합니다! 지난 주에 대대적인 전사적 회의를 진행했으며 팀에게 지난 몇 개월에 걸쳐 모두 열심히 일해준 점에 대한 감사 인사를 전하고 싶습니다. 우리는 밝은 미래를 기대하며, 우리 팀의 전념과 헌신으로 위대한 성과를 거둘 것이라고 확신합니다. 우리 팀의 일원이 되어 주셔서 감사드리며 앞으로 몇 주, 몇 달 안에 여러분 모두와 함께 일할 수 있기를 기대합니다. [사용자 이름]님 감사합니다.
복잡한 지침 다음을 포함하는 주간 뉴스레터 소개를 작성하세요.
- 회사 이름 contoso
- 활기찬 인사말
- 몇 달 동안 열심히 일해준 점에 대해 감사
- 향후 분기에 대한 긍정적인 전망
- SLT의 서명
Hello Contoso 팀 여러분! 잠시 시간을 내서 지난 몇 달 동안 열심히 노력해 주신 것에 대해 감사를 전하고 싶었습니다. 정말 몇 개월 동안 힘들었지만 함께 일하면서 놀라운 성과를 거두었습니다. 저는 여러분 모두를 정말 자랑스럽게 생각합니다. 다음 분기를 앞두고 정말 긍정적인 마음입니다. 우리는 몇 가지 좋은 결과를 얻을 것으로 생각됩니다. 다시 한번 감사드립니다, 수석 리더십 팀 여러분.

기본 콘텐츠

기본 콘텐츠는 모델에 의해 처리되거나 변환되는 일종의 텍스트를 나타냅니다. 기본 콘텐츠는 일반적으로 지침과 함께 사용됩니다. 간단한 예제는 언어 번역입니다. 아래 예제에서는 영어 텍스트가 기본 콘텐츠로 간주되고 "프랑스어로 번역:"은 지침입니다.

프롬프트 Completion
Can you please tell me how to get to the museum?
Translate to French:
Pouvez-vous s'il vous plaît me dire comment aller au musée?

기본 콘텐츠가 훨씬 더 길어질 수도 있습니다. 다음 예제에서 기본 콘텐츠는 거의 300단어 길이의 시간 복잡도에 대한 Wikipedia 항목의 소개 섹션입니다. 이 콘텐츠는 쉽게 표시할 수 있도록 표에서는 약어로 사용되었습니다.

프롬프트 Completion
컴퓨터 과학에서 시간 복잡도은 알고리즘을 실행하는 데 걸리는 컴퓨터 시간의 크기를 설명하는 계산 복잡성입니다. 시간 복잡도는 일반적으로 [...](으)로 추정됩니다.
이전 텍스트를 몇 문장으로 요약하세요.
시간 복잡도는 알고리즘을 실행하는 데 걸리는 시간을 측정한 것입니다. 일반적으로 입력 크기의 함수로 표현됩니다. 가장 일반적인 측정값은 지정된 크기의 입력에 필요한 최대 시간에 해당하는 최악의 경우를 고려한 시간 복잡도입니다.
컴퓨터 과학에서 시간 복잡도은 알고리즘을 실행하는 데 걸리는 컴퓨터 시간의 크기를 설명하는 계산 복잡성입니다. 시간 복잡도는 일반적으로 [...](으)로 추정됩니다.
TL;DR(너무 길어서 읽지 않음)
알고리즘의 시간 복잡도는 알고리즘을 실행하는 데 걸리는 시간입니다. 시간 복잡도는 일반적으로 알고리즘에 의해 수행되는 기본 작업의 수를 계산하여 추정합니다(단, 각 기본 작업을 수행하는 데 고정된 시간이 소요되는 것으로 가정함). 시간 복잡도는 일반적으로 입력 크기의 함수로 표현됩니다.

GPT 모델은 구조화된 기본 콘텐츠를 처리할 수도 있습니다. 아래 예제에서는 벨기에의 맥주를 위한 TSV(이 문서에 표시하기 위해 사용하는 약어)가 프롬프트의 일부로 모델에 전달됩니다. 콘텐츠를 올바르게 해석하고 데이터에 대한 질문에 대답할 수 있습니다.

프롬프트 Completion
Belgian Beer Brands
Beer name Beer style color ABV Brewery
"Chimay Gold: ""Doree""" trappist pale ale gold 4.80% Chimay Brewery (official trappist)
"Chimay Blue: ""Grande Reserve""" trappist dark ale dark 9.00%
[…]
위의 표를 참조하면 ABV가 6% 미만인 맥주가 몇 개나 되나요?
표에는 ABV가 6% 미만인 10가지 맥주가 있습니다.

예제

성공적인 프롬프트는 종종 "원샷" 또는 "퓨샷" 러닝 연습에 의존합니다. 이것은 일반적으로 입력 및 출력 쌍을 포함하여 모델의 원하는 동작에 대한 하나 이상의 예제를 포함하는 것을 의미합니다. 이것은 모델이 영구적으로 변경된다는 점에서의 러닝이 아니며, 예제가 현재 유추에 대해서만 원하는 대로 응답하도록 모델을 더 잘 조건화한다는 것입니다. 예제가 없는 프롬프트를 사용하는 것을 "제로샷" 학습이라고도 합니다. 채팅 완료 API를 사용하는 퓨샷 러닝 예제는 일반적으로 초기 시스템 메시지 다음에 사용자/도우미 상호 작용 예제 형식으로 메시지 배열에 추가됩니다.

학습 유형 프롬프트 Completion
Zero-shot 헤드라인 : 코치는 부상 때문에 선수들이 이탈하지는 않을 것이라고 확신하다
항목:
코치는 부상 때문에 선수들이 경기 시즌을 이탈하지는 않을 것이라고 확신합니다. 팀은 여전히 목표에 초점을 맞추고 있으며 이를 달성하기 위해 계속 노력할 것입니다.
Few-shot 헤드라인: Twins의 Correa가 옵트아웃, 자유 계약 선수로 나섬
토픽: 야구
헤드라인: 카타르 월드컵에서 술 깨는 구역을 만들어야 하는 상황
토픽: 축구
헤드라인: Yates: 6주 동안 Fantasy football intel 진행
토픽: 풋볼
헤드라인 : 코치는 부상 때문에 선수들이 이탈하지는 않을 것이라고 확신하다
항목:
Basketball

위의 예제에서는 퓨샷 러닝 활용을 보여 줍니다. 예제가 없으면 모델은 원하는 동작을 추측하는 것처럼 보이지만 예제에서는 모델 작동 방법을 명확하게 보여 줍니다. 또한 모델의 성능도 보여 줍니다. 예제에서 '농구' 레이블이 없더라도 원하는 레이블 범주를 유추할 수 있습니다.

단서는 모델 출력에 대한 "점프 스타트" 역할을 하여 모델을 원하는 출력으로 안내하는 데 도움이 됩니다. 모델이 빌드되는 기반이 되는 접두 부분인 경우가 많습니다. 아래 예제에서는 핵심 요소를 포함하도록 스토리에 방향성을 제시하는 단서를 보여 줍니다. 단서는 종종 지침과 함께 사용되지만 항상 그런 것은 아닙니다. 아래 예제에서 모델은 긴 공지 메일을 요약하는 데 사용됩니다. 단서가 모델의 출력에 초점을 맞추는 경우도 있지만 특정 출력 형식(글머리 기호)을 제안하는 데 사용되기도 합니다.

채팅 완료 API의 컨텍스트에서 지침은 시스템 메시지의 형식을 따르며, 퓨샷 예제에는 모델의 기반을 구축하는 데 도움이 되는 일련의 예제 사용자/도우미 상호 작용이 제공됩니다.

단서 수 프롬프트 Completion
0 성능 검토는 Contoso의 성능 및 개발 접근 방식의 핵심 구성 요소입니다. […]
위의 메일 메시지를 요약하세요.
이 메일의 목적은 Contoso의 성능 및 개발 접근 방식의 일부인 성능 검토 환경의 최근 변경 내용을 직원에게 알리는 것입니다. 변경 내용에는 향상된 구조, 업그레이드된 도구 내 사용자 환경 및 핵심 프롬프트가 포함됩니다. 또한 이제 직원들이 관리자와 논의하려는 토픽 플래그를 지정하기 위한 선택적 대화 시작 섹션이 있습니다.
1 성능 검토는 Contoso의 성능 및 개발 접근 방식의 핵심 구성 요소입니다. […]
위의 메일 메시지를 요약하세요.
메시지의 핵심 사항은
Contoso는 핵심 우선 순위, 기대치 및 영향에 좀 더 집중함으로써 성능 검토 환경을 개선하고 있습니다. 또한 팁, 리소스 및 지침을 사용하여 도구 내 사용자 환경을 업그레이드하고 있습니다. 마지막으로, 전사적인 핵심 우선 순위를 활성화하는 방법에 대한 지침을 추가하고 있습니다.
2 성능 검토는 Contoso의 성능 및 개발 접근 방식의 핵심 구성 요소입니다. […]
위의 메일 메시지를 요약하세요.
핵심 내용:
Contoso는 직원의 피드백에 따라 성능 검토 환경에 변경을 도입하고 있습니다.
• 변경에는 핵심 우선 순위, 기대치 및 영향에 대한 새로운 포커스, 업그레이드된 사용자 환경 및 전사적인 핵심 우선 순위에 대한 새로운 지침이 포함됩니다.
• 성과 평가는 과거의 성과와 러닝 상황을 고찰하고 미래의 우선 순위와 성장 기회를 계획하는 시간입니다.
• 직원 및 관리자는 성과 평가 회의에 앞서 의견을 작성해야 합니다.
• 연간 2회 이상의 성능 평가가 진행되어야 합니다.
• 각 평가에 대한 투자 시간은 거의 동일하게 유지해야 합니다.

지원 콘텐츠

콘텐츠 지원은 모델이 어떤 방식으로든 출력에 영향을 주는 데 활용할 수 있는 정보입니다. 작업의 기본 대상이 아니지만 일반적으로 기본 콘텐츠와 함께 사용된다는 점에서 기본 콘텐츠와 다릅니다. 일반적인 예로는 현재 날짜, 사용자 이름, 사용자 기본 설정 등과 같은 컨텍스트 정보가 포함됩니다. 아래 예제에서는 지원 콘텐츠를 사용하여 사용자를 위해 계획된 워크샵 모음을 구성합니다. 지원(중요 토픽)이 없으면 모델은 단순히 워크샵을 나열하고(여기서는 표시를 위해 잘림) 중요 토픽을 알게 되면 모델은 회의를 정확하게 그룹화할 수 있습니다.

지원 내용 프롬프트 Completion
사용 안 함 워크샵 목록:
제목 설명
워크샵 시작 계획 저희와 함께 워크샵을 시작하세요! 리더들로부터 앞으로 1년 동안의 그룹 간 우선 순위와 러닝 계획에 대해 들어보세요. 이 이벤트에 대한 초대는 이미 [...]의 모든 사용자에게 전송되었습니다.
위의 워크샵을 요약하여 토픽별로 그룹화합니다.
워크샵 목록:
워크샵 시작 계획
-워크샵 마무리 계획
- 핵심 회의 일정
- 고객 중심 관점
-영향 및 주요 포커스 영역
-모범 사례
-앱 채택 가속화[...]
With 워크샵 목록:
제목 설명
워크샵 시작 계획 저희와 함께 워크샵을 시작하세요! 리더들로부터 앞으로 1년 동안의 그룹 간 우선 순위와 러닝 계획에 대해 들어보세요. 이 이벤트에 대한 초대는 이미 [...]의 모든 사용자에게 전송되었습니다.
내 중요 토픽: 프롬프트 엔지니어링, 검색, GPT 모델
위의 워크샵을 중요 토픽별로 그룹화해서 요약하세요.
1. 신속한 엔지니어링:
- 새로운 프롬프트 엔지니어링 팁
- 프롬프트 엔지니어링 기술
2. 검색:
-포함을 사용하는 벡터 검색 소개
3. GPT 모델:
- GPT-4 소개
- GPT-35-Turbo in-depth.

모범 사례

  • 구체적으로. 해석할 여지를 가능한 한 적게 만듭니다. 운영 공간을 제한합니다.
  • 설명적으로. 비유를 사용하고,
  • 강력하게 추진. 경우에 따라 모델에 반복적으로 지침을 제공해야 할 수 있습니다. 기본 콘텐츠 전후에 지침을 제공하고 지침 및 단서 등을 사용합니다.
  • 순서가 중요. 모델에 정보를 제공하는 순서는 출력 결과에 영향을 미칠 수 있습니다. 콘텐츠 앞에("다음 내용을 요약...") 또는 뒤에("위의 내용을 요약...") 지침을 넣느냐에 따라 결과물에 차이가 생길 수 있습니다. 퓨샷(few-shot) 예제의 순서도 중요할 수 있습니다. 이를 최신 편향이라고 합니다.
  • 모델에 "출구" 제공. 할당된 작업을 완료할 수 없는 경우 모델에 대체 경로를 제공하는 것이 도움이 될 수 있습니다. 예를 들어 텍스트 조각에 대해 질문할 때 "대답이 없으면 '찾을 수 없음'다고 응답해" 등과 같은 내용을 포함할 수 있습니다. 이렇게 하면 모델이 잘못된 응답을 생성하지 않도록 방지할 수 있습니다.

공간 효율성

신세대 GPT 모델에서는 입력 크기가 증가하지만 모델이 처리할 수 있는 것보다 더 많은 데이터를 제공하는 시나리오가 계속 존재합니다. GPT 모델은 단어를 "토큰"으로 분리합니다. 일반적인 다중 음절 단어는 종종 단일 토큰이지만 덜 일반적인 단어는 음절로 나뉩니다. 토큰은 경우에 따라 서로 다른 날짜 형식에 대한 토큰 경계를 보여 주는 아래 예제와 같이 직관적이지 않을 수 있습니다. 이 경우 전체 월을 다 입력하는 것이 전체 숫자 날짜보다 공간 효율적입니다. 현재 이전 GPT-3 모델의 2000개 토큰에서 최신 32k 버전 GPT-4 모델의 최대 32,768개 토큰까지 지원됩니다.

토큰 경계를 구분하는 강조 표시된 색이 있는 텍스트 문자열의 스크린샷.

이 제한된 공간을 고려한다면 가능한 한 효율적으로 사용하는 것이 중요합니다.

  • 테이블 – 이전 섹션의 예제와 같이 GPT 모델은 테이블 형식의 데이터를 매우 쉽게 이해할 수 있습니다. 이렇게 하는 것이 JSON의 경우처럼 모든 필드 앞에 이름을 입력하는 것보다 데이터를 포함하는 공간 효율적인 방법일 수 있습니다.
  • 공백 – 연속 공백은 별도의 토큰으로 처리되므로 공간을 낭비하기 쉽습니다. 반면 단어 앞의 공백은 일반적으로 단어와 동일한 토큰의 일부로 처리됩니다. 공백은 신중하게 사용하고 공백만 있을 때는 문장 부호를 사용하지 마세요.

다음 단계

Azure OpenAI에 대해 자세히 알아봅니다.