mirror of
https://github.com/dair-ai/Prompt-Engineering-Guide
synced 2024-11-02 15:40:13 +00:00
The first version
- revision of index.kr.mdx + translation of additional text - revision of tips.kr.mdx
This commit is contained in:
parent
ab2aea9b43
commit
ad5a128249
@ -1,9 +1,18 @@
|
||||
# Prompt Engineering Guide
|
||||
# 프롬프트 엔지니어링 가이드
|
||||
|
||||
프롬프트 엔지니어링은 다양한 어플리케이션과 연구 주제에 언어 모델(LMs)을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화하는 비교적 새로운 분야입니다. 프롬프트 엔지니어링 기술은 대규모 언어 모델(LLMs)의 기능과 한계를 더 잘 이해하는 데 도움이 됩니다.
|
||||
프롬프트 엔지니어링은 다양한 애플리케이션과 연구 주제에 언어모델(LM)을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화하는 비교적 새로운 분야입니다. 프롬프트 엔지니어링 기술은 대규모언어모델(LLM)의 기능과 한계를 더 잘 이해하는 데 도움이 됩니다.
|
||||
|
||||
연구자들은 프롬프트 엔지니어링을 사용하여 질의응답 및 산술 추론과 같은 일반적이고 복잡한 작업에서 LLMs의 역량을 향상시킵니다. 개발자는 프롬프트 엔지니어링을 사용하여 LLMs 및 기타 도구와 인터페이스하는 강력하고 효과적인 프롬프트 기술을 설계합니다.
|
||||
연구자는 프롬프트 엔지니어링을 사용하여 질의응답 및 산술 추론과 같은 일반적 작업부터 복잡한 작업까지 다양한 범위에서 LLM의 역량을 향상시킵니다. 개발자는 프롬프트 엔지니어링을 사용하여 LLM 및 기타 도구와 인터페이스를 형성하는 강력하고 효과적인 프롬프트 기술을 설계합니다.
|
||||
|
||||
프롬프트 엔지니어링은 단순히 프롬프트를 설계하고 개발하는 것만이 아닙니다. 프롬프트 엔지니어링은 LLMs과 상호 작용하고 개발하는데 유용한 다양한 스킬과 기법을 포함합니다. 프롬프트 엔지니어링은 LLMs과 인터페이스하고, 빌드하고, LLMs의 기능을 이해하는데 중요한 기술입니다. 신속한 엔지니어링을 사용하여 LLMs의 안전성을 개선하고 도메인 지식 및 외부 도구로 LLMs을 보강하는 등 새로운 기능을 구축할 수 있습니다.
|
||||
프롬프트 엔지니어링은 단순히 프롬프트를 설계하고 개발하는 것만이 아닙니다. 프롬프트 엔지니어링은 LLM과 상호 작용하고 개발하는 데 유용한 다양한 기술과 기법을 포함합니다. 프롬프트 엔지니어링은 LLM과 인터페이스를 형성하고, 빌드하고, LLM의 기능을 이해하는 데 중요한 기술입니다. 프롬프트 엔지니어링을 사용하여 LLM의 안전성을 개선하고 도메인 지식 및 외부 도구를 통해 LLM을 확장하는 등 새로운 기능을 구축할 수 있습니다.
|
||||
|
||||
LLMs을 사용한 개발에 대한 높은 관심덕에 프롬프트 엔지니어링과 관련된 모든 최신 논문, 학습 가이드, 모델, 강의, 참고 자료, 새로운 LLM 기능 및 도구가 포함된 이 새로운 프롬프트 엔지니어링 가이드를 만들었습니다.
|
||||
LLM을 기반으로 한 개발에 대한 높은 관심에 힘입어 이 새로운 프롬프트 엔지니어링 가이드를 만들었습니다. 프롬프트 엔지니어링에 관한 모든 최신 논문, 학습 가이드, 모델, 강의, 참고 문헌, 새로운 LLM 기능 및 도구가 포함되어 있습니다.
|
||||
|
||||
---
|
||||
높은 수요로 인해 Maven과의 제휴를 통해 [LLM을 위한 프롬프트 엔지니어링에 대한 코호트 기반 과정(Prompt Engineering for LLMs)](https://maven.com/dair-ai/prompt-engineering-llms) 을 새롭게 제공하게 되었습니다.
|
||||
|
||||
이 과정에서는 Meta AI 및 Elastic과 같은 회사에서 근무하며 AI 및 LLM 분야에서 다년간의 경험을 쌓은 [Elvis Saravia](https://www.linkedin.com/in/omarsar/) 가 강사로 함께합니다.
|
||||
|
||||
이 실습 과정에서는 대규모언어모델(LLM)을 통한 효과적인 작업과 구축을 위해 프롬프트 엔지니어링의 기법 및 도구, 사용 사례, 연습, 프로젝트를 다룹니다.
|
||||
|
||||
본 과정의 기존 수강자는 링크드인(LinkedIn), 아마존(Amazon), JP모건 체이스(JPMorgan Chase & Co), 인튜이트(Intuit), 피델리티 인베스트먼트(Fidelity investments), 코인베이스(Coinbase), 구루(Guru) 등 다양한 조직의 소프트웨어 엔지니어부터 AI 연구자 및 실무자에 이르기까지 넓은 범위에 걸쳐 활약하고 있습니다.
|
@ -1,35 +1,32 @@
|
||||
# 프롬프트 디자인 팁
|
||||
# 프롬프트 설계에 관한 일반적인 팁
|
||||
|
||||
프롬프트를 설계할 때는 다음 사항에 주의해주세요:
|
||||
프롬프트를 설계할 때 주의해야 할 몇 가지 사항에 대해 소개합니다.
|
||||
|
||||
### 시작은 간단하게
|
||||
|
||||
프롬프트 설계를 시작할 때는 프롬프트 설계가 최적의 결과를 얻기 위해 많은 실험을 필요로 하는 반복적인 프로세스임을 염두에 두세요. OpenAI나 Cohere에서 제공하는 플레이그라운드로 시작해보는 것이 좋습니다.
|
||||
프롬프트 설계를 시작할 때는 프롬프트 설계가 최적의 결과를 얻기 위해 많은 실험이 필요한 반복적인 과정임을 명심해야 합니다. OpenAI 또는 Cohere에서 제공하는 간단한 플레이그라운드로 시작해 보는 것이 좋습니다.
|
||||
|
||||
간단한 프롬프트에서 시작하여 더 나은 결과를 위해 요소나 문맥을 추가해 나갈 수 있습니다. 이러한 이유에서 프롬프트 버전관리는 중요하겠지요. 이 가이드를 읽으면 구체성, 간결함, 명확함이 더 나은 결과를 가져온다는 것을 알 수 있을 것입니다.
|
||||
간단한 프롬프트로 시작하여 더 나은 결과를 위해 요소나 문맥을 계속해서 추가할 수 있습니다. 따라서 프롬프트의 버전 관리가 중요합니다. 이 가이드에서는 구체성, 단순성, 간결함을 통해 더 나은 결과를 얻을 수 있는 많은 예시를 제시하고 있습니다.
|
||||
|
||||
여러 하위 작업을 포함한 큰 단위 작업을 실행해야한다면, 작업들을 보다 작은 단위로 분해한 뒤 결과가 개선됨에 따라 점진적으로 구축해 나가세요.
|
||||
이러한 방식은 프롬프트 설계 초기 프로세스에 복잡도를 주는 것을 방지할 수 있습니다.
|
||||
여러 하위 작업을 포함한 큰 단위 작업을 실행해야 하는 경우, 작업을 보다 작은 단위로 세분화하고 결과가 개선됨에 따라 점진적으로 구축해 나갈 수 있습니다. 이러한 방식을 통해 프롬프트 설계 초기 과정에 너무 많은 복잡성이 추가되는 것을 방지할 수 있습니다.
|
||||
|
||||
### 지시
|
||||
|
||||
"작성하기", "분류하기", "요약하기", "번역하기", "정렬하기" 등의 명령어를 사용하여 모델에게 달성하고 싶은 결과를 지시함으로써 다양한 간단한 작업에 대한 효과적인 프롬프트를 설계할 수 있습니다.
|
||||
'작성하기', '분류하기', '요약하기', '번역하기', '정렬하기' 등의 명령어를 사용하여 달성하고자 하는 결과를 모델에 지시함으로써 다양한 간단 작업에 대해 효과적인 프롬프트를 설계할 수 있습니다.
|
||||
|
||||
어느 것이 가장 효과적인지 찾아내기 위해서는 여러 차례의 실험이 필요하다는 것을 명심하세요.
|
||||
다양한 키워드, 컨텍스트와 데이터를 활용하여 다양한 지시를 내려보고 특정 사용 사례나 작업에 가장 적합한 방법을 찾아나가세요.
|
||||
일반적으로 수행하려는 작업과 관련된 문맥이 구체적이고 적절할수록 더 좋습니다. 다음 가이드에서 샘플링과 컨텍스트 추가의 중요성에 대해 다뤄보도록 하겠습니다.
|
||||
또한, 무엇이 가장 효과적인지 확인하기 위해서는 여러 차례의 실험이 필요하다는 점을 명심하세요. 다양한 키워드, 문맥 및 데이터를 활용하여 다양한 지시를 내려 보고, 특정 사용 사례와 작업에 가장 적합한 방법을 확인하세요. 일반적으로, 수행하고자 하는 작업과 관련된 문맥이 구체적이고 적절할수록 더 좋은 결과를 얻을 수 있습니다. 다음 가이드에서 샘플링과 문맥 추가의 중요성에 대해 다뤄 보도록 하겠습니다.
|
||||
|
||||
보통은 프롬프트 시작 부분에 지시사항을 명시할 것을 권장합니다. 또한 "##"과 같은 명확한 구분 기호를 사용하여 명령어와 컨텍스트를 구분하는 것도 좋은 방법입니다.
|
||||
프롬프트의 시작 부분에 지시 사항을 명시하는 것이 좋다는 의견도 있습니다. 또 다른 권장 사항으로는 '###'과같이 명확한 구분 기호를 사용하여 명령어와 지시 사항을 구분하는 것을 들 수 있습니다.
|
||||
|
||||
예를 들어:
|
||||
예시:
|
||||
|
||||
_프롬프트:_
|
||||
|
||||
```
|
||||
### 지시 ###
|
||||
아래 문장을 스페인어로 번역해줘:
|
||||
다음 텍스트를 스페인어로 번역해 줘.
|
||||
|
||||
문장: "안녕하세요!"
|
||||
텍스트: "안녕하세요!"
|
||||
```
|
||||
|
||||
_출력:_
|
||||
@ -40,85 +37,82 @@ _출력:_
|
||||
|
||||
### 특이성
|
||||
|
||||
모델이 실행하기를 바라는 작업에 대해 구체적인 지시를 내려주세요. 프롬프트가 상세하고 구체적일수록 결과는 좋아집니다. 특정 출력이나 스타일을 원하는 경우에는 특히 중요합니다. 더 나은 결과를 가져올 특정 토큰이나 키워드는 존재하지 않습니다. 좋은 포맷을 갖춘 상세한 프롬프트를 준비하는 것이 중요합니다. 프롬프트에 예시를 제공하는 것은 특정 포맷으로 출력을 얻는 데 실제로도 매우 효과적입니다.
|
||||
모델에 실행시킬 지시와 작업을 구체적으로 설명하세요. 프롬프트가 상세하고 구체적일수록 결과는 더 좋아집니다. 특정한 출력이나 스타일을 얻고자 하는 경우 특히 중요합니다. 더 나은 결과를 내는 특정한 토큰이나 키워드는 존재하지 않습니다. 좋은 형식과 상세한 프롬프트를 준비하는 것이 중요합니다. 프롬프트에 예시를 제공하는 것은 특정한 형식으로 출력을 얻는 데 실제로도 매우 효과적입니다.
|
||||
|
||||
프롬프트의 길이에는 제한이 있기 때문에 프롬프트 설계 시 그 길이를 염두에 두어야 합니다. 어느정도로 구체적이고 상세하게 대할 것인가를 고려해봐야겠지요. 불필요한 세부 사항을 포함하는 것은 언나 좋은 접근법은 아닙니다. 자세한 내용은 관련성이 있으며 당면한 과제에 기여해야 합니다. 프롬프팅은 많은 실험과 반복을 필요로 합니다. 애플리케이션에 최적인 프롬프트를 찾기 위해 많은 실험과 반복을 권장합니다.
|
||||
프롬프트의 길이에는 제한이 있기 때문에 프롬프트를 설계할 때는 그 사항을 염두에 두어야 합니다. 얼마나 구체적이고 상세하게 작성해야 하는지 생각할 필요가 있습니다. 불필요한 세부 사항을 많이 포함하는 것이 반드시 좋은 접근 방법은 아닙니다. 세부 사항은 관련성이 있어야 하고, 당면한 과제에 기여해야 합니다. 프롬프트의 설계는 많은 실험과 반복이 필요합니다. 애플리케이션에 맞는 프롬프트의 최적화를 위해 많은 실험과 반복을 거듭할 것을 권장합니다.
|
||||
|
||||
예시로, 텍스트에서 특정 정보를 추출하는 간단한 프롬프트를 시도해 봅시다.
|
||||
텍스트에서 특정 정보를 추출하는 간단한 프롬프트의 예를 살펴봅시다.
|
||||
|
||||
_프롬프트:_
|
||||
|
||||
```
|
||||
다음 문장에서 장소의 이름을 추출해줘.
|
||||
다음 텍스트에서 장소의 이름을 추출해 줘.
|
||||
|
||||
원하는 형식:
|
||||
Place: <comma_separated_list_of_company_names>
|
||||
|
||||
입력: "비록 이러한 발전이 연구원들에게 격려가 되지만, 많은 것들이 여전히 미스터리입니다. 리스본의 Champalimaud 센터 for the Unknown의 신경 면역학자인 Henrique Veiga-Fernandes는 "우리는 종종 뇌와 주변부에서 보는 효과 사이에 블랙박스를 가지고 있습니다,"라고 말합니다. "만약 우리가 그것을 치료적 맥락에서 사용하고 싶다면, 우리는 실제로 그 작용기전을 이해할 필요가 있습니다.""
|
||||
입력: "이러한 발전은 연구자들에게 격려가 되지만, 많은 것들이 여전히 수수께끼입니다. 리스본에 있는 샴팔리마우드 센터(CCU: Champalimaud Centre for the Unknown)의 신경면역학자인 Henrique Veiga-Fernandes는 "뇌와 주변부에서 보이는 효과 사이에 블랙박스가 있는 경우가 종종 있습니다," 라고 말합니다. 그리고 다음과 같이 덧붙입니다. "치료적 맥락에서 이를 사용하고자 할 경우, 그 메커니즘을 실제로 이해할 필요가 있습니다.""
|
||||
|
||||
```
|
||||
|
||||
_출력:_
|
||||
|
||||
```
|
||||
장소: Champalimaud 센터 for the Unknown, 리스본
|
||||
장소: 샴팔리마우드 센터(CCU: Champalimaud Centre for the Unknown), 리스본
|
||||
```
|
||||
|
||||
입력 텍스트의 출처는 [this Nature article](https://www.nature.com/articles/d41586-023-00509-z) 입니다.
|
||||
입력 텍스트의 출처는 [네이처(Nature)지의 이 논문](https://www.nature.com/articles/d41586-023-00509-z) 입니다.
|
||||
|
||||
### 부정확성을 피하라
|
||||
### 부정확성 피하기
|
||||
|
||||
위와 같은 팁을 고려해서 지나치게 상세하게 기술하거나 포맷을 개선하는 프롬프트를 급작스럽게 발전시킨다면, 부정확한 설명을 만들어 버리는 등 함정에 빠지기 쉽습니다. 프롬프트는 구체적이고 직접적이어야 좋은 결과를 얻을 수 있습니다. 직접적일수록 효과적인 메시지가 전달됩니다 -- 효과적인 커뮤니케이션 방식과 꽤나 흡사하지요.
|
||||
상세하게 기술하고 형식을 개선하는 방법에 대한 위 내용을 고려할 경우, 프롬프트를 교묘하게 다루려 하거나 부정확한 설명을 작성하는 등의 함정에 빠지기 쉽습니다. 프롬프트는 구체적이고 직접적이어야 더욱 좋은 결과를 얻을 수 있습니다. 직접적일수록 메시지가 더 효과적으로 전달됩니다. 효과적인 커뮤니케이션 방식과 매우 유사하다고 할 수 있습니다.
|
||||
|
||||
예를 들어 프롬프트 엔지니어링의 개념을 배우고 싶을 수도 있습니다. 그럼 이렇게 시도해 보는 것입니다:
|
||||
프롬프트 엔지니어링의 개념을 배우고자 하는 경우를 예로 들어 보겠습니다. 이 경우, 다음과 같이 시도해 볼 수 있습니다.
|
||||
|
||||
```
|
||||
프롬프트 엔지니어링의 개념을 설명해 줘. 설명은 간결한 몇 문장으로, 너무 자세히는 하지말아줘.
|
||||
프롬프트 엔지니어링의 개념을 설명해 줘. 설명은 간결한 몇 문장으로만 하고 너무 자세히는 하지 말아 줘.
|
||||
```
|
||||
|
||||
위의 프롬프트는 어떤 어조로 어느정도의 분량의 문장들로 설명해주기를 명확하게 지시하지 않았습니다. 물론 위의 프롬프트로도 여전히 좋은 답변을 얻을 수 있겠지만 매우 구체적이고 간결하며 정곡을 찌르는 프롬프트가 좋습니다. 마치 다음과 같은 것입니다.
|
||||
위의 프롬프트에서는 몇 문장을 사용해야 하는지, 어떤 스타일을 사용해야 하는지 명확하게 지시되어 있지 않습니다. 물론 이 프롬프트로도 여전히 좋은 답변을 얻을 수는 있겠지만, 매우 구체적이고 간결하며 정곡을 찌르는 프롬프트일수록 좋습니다. 적절한 예로 다음을 살펴봅시다.
|
||||
|
||||
```
|
||||
고등학생에게 프롬프트 엔지니어링 개념을 2~3줄의 문장으로 설명해 주세요.
|
||||
고등학생에게 프롬프트 엔지니어링의 개념을 2~3개의 문장으로 설명해 줘.
|
||||
```
|
||||
|
||||
### 할까 말까?
|
||||
### 해야 하는 것과 하지 말아야 할 것
|
||||
|
||||
프롬프트를 설계할 시 적용할 수 있는 또 다른 일반적인 팁은 '하지 말아야 할 것'보다는 '해야하는 것'을 말하는 것입니다. 이를 통해 보다 구체적이고 모델로부터 좋은 답변을 얻기 위한 세부 사항에 초점이 맞춰집니다.
|
||||
프롬프트를 설계할 때 적용할 수 있는 또 다른 일반적인 팁은 '하지 말아야 할 것'보다는 '해야 하는 것'에 초점을 두는 것입니다. 이렇게 하면, 보다 구체적이고 모델로부터 좋은 답변을 이끌어내는 세부 사항에 집중할 수 있습니다.
|
||||
|
||||
아래는 제가 '하지 말아야 할 것'에 초점을 맞춘 지시 때문에 영화 추천 챗봇이 실패한 예시입니다.
|
||||
다음은 '하지 말아야 할 것'에 초점을 둔 지시로 인해 영화 추천 챗봇이 실패한 예시입니다.
|
||||
|
||||
_프롬프트:_
|
||||
|
||||
```
|
||||
다음은 고객에게 영화를 추천하는 보조원입니다. 관심사를 묻지 말고 개인정보도 묻지 마세요.
|
||||
|
||||
고객: 제 흥미를 바탕으로 영화를 추천해 주세요.
|
||||
|
||||
보조원:
|
||||
다음은 고객에게 영화를 추천하는 상담원입니다. 관심사를 묻지 마세요. 개인정보를 묻지 마세요.
|
||||
고객: 제 관심사를 바탕으로 영화를 추천해 주세요.
|
||||
상담원:
|
||||
```
|
||||
|
||||
_출력:_
|
||||
|
||||
```
|
||||
네, 당신의 관심을 바탕으로 영화를 추천해 드리겠습니다.액션, 코미디, 로맨스, 아니면 어떤 종류의 영화를 좋아하세요?
|
||||
네, 당신의 관심사를 바탕으로 영화를 추천해 드리겠습니다. 액션, 코미디, 로맨스, 아니면 그 밖의 장르, 어떤 종류의 영화를 좋아하세요?
|
||||
```
|
||||
|
||||
다음은 개선된 프롬프트입니다:
|
||||
개선된 프롬프트는 다음과 같습니다.
|
||||
|
||||
_프롬프트:_
|
||||
|
||||
```
|
||||
다음은 고객에게 영화를 추천하는 보조원입니다. 보조원은는 전세계적으로 유행하는 영화를 추천해줍니다. 사용자의 관심사를 묻는 것을 자제하고 개인 정보를 묻는 것 또한 피해야 합니다. 추천할만한 마땅한 영화가 없는 경우 "죄송합니다. 추천할 영화를 찾을 수 없습니다."라고 응답해야 합니다.
|
||||
다음은 고객에게 영화를 추천하는 상담원입니다. 상담원은 글로벌 인기 영화 중에서 영화를 추천해야 합니다. 사용자의 관심사를 묻지 않고, 개인 정보를 요구하지 않아야 합니다. 상담원이 추천할 영화가 없는 경우 "죄송합니다. 오늘 추천할 영화를 찾을 수 없습니다," 라고 응답해야 합니다.
|
||||
|
||||
고객: 제 흥미를 바탕으로 영화를 추천해 주세요.
|
||||
보조원:
|
||||
고객: 제 관심사를 바탕으로 영화를 추천해 주세요.
|
||||
상담원:
|
||||
```
|
||||
|
||||
_출력:_
|
||||
|
||||
```
|
||||
죄송합니다만, 당신의 관심사에 관한 정보는 찾을 수 없었습니다. 하지만 여기 지금 가장 트렌디한 영화 목록이 있습니다: [영화 목록]. 좋아하는 것을 찾으시길 바라요!
|
||||
죄송합니다만, 당신의 관심사에 관한 정보를 찾을 수 없었습니다. 하지만 지금 가장 인기 있는 영화에 대한 목록이 있습니다: [영화 목록]. 좋아하는 것을 찾으시길 바랄게요!
|
||||
```
|
||||
|
||||
위의 예시 중 몇가지는 ["Best practices for prompt engineering with OpenAI API" article.](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api)에서 발췌되었습니다.
|
||||
위의 예시 중 몇 가지는 ["OpenAI API를 사용한 프롬프트 엔지니어링의 모범 사례(Best practices for prompt engineering with OpenAI API)"](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api)에서 발췌하였습니다.
|
||||
|
Loading…
Reference in New Issue
Block a user