본문 바로가기

LLM/GPT활용

Prompt engineering

<요약>

1. 명확한 명령을 쓰세요

전술 1) 더 적절한 답변을 얻기 위해 쿼리에 상세 내용을 포함하세요

전술 2)  모델이 페르소나를 채택하게 하세요 (모델에게 특정 성격을 주입시키세요)

전술 3) 입력 구분을 표시하기 위해 구분자를 사용하세요

전술 4) 작업을 완료하기 위한 단계를 구체화를 지시하세요

전술 5) 예시를 제공하세요 (Few Shot 프롬프트)

전술 6) 원하는 출력의 길이를 구체화 하세요

 

2. 참조 텍스트를 제공하세요

전술 7) 참조 텍스트를 사용해 모델이 답변하도록 지시할 수 있습니다 (RAG 기반 기술)

전술 8) 참조 텍스트를 인용처를 명시하게 할 수 있습니다.

 

3. 복잡한 업무를 작은 단위로 쪼개세요

전술 9) 의도 분류를 사용하여 사용자 쿼리와 가장 관련성이 높은 지침을 식별합니다.

전술 10) 매우 긴 대화 어플리케이션의 경우 이전 대화를 요약하거나 필터링합니다.

전술 11) 긴 문서를 부분적으로 요약하고 재귀적으로 전체 요약을 구성합니다.

 

4. 모델에게 생각할 시간을 주세요

전술 12) 모델이 자체 솔루션을 찾도록 지시하세요

전술 13) 내부 독백이나 쿼리 연속을 사용하여 모델의 추론 프로세스를 숨깁니다

전술 14) 이전 패스에서 누락된 것이 있는지 물어 봅니다.

 

5. 외부 도구를 사용하세요

전술 15) 임베딩 기반 검색을 사용하여 효율적인 지식 검색 구현을 합니다.  (RAG 기반 기술)

전술 16) 코드 실행을 사용하여 정확한 계산을 수행하거나, 외부 API 호출합니다.

전술 17) 모델에 특정 기능에 대한 접근 권한 부여합니다.

 

6. 변경 사항을 시스템적으로 테스트 하세요

전술 18) 최적의 답변을 기반으로 모델 출력을 평가 합니다.

 

참조 사이트

- https://platform.openai.com/docs/guides/prompt-engineering

 

고찰)

- 문제 해결사에게 원하는 답변을 얻기 위해서는 구체적인 요구사항을 작성해야 하는 것과 동일해 보인다

  - 원하는 포맷, 글자수(단락 수)를 요구한다.

- 복잡한 문제일 경우 쪼개서 답변하게 한다

- USER/ASSISTANT 예시를 한번 이상 제공함으로써 답변 패턴과 경향을 주입할 수도 있다.


 

해당 가이드는 LLM에서 더 나은 결과를 얻기 위한 전략, 전술입니다. 여기서 제시된 방법은 결합해서 사용가능합니다. 실험을 통해 본인에게 맞는 방법을 찾는 것을 권장드립니다.

 

여기의 몇몇 예시는 우리(OpenAI)의 가장 유능한 모델에서 증명되었습니다. e.g. GPT-4

특정 테스크에서 어떠한 모델이 실패하고, 더 나은 모델이 존재한다면 더 나은 모델을 사용하는 것이 바람직 합니다.

 

아래에서 OpenAI 모델이 가능한 프롬프트를 확인해 볼 수 있습니다.

Examples - OpenAI API

 

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

1. 명확한 명령을 쓰세요

- 출력이 너무 길면 짧게 요청하게요. 출력이 너무 간단하면 전문가 레벨로 요청하세요. 포멧이 마음에 들지 않으면 원하는 포멧으로 요청하세요. 모델이 덜 추측하게 할 수록 원하는 답변을 더 얻을 수 있습니다.

 

전술 1) 더 적절한 답변을 얻기 위해 쿼리에 상세 내용을 포함하세요

전술 2)  모델이 페르소나를 채택하게 하세요 (모델에게 특정 성격을 주입시키세요)

전술 3) 입력 구분을 표시하기 위해 구분자를 사용하세요

전술 4) 작업을 완료하기 위한 단계를 구체화를 지시하세요

전술 5) 예시를 제공하세요 (Few Shot 프롬프트)

전술 6) 원하는 출력의 길이를 구체화 하세요

 

2. 참조 텍스트를 제공하세요

- 언어 모델은 특히 난해한(esoteric) 주제나 인용 및 URL에 대한 질문을 받을 때 자신 있게 가짜 답변을 만들어낼 수 있습니다. 노트가 학생의 시험 성적을 높이는 데 도움이 되는 것과 마찬가지로 이러한 모델에 참조 텍스트를 제공하면 더 적은 수의 조작으로 답변하는 데 도움이 될 수 있습니다.

 

전술 7) 참조 텍스트를 사용해 모델이 답변하도록 지시할 수 있습니다 (RAG 기반 기술)

전술 8) 참조 텍스트를 인용처를 명시하게 할 수 있습니다.

 

3. 복잡한 업무를 작은 단위로 쪼개세요

- 좋은 소프트웨어 공학이 복잡한 시스템으 모듈러 단위로 쪼개는 것 처럼, 언어 모델 작업도 마찬가지 입니다. 더 나아가 복잡한 작업은 작은 단위의 이전 작업의 출력을 사용하여 이후 작업의 입력을 구성하는 작업으로 재 정의 될 수 있습니다.

 

전술 9) 의도 분류를 사용하여 사용자 쿼리와 가장 관련성이 높은 지침을 식별합니다.   (<-- 현재 여기 까지 정리!)

전술 10) 매우 긴 대화 어플리케이션의 경우 이전 대화를 요약하거나 필터링합니다.

전술 11) 긴 문서를 부분적으로 요약하고 재귀적으로 전체 요약을 구성합니다.

 

4. 모델에게 생각할 시간을 주세요

- 모델에게 답변을 바로 요청하기 보단 "생각의 사슬(Chain of thought)"을 요청하면, 모델이 믿을 만한 답변을 추론하는데 도움이 될 수 있습니다.

 

전술 12) 모델이 자체 솔루션을 찾도록 지시하세요

전술 13) 내부 독백이나 쿼리 연속을 사용하여 모델의 추론 프로세스를 숨깁니다

전술 14) 이전 패스에서 누락된 것이 있는지 물어 봅니다.

 

5. 외부 도구를 사용하세요

- 다른 도구의 출력을 모델에게 제공함으로써 모델의 약점을 보완하세요. 예를 들어 RAG은 모델에게 관련된 문서를 제공 할 수 있습니다. OpenAI의 Code Interpreter와 같은 코드 실행 엔진은 수학 문제를 풀고 코드를 실행할 수 있습니다. 

즉, 언어 모델 외에 Code Interpreter과 같은 다른 도구를 활용 할 수 있습니다. 

 

전술 15) 임베딩 기반 검색을 사용하여 효율적인 지식 검색 구현을 합니다.  (RAG 기반 기술)

전술 16) 코드 실행을 사용하여 정확한 계산을 수행하거나, 외부 API 호출합니다.

전술 17) 모델에 특정 기능에 대한 접근 권한 부여합니다.

 

6. 변경 사항을 시스템적으로 테스트 하세요

- 성능을 측정할 수 있다면 개선도 쉬워 집니다.  프롬프트 수정은 몇몇 예제에서는 나은 성능을 보이지만, 전반적인 성능은 떨어뜨릴수 있습니다. 따라서, 테스트 모음을 정의할 필요가 있습니다. 

 

전술 18) 최적의 답변을 기반으로 모델 출력을 평가 합니다.

 


 

전술 1) 더 적절한 답변을 얻기 위해 쿼리에 상세 내용을 포함하세요

Worse Better
How do I add numbers in Excel? How do I add up a row of dollar amounts in Excel? I want to do this automatically for a whole sheet of rows with all the totals ending up on the right in a column called "Total".
Who’s president? Who was the president of Mexico in 2021, and how frequently are elections held?
Write code to calculate the Fibonacci sequence. Write a TypeScript function to efficiently calculate the Fibonacci sequence. Comment the code liberally to explain what each piece does and why it's written that way.
Summarize the meeting notes. Summarize the meeting notes in a single paragraph. Then write a markdown list of the speakers and each of their key points. Finally, list the next steps or action items suggested by the speakers, if any.

 

 

전술 2)  모델이 페르소나를 채택하게 하세요 (모델에게 특정 성격을 주입시키세요)

- Playground - OpenAI API

SYSTEM When I ask for help to write something, you will reply with a document that contains at least one joke or playful comment in every paragraph.
( 내가 글을 쓰기 위해 도움을 요청하면, 당신은 모든 문단에 적어도 하나의 농담이나 장난스러운 코멘트가 포함된 문서로 답장을 보낼 것입니다.)
USER Write a thank you note to my steel bolt vendor for getting the delivery in on time and in short notice. This made it possible for us to deliver an important order.
(제 시간에 짧은 시간 안에 배송을 완료한 강철 볼트 공급업체에 감사 편지를 작성하세요. 이를 통해 우리는 중요한 주문을 전달할 수 있었습니다.)

 

>>> ASSISTAN의 답변 없이, USER의 상황을 먼저 작성하여 상황을 가정할 수 있습니다.

 

 

전술 3) 입력 구분을 표시하기 위해 구분자를 사용하세요

- 삼중 따옴표(""" """), XML 테그, 섹션 제목과 같은 구분기호는 처리가 필요한 텍스트 섹션을 구분하는데(demarcate) 도움을 줍니다.

 

>>> 해당 방법은 출력 결과에 변화를 주는 것은 아니지만, 복잡한 작업일 수록 더욱 중요해 집니다. 모델이 당신의 질문에 대해 이해하는데 시간을 쓰게 하지 마세요

 

 

전술 4) 작업을 완료하기 위한 단계를 구체화를 지시하세요

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

 

 

전술 5) 예시를 제공하세요 (Few Shot 프롬프트)

- 모든 예에 적용되는 일반 지침을 제공하는 것은 (작업의 모든 순열을 예를 통해 보여주는 것? 보다) 효율적 이지만, 경우에 따라 예시를 제공하는 것이 쉬울 수도 있습니다.

- 예를 들어, 명시적으로 설명하기 어려운 사용자 쿼리에 모델이 쿼리 스타일을 복사하도록 의도할 수 있습니다.

 

>> 답변 받고자 하는 스타일의 답변을 미리 제공해주어, 모델이 스타일을 따라하게 유도할 수 있다.

 

 

전술 6) 원하는 출력의 길이를 구체화 하세요

- 주어진 목표 갯수의 단어 길이, 문장 갯수, 단락 갯수를 요구합니다. 단어 갯수 요구는 정확하지 않을 수 있습니다.

 

 

전술 7) 참조 텍스트를 사용해 모델이 답변하도록 지시할 수 있습니다.

- 현재 쿼리와 관련된 신뢰할 수 있는 정보를 모델에게 제공하면, 정보를 바탕으로 답변을 구성하도록 모델에 지시할 수 있습니다.

- 모든 모델에는 제한된 컨텍스트 창이 있으므로, 동적으로 정보를 조회할 수 있는 방법이 필요합니다. 임베딩을 사용하여 효율적인 지식 검색을 구현할 수 있습니다.  

>>> 해당 방법은 RAG에서 유사한 문장을 읽어와 LLM에게 Context로 제공하여 더 높은 수준(더 상세한) 답변을 얻게 하는 것과 유사한 것 같다. 혹은 해당 깨닳음이 RAG 개발의 동기가 되었을 수도 있을 것 같다는 생각이 들었음.

 

 

전술 9) 의도 분류를 사용하여 사용자 쿼리와 가장 관련성이 높은 지침을 식별합니다.

 

 

전술 12) 모델이 자체 솔루션을 찾도록 지시하세요

>>> USER 안에서 문제를 제기하고, 학생이 문제를 해결하는 예시를 보여준다. ASSISTANT가 이를 바로 잡는 예시를 추가 해 줄수도 있다. 이는 마치 어린아이에게 문제를 해결하는 방법을 가르쳐 주는 것과 비슷해 보인다.

반응형