본문 바로가기
일상/chatGPT

[chatGPT] OpenAI에서 제공하는 GPT사용 전략 6가지(번역)

by _thoth_ 2023. 6. 16.
반응형

Open AI에 가보면 chatGPT를 잘 쓸 수 있는 방법을 알려주는 문서가 있습니다.

역시 오리지날은 확실히 다르네요. 예시 한땀 한땀 훌륭합니다.

확인해 보시죠.

 

※ 이 내용은 영어가 짧은 제가 GPT의 도움을 받아서 번역한 것입니다. 의역과 기계번역이 난무합니다.

분량상 생략된 내용도 많습니다. 원문을 보고 싶으신 분은 다음 링크를 방문하세요.

 

OpenAI API

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

platform.openai.com

 

혹시 읽으면서 무슨 말인지 잘 모르겠다는 내용이 있으면 예시를 프롬프트에 입력해 보면 됩니다.

출력되는 결과를 보면 바로 알 수 있습니다.(한글보다는 영어로 입력을 추천합니다)


 

더 나은 결과를 얻기 위한 6가지 전략

1. 명확한 지침 작성

GPT는 당신의 마음을 읽을 수 없습니다.
출력이 길면 간단한 답변을, 출력이 단순하면 전문자 수준의 글쓰기를 요청하세요.
형식이 마음에 들지 않으면 보고 싶은 형식을 알려주세요.
GPT가 당신이 원하는 것을 추측해야 하는 횟수가 작을수록 당신이 원하는 것을 얻을 가능성이 높아집니다.

 

•  더 관련성 높은 답변을 얻기 위해 쿼리에 세부 정보를 포함하세요.

  관련성이 높은 응답을 받으려면 요청이 중요한 세부 정보나 컨텍스트를 제공해야 합니다.

질문 좋은 질문
Excel에서 숫자를 어떻게 추가합니까? Excel에서 달러 금액 행을 어떻게 합산합니까? 모든 합계가 "Total"이라는 열의 오른쪽에 있는 전체 행 시트에 대해 자동으로 이 작업을 수행하려고 합니다.
대통령은 누구입니까? 2021년 멕시코 대통령은 누구였으며 선거는 얼마나 자주 치러지나요?

 

•  모델에 페르소나를 채택하도록 요청

원문에서는 해당 예시를 확인해 볼 수 있는 'Playground'를 제공하고 있습니다. GPT에 사전제공하는 부분과 사용자의 입력 부분을 나누어 놨는데, 일반 chatGPT에서는 'system'으로 표시된 부분도 프롬프트에 같이 입력하면 됩니다. 첫 번째 예시만 나누어 보여주고 나머지는 합쳐서 작성하겠습니다.

SYSTEM
내가 무언가를 쓰는 데 도움을 요청할 때, 당신은 모든 단락에 적어도 하나의 농담이나 장난스러운 코멘트가 포함 된 문서로 답장 할 것입니다. 
USER
제 시간에 짧은 시간에 배송을 해주신 강철 볼트 공급업체에 감사 편지를 작성하십시오. 이를 통해 중요한 주문을 배송할 수 있었습니다.

 

•  구분 기호를 사용하여 입력의 개별 부분을 명확하게 표시

동일한 주제에 대한 한 쌍의 문서(XML 태그로 구분됨)가 제공됩니다. 
먼저 각 기사의 주장을 요약하십시오. 
그런 다음 그들 중 누가 더 나은 주장을 하는지 지적하고 그 이유를 설명하십시오. 
<article>  첫 번째 기사</article>
<article>  두 번째 기사 </article>
논문 초록과 제안된 제목이 제공됩니다. 
논문 제목은 독자에게 논문 주제에 대한 좋은 아이디어를 제공해야하지만 눈길을 끌 수 있어야합니다. 
제목이 이러한 기준을 충족하지 않는 경우 5가지 대안을 제안하십시오. 
초록: 초록 내용 입력
제목: 제목 입력


•  작업을 완료하는 데 필요한 단계 지정

일부 작업은 일련의 단계로 지정하는 것이 가장 좋습니다. 
단계를 명시적으로 작성하면 모델이 단계를 더 쉽게 따를 수 있습니다.

다음 단계별 지침을 사용하여 내용 입력에 대답해줘
1단계 - 사용자는 삼중 따옴표로 된 텍스트를 제공합니다. 
이 텍스트를 "요약: "라는 접두사를 사용하여 한 문장으로 요약합니다.
2단계 - 1단계의 요약을 "번역: "이라는 접두사를 사용하여 스페인어로 번역합니다. 
"""텍스트 입력"""


•  예제 제공

모든 예제에 적용되는 일반적인 지침을 제공하는 것이 더 효율적이지만 경우에 따라 예제를 제공하는 것이 더 쉬울 수 있습니다. 예를 들어 모델이 명시적으로 설명하기 어려운 사용자 쿼리에 응답하는 특정 스타일을 복사하려는 경우입니다. 이를 "few-shot" 프롬프트라고 합니다.
해당 설명이 다소 난해한 감이 있습니다. 하기 예시를 프롬프트에 직접 입력해 보시면 됩니다. 원문도 같이 넣습니다.

원문:
Answer in a consistent style.
Teach me about patience.
The river that carves the deepest valley flows from a modest spring; 
the grandest symphony originates from a single note; the most intricate tapestry begins with a solitary thread.
Teach me about the ocean.
번역:
일관된 스타일로 대답하십시오. 
인내에 대해 가르쳐 주십시오. 
가장 깊은 계곡을 깎아 만든 강은 겸손한 샘에서 흐릅니다. 가장 웅장한 교향곡은 단일 음표에서 비롯됩니다. 가장 복잡한 태피스트리는 고독한 실로 시작됩니다. 
바다에 대해 가르쳐주세요.


•  원하는 출력 길이를 지정합니다

모델에 지정된 목표 길이의 출력값을 생성하도록 요청할 수 있습니다. 
목표 출력 길이는 단어, 문장, 단락, 글머리 기호 등의 수로 지정할 수 있습니다. 

그러나 특정 수의 단어를 생성하도록 모델에 지시하는 것은 높은 정밀도로 작동하지 않습니다. 

모델은 특정 수의 단락 또는 글머리 기호가 있는 출력을 보다 안정적으로 생성할 수 있습니다.

삼중 따옴표로 구분된 텍스트를 약 50 단어로 요약하십시오."""텍스트 입력"""

삼중 따옴표로 구분 된 텍스트를 2 단락으로 요약하십시오."""텍스트 입력"""

삼중 따옴표로 구분된 텍스트를 3개의 글머리 기호로 요약합니다."""텍스트 입력"""

 

2. 참조 텍스트 제공

GPT는 난해한 주제나 인용 및 URL에 대한 질문을 받을 때 자신 있게 가짜 답변을 만들 수 있습니다.
한 장의 메모가 학생이 시험을 더 잘하는 데 도움이 되는 것과 같은 방식으로
GPT에 참조 텍스트를 제공하면 더 적은 조작으로 답하는 데 도움이 될 수 있습니다.

현재 쿼리와 관련된 정보를 모델에 제공할 수 있는 경우 제공된 정보를 사용하여 답변을 작성하도록 모델에 지시할 수 있습니다

 

• 참조 텍스트를 사용하여 응답하도록 모델에 지시

삼중 따옴표로 구분된 제공된 기사를 사용하여 질문에 답하십시오. 
기사에서 답을 찾을 수 없으면 "답을 찾을 수 없습니다"라고 씁니다. 
<""" 기사 내용 입력""">
질문: <질문 내용 입력>


• 참조 텍스트의 인용으로 응답하도록 모델에 지시

삼중따옴표와 질문으로 구분된 문서가 제공됩니다.
귀하의 임무는 제공된 문서만 사용하여 질문에 답하고 질문에 답하는 데 사용된 문서의 구절을 인용하는 것입니다.
문서에이 질문에 답하는 데 필요한 정보가 포함되어 있지 않으면 "정보 부족"이라고 작성하십시오.
질문에 대한 답변이 제공되면 인용으로 주석을 달아야 합니다.
관련 구절을 인용하려면 다음 형식을 사용합니다({"인용": ...}).
<""" 문서 내용 입력""">
질문: <질문 내용 입력>

 

 

3. 복잡한 작업을 더 간단한 하위 작업으로 분할

소프트웨어 엔지니어링에서 복잡한 시스템을 모듈식 구성 요소 집합으로 나누는 것이 좋은 방법인 것처럼.
GPT에 제출된 작업도 마찬가지입니다. 복잡한 작업은 간단한 작업보다 오류율이 높은 경향이 있습니다.
또한 복잡한 작업은 이전 작업의 출력을 사용하여 이후 작업에 대한 입력을 구성하는 더 간단한 작업의 워크플로로 재정의할 수 있습니다.

 

•  의도 분류를 사용하여 사용자 쿼리에 가장 관련성이 높은 지침 식별

고객 서비스 문의가 제공됩니다.
각 쿼리를 기본 범주와 보조 범주로 분류합니다.
출력을 기본 및 보조 키와 함께 json 형식으로 제공합니다.

기본 범주: 청구, 기술 지원, 계정 관리 또는 일반 문의.

청구 보조 카테고리:
-
구독 취소 또는 업그레이드
- 결제 수단 추가
- 요금에 대한 설명
- 청구에 대한 이의 제기

기술 지원 보조 범주
:
-
문제 해결
- 장치 호환성
- 소프트웨어 업데이트

계정 관리 보조 범주
:
-
비밀번호 재설정
- 개인 정보 업데이트
- 계정 해지
- 계정 보안

일반 문의 보조 범주
:
-
제품 정보
- 가격
- 피드백
- 인간과 대화하기

<(예시) 인터넷을 다시 작동시켜야 합니다.>

 

 


•  매우 긴 대화가 필요한 대화 응용 프로그램의 경우 이전 대화를 요약하거나 필터링합니다

GPT는 컨텍스트 길이가 고정되어 있기 때문에 전체 대화가 컨텍스트 창에 포함된 사용자와 어시스턴트 간의 대화는 무한정 계속될 수 없습니다.
이 문제에 대한 해결 방법 중 하나는 대화의 이전 턴을 요약하는 것입니다. 
입력의 크기가 임계 길이에 도달하면, 이것은 대화의 일부를 요약하는 프롬프팅을 할 수 있고, 
이전 대화의 요약은 시스템 메시지의 일부로서 포함될 수 있습니다. 
또 다른 방법은 현재 쿼리와 가장 관련성이 높은 대화의 이전 부분을 동적으로 선택하는 것입니다.

 

•  긴 문서를 조각별로 요약하고 전체 요약을 재귀적으로 구성합니다.

GPT는 컨텍스트 길이가 고정되어 있기 때문에 단일 쿼리에서 컨텍스트 길이에서 생성된 요약의 길이를 뺀 값보다 긴 텍스트를 요약하는 데 사용할 수 없습니다.(※GPT가 처리 가능한 단어가 2000 단어라고 하고, GPT가 생성해야 하는 요약문의 길이를 500 단어라고 했을 때, 원본 텍스트의 길리는 최대 1500 단어가 됩니다)
책과 같은 매우 긴 문서를 요약하기 위해 일련의 쿼리를 사용하여 문서의 각 섹션을 요약할 수 있습니다. 
섹션 요약은 요약의 요약을 생성하고 요약할 수 있습니다.

이 프로세스는 전체 문서가 요약될 때까지 재귀적으로 진행될 수 있습니다.
이후 섹션을 이해하기 위해 이전 섹션에 대한 정보를 사용해야 하는 경우,
유용할 수 있는 추가 트릭은 책의 특정 지점 앞에 있는 텍스트의 실행 요약을 포함하면서 ,
해당 지점의 내용을 요약하는 것입니다.

 

 

4. GPT에게 생각할 시간 주기

17에 28을 곱하라는 요청을 받으면 즉시 알지 못할 수도 있지만 시간이 지나면 해결할 수 있습니다.
마찬가지로 GPT는 답을 찾는 데 시간을 들이지 않고 바로 대답하려고 할 때 더 많은 추론 오류를 범합니다.
답변 전에 일련의 추론을 요청하면 GPT가 보다 안정적으로 정답을 추론하는 데 도움이 될 수 있습니다.

 

•  결론에 도달하기 전에 모델에 자체 솔루션을 해결하도록 지시합니다.

우리는 결론에 도달하기 전에 첫 번째 원칙에서 추론하도록 모델에 명시적으로 지시할 때 더 나은 결과를 얻습니다. 예를 들어 수학 문제에 대한 학생의 솔루션을 평가하는 모델을 원한다고 가정해 보겠습니다.

이에 접근하는 가장 확실한 방법은 학생의 솔루션이 올바른지 여부를 모델에 묻는 것입니다

 

학생의 솔루션이 올바른지 확인하세요.

문제 설명: 태양광 발전 설비를 건설 중이며 재정 문제를 해결하는 데 도움이 필요합니다.
- 토지 비용은 $100/평방피트
- 태양 전지판을 평방 피트 당 $ 250에 구입할 수 있습니다
- 연간 $100의 고정 비용과 $10/평방피트의 추가 비용이 드는 유지 보수 계약을 협상했습니다.
평방 피트 수의 함수로 운영 첫해의 총 비용은 얼마입니까?

학생 솔루션: x를 설치 크기(평방 피트)로 지정합니다
1. 토지 비용: 100배
2. 태양 전지판 비용: 250x
3. 유지 보수 비용 : 100,000 + 100x
총 비용: 100x + 250x + 100,000 + 100x = 450x + 100,000 

학생의 해결책은 틀렸습니다.

모델이 먼저 자체 솔루션을 생성하도록 요청하여 모델이 이를 성공적으로 인식하도록 할 수 있습니다.

위의 예시 앞에 다음의 지침을 입력하고 진행하면 제대로 된 결과를 얻을 수 있습니다.

먼저 문제에 대한  해결책을 찾으십시오. 
그런 다음 자신의 솔루션을 학생의 솔루션과 비교하고 학생의 솔루션이 올바른지 여부를 평가합니다. 
문제를 직접 풀기 전까지는 학생의 해결책이 맞는지 결정하지 마십시오. 

(※ 한글로 번역해서 올렸더니 실패했습니다. 영어로 올렸을 때에는 제대로된 결과를 얻을 수 있었습니다)

 


•  내부 독백 또는 쿼리 시퀀스를 사용하여 모델의 추론 프로세스를 숨깁니다

앞선 방법은 모델이 특정 질문에 답하기 전에 문제에 대해 자세히 추론하는 것이 중요하다는 것을 보여줍니다. 일부 응용 프로그램의 경우는 모델이 최종 답변에 도달하는 데 사용하는 추론 프로세스를 사용자와 공유하기에 부적절합니다.

예를 들어, 개인 교습 응용 프로그램에서 학생들이 스스로 답을 찾도록 권장할 수 있지만 학생의 솔루션에 대한 모델의 추론 과정을 통해 학생에게 답을 알 수 있습니다.
내면의 독백은 이를 완화하는 데 사용할 수 있는 전술입니다. 내부 독백의 아이디어는 사용자에게 숨겨져야 하는 출력의 일부를 구문 분석을 쉽게 할 수 있는 구조화된 형식으로 배치하도록 모델에 지시하는 것입니다. 그런 다음 출력을 사용자에게 제공하기 전에 출력이 구문 분석되고 출력의 일부만 표시됩니다

 

다음 단계에 따라 사용자 쿼리에 응답합니다.

1단계 - 먼저 문제에 대한 자신의 해결책을 찾으십시오.
            학생의 솔루션이 정확하지 않을 수 있으므로 의존하지 마십시오.
            이 단계에 대한 모든 작업을 큰따옴표(""")로 묶습니다.

2단계 - 자신의 솔루션을 학생의 솔루션과 비교하고 학생의 솔루션이 올바른지 여부를 평가합니다. 
            이 단계에 대한 모든 작업을 큰따옴표(""")로 묶습니다.

3단계 - 학생이 실수를 했다면 답을 주지 않고 학생에게 어떤 힌트를 줄 수 있는지 결정하십시오.
            이 단계에 대한 모든 작업을 큰따옴표(""")로 묶습니다.

4단계 - 학생이 실수한 경우 이전 단계의 힌트를 학생에게 제공합니다(삼중따옴표 제외).
             "4단계 - ..."라고 쓰는 대신 "힌트:"를 씁니다. 

문제 설명: <문제 설명 입력>

학생 솔루션 : <학생 솔루션 입력>

또는 마지막 쿼리만 사용하여 이 작업을 수행할 수 있습니다.

 

첫째, 모델에 스스로 문제를 해결하도록 요청할 수 있습니다.

이 초기 쿼리에는 학생의 솔루션이 필요하지 않으므로 생략할 수 있습니다.

이것은 모델의 솔루션이 학생이 시도한 솔루션에 의해 편향될 가능성이 없다는 추가적인 이점을 제공합니다.


 <문제 설명 입력>

다음으로, 모델이 사용 가능한 모든 정보를 사용하여 학생 솔루션의 정확성을 평가하도록 할 수 있습니다.

 

자신의 솔루션을 학생의 솔루션과 비교하고 학생의 솔루션이 올바른지 여부를 평가합니다. 

문제 설명: """<문제 설명 삽입>"""

솔루션: """<모델 생성 솔루션 삽입>"""

학생 솔루션: """<학생용 솔루션 삽입>"""

 

마지막으로, 모델이 자체 분석을 사용하여 튜터의 페르소나로 응답을 구성하도록 할 수 있습니다.

당신은 수학 교사입니다. 
학생이 실수를 했다면, 답을 밝히지 않는 방식으로 학생에게 힌트를 줍다. 
연구생이 잘못을 저지르지 않았다면, 단지 격려적인 말을 해 주십시오. 

문제 설명: """<문제 설명 삽입>"""

솔루션: """<모델 생성 솔루션 삽입>"""

학생 솔루션: """<학생용 솔루션 삽입>"""

분석: """<이전 단계에서 생성된 모델 분석 삽입>"""

 


•  모델에 이전 단계에서 놓친 것이 있는지 묻습니다

특정 질문과 관련된 출처에서 발췌한 내용을 나열하기 위해 모델을 사용한다고 가정해 보겠습니다. 
발췌문을 나열한 후 모델은 다른 발췌문을 작성하기 시작/중지해야 하는지 결정해야 합니다.
원본 문서가 크면 모델이 너무 일찍 중지되어 모든 관련 발췌문을 나열하지 못하는 경우가 많습니다.
이 경우 이전 패스에서 누락된 발췌문을 찾기 위해 후속 쿼리를 사용하여 모델에 메시지를 표시하여 더 나은 성능을 얻을 수 있습니다.

삼중 따옴표로 구분된 문서가 제공됩니다. 
당신의 임무는 다음 질문과 관련된 발췌문을 선택하는 것입니다: 
"인공 지능의 역사에서 어떤 중요한 패러다임 전환이 일어났습니까?"

발췌문에 이를 해석하는 데 필요한 모든 관련 컨텍스트가 포함되어 있는지 확인합니다
(즉, 중요한 컨텍스트가 누락된 작은 스니펫을 추출하지 마세요). 
다음과 같이 JSON 형식으로 출력을 제공합니다.

[{"발췌": "..."},
...
{"발췌": "..."}] 

"""<문서 입력>""" 
#결과 출력
더 관련성 있는 발췌문이 있습니까?
발췌문을 반복하지 않도록 주의하십시오.
또한 발췌문에 이를 해석하는 데 필요한 모든 관련 컨텍스트가 포함되어 있는지 확인합니다
(즉, 중요한 컨텍스트가 누락된 작은 스니펫을 추출하지 마십시오).

 

반응형

 

5. 외부 도구 사용

GPT에 다른 도구의 출력을 제공하여 GPT의 약점을 보완합니다.
예를 들어 텍스트 검색 시스템은 GPT에 관련 문서에 대해 알려줄 수 있습니다.
코드 실행 엔진은 GPT가 계산을 수행하고 코드를 실행하는 데 도움이 될 수 있습니다.
GPT가 아닌 도구를 사용하여 작업을 더 안정적이고 효율적으로 수행할 수 있는 경우
작업을 오프로드하여 두 가지 모두를 최대한 활용하십시오.

 

•  임베딩 기반 검색을 사용하여 효율적인 지식 검색 구현

모델은 입력의 일부로 제공되는 경우 외부 정보 소스를 활용할 수 있습니다.

이렇게 하면 모델이 더 많은 정보에 입각한 최신 응답을 생성하는 데 도움이 될 수 있습니다.
예를 들어, 사용자가 특정 영화에 대해 질문하는 경우 영화에 대한 고품질 정보(: 배우, 감독 등)를 모델의 입력에 추가하는 것이 유용할 수 있습니다. 임베딩은 효율적인 지식 검색을 구현하는 데 사용할 수 있으므로 런타임에 관련 정보를 모델 입력에 동적으로 추가할 수 있습니다.

텍스트 임베딩은 텍스트 문자열 간의 관계를 측정할 수 있는 벡터입니다.
유사하거나 관련성이 있는 문자열은 관련 없는 문자열보다 더 가깝습니다.
이 사실은 빠른 벡터 검색 알고리즘의 존재와 함께 임베딩을 사용하여 효율적인 지식 검색을 구현할 수 있음을 의미합니다.
특히, 텍스트 말뭉치는 청크로 분할될 수 있고, 각 청크는 임베디드 되고 저장될 수 있습니다. 
그런 다음 주어진 쿼리를 포함할 수 있고 벡터 검색을 수행하여 쿼리와 가장 관련이 있는(, 임베딩 공간에서 가장 가까운) 말뭉치에서 포함된 텍스트 청크를 찾을 수 있습니다.

 

•  코드 실행을 사용하여 보다 정확한 계산을 수행하거나 외부 API를 호출합니다.

GPT는 자체적으로 산술 또는 긴 계산을 정확하게 수행하는 데 의존할 수 없습니다. 
이것이 필요한 경우 모델에 자체 계산을 수행하는 대신 코드를 작성하고 실행하도록 지시할 수 있습니다. 
특히, 모델은 트리플 백틱(triple backtics)과 같은 지정된 형식으로 실행되도록 의도된 코드를 넣도록 지시할 수 있습니다. 출력이 생성된 후 코드를 추출하고 실행할 수 있습니다. 
마지막으로, 필요한 경우 코드 실행 엔진(즉, Python 인터프리터)의 출력을 다음 쿼리를 위해 모델에 대한 입력으로 제공할 수 있습니다.

 

6. 체계적인 변경 사항 테스트(이 부분은 좀 어려워서 생략합니다)

측정할 수 있다면 성능 향상이 더 쉽습니다. 경우에 따라 프롬프트를 수정하면 몇 가지 격리된 예제에서 더 나은 성능을 얻을 수 있지만 더 대표적인 예제 집합에서는 전반적인 성능이 저하됩니다. 따라서 변경 사항이 성능에 긍정적인지 확인하려면 포괄적인 테스트 도구 모음("eval"이라고도 함)을 정의해야 할 수 있습니다.

 

•  골드 스탠더드(gold-standard) 답변을 참조하여 모델 출력 평가

 


 

 

생각보다 내용이 좀 길어졌습니다.

최대한 제가 이해하고 옮기느라 시간이 꽤 오래 걸렸는데, 제가 전문가는 아니라서 내용이 부실할 수 있습니다. 덕분에 많이 배웠습니다.

 
반응형

댓글