Update settings.kr.mdx and examples.kr.mdx

This commit is contained in:
Jiwon Kim 2023-07-23 11:46:33 +09:00
parent ab2aea9b43
commit c1f9ca25b8
2 changed files with 99 additions and 136 deletions

View File

@ -1,99 +1,89 @@
# 프롬프트 예시 # 프롬프트 예시
이전 파트에서, LLM에 프롬프트를 입력하는 기본적인 예를 다뤄보았습니다. 이전 절에서, 대규모언어모델(LLM)에 프롬프트를 입력하는 기본적인 예를 살펴보았습니다.
이번에는 프롬프트가 작업을 수행하는 추가 예시를 제공하고 그 과정에서 핵심 개념을 살펴보겠습니다. 개념을 배우는 가장 좋은 방법은 예시를 통해 이해하는 것입니다. 아래에서 잘 작성된 프롬프트가 다른 유형의 작업을 수행하기 위해 어떻게 사용되는지에 대한 몇 가지 예를 다루고 있습니다. 이번 절에서는 프롬프트를 사용하여 다양한 작업을 수행하는 예시를 통해 핵심 개념을 살펴보겠습니다. 종종, 개념을 배우는 가장 좋은 방법은 예시를 통해 이해하는 것입니다. 아래에서 잘 작성된 프롬프트가 서로 다른 유형의 작업을 수행하기 위해 어떻게 사용되는지에 대한 몇 가지 예를 다루어보겠습니다.
Topics: Topics:
- [문장 요약](#문장-요약)
- [문장 요약](#문장 요약) - [정보 추출](#정보-추출)
- [정보 추출](#정보 추출) - [질의응답](#질의응답)
- [질의 응답](#질의 응답) - [텍스트 분류](#텍스트-분류)
- [텍스트 분류](#텍스트 분류) - [대화](#대화)
- [회화](#회화) - [코드 생성](#코드-생성)
- [코드 생성](#코드 생성)
- [추론](#추론) - [추론](#추론)
--- ---
## 문장 요약 ## 문장 요약
문장 요약은 자연어 생성의 대표적인 작업 중 하나입니다. 문장 요약은 여러 주제와 도메인을 포함합니다. 사실, 언어 모델의 가장 유망한 애플리케이션 중 하나는 기사와 개념을 빠르고 읽기 쉽게 요약할 수 있는 능력입니다. 프롬프트를 사용하여 간단한 요약 작업을 시도해 보겠습니다.
문장 요약은 자연어 생성의 대표적인 작업 중 하나입니다. 문장 요약은 여러 주제와 도메인을 포함합니다. 사실, 언어 모델의 가장 유망한 응용 프로그램 중 하나는 기사와 개념을 빠르게 요약할 수 있는 능력입니다. 프롬프트를 사용하여 간단한 요약 작업을 실행해보겠습니다.
예를 들어 항생제에 대해 배우고 싶다면 다음과 같은 프롬프트를 시도할 수 있습니다: 예를 들어 항생제에 대해 배우고 싶다면 다음과 같은 프롬프트를 시도할 수 있습니다:
_프롬프트:_ *Prompt:*
``` ```
항생제에 대해 설명해줘 항생제에 대해 설명해
A: A:
``` ```
_출력:_ *Output:*
``` ```
항생제는 세균 감염을 치료하기 위해 사용되는 약제의 일종입니다. 세균을 죽이거나 재생을 방지하여 몸의 면역계가 감염에 대항할 수 있도록 합니다. 항생제는 정제, 캡슐, 액체의 형태로 일반적으로 입을 통해 섭취하지만 경우에 따라 정맥 내 투여되기도 합니다. 항생제는 바이러스 감염에는 효과가 없으며 남용 시 항생제 내성을 일으킬 수 있습니다. 항생제는 세균 감염을 치료하기 위해 사용되는 약물의 일종입니다. 세균을 죽이거나 번식을 방지하여 신체의 면역 체계가 감염에 대항할 수 있도록 합니다. 항생제는 보통 알약, 캡슐, 액체의 형태로 경구 복용하거나 때때로 정맥 주사로 투여되기도 합니다. 항생제는 바이러스 감염에는 효과적이지 않고, 남용할 경우 항생제 내성이 생길 수 있습니다.
``` ```
"A:"는 질답 형식에 사용되는 명시적 프롬프트 형식을 띄고있습니다. 저는 모델에게 추가 질문을 할 것이라고 암시하기위해 이 방법을 사용했습니다. 이 예시가 어느 방식으로 유용한가에 대해서는 추후 살펴보도록하겠습니다. 우리가 원했던 것 보다 훨씬 더 많은 양의 정보를 받아서 요약이 필요하다고 가정해보도록 하겠습니다. 실제로 모델에게 다음과 같이 한 문장으로 요약하도록 지시할 수 있습니다: "A:"는 질의응답에 사용되는 명시적 프롬프트 형식을 띠고 있습니다. 여러분은 모델에게 추가적으로 답변을 기대하고 있다는 것을 전달하기 위해서 이 방법을 사용했습니다. 이 예시가 얼마나 유용한가에 대해서는 추후에 다른 예시에서 살펴보도록 하겠습니다. 이제 이 출력이 우리가 원했던 것보다 더 많은 양의 정보라서 추가적인 요약이 필요하다고 가정해 보겠습니다. 실제로 모델에게 다음과 같이 한 문장으로 요약하도록 지시할 수 있습니다:
_프롬프트:_
*Prompt:*
``` ```
항생제는 세균 감염을 치료하기 위해 사용되는 약제의 일종입니다. 세균을 죽이거나 재생을 방지하여 몸의 면역계가 감염에 대항할 수 있도록 합니다. 항생제는 정제, 캡슐, 액체의 형태로 일반적으로 입을 통해 섭취하지만 경우에 따라 정맥 내 투여되기도 합니다. 항생제는 바이러스 감염에는 효과가 없으며 남용 시 항생제 내성을 일으킬 수 있습니다. 항생제는 세균 감염을 치료하기 위해 사용되는 약물의 일종입니다. 세균을 죽이거나 번식을 방지하여 신체의 면역 체계가 감염에 대항할 수 있도록 합니다. 항생제는 보통 알약, 캡슐, 액체의 형태로 경구 복용하거나 때때로 정맥 주사로 투여되기도 합니다. 항생제는 바이러스 감염에는 효과적이지 않고, 남용할 경우 항생제 내성이 생길 수 있습니다.
위 내용을 한 문장으로 요약해줘. 위 내용을 한 문장으로 요약해 줘:
``` ```
_출력:_ *Output:*
``` ```
항생제는 박테리아를 죽이거나 번식을 막음으로써 감염을 치료하는 데 사용되는 약이지만, 바이러스에 효과적이지 않고 과도한 사용은 항생제 내성을 초래할 수 있습니다. 항생제는 박테리아를 죽이거나 번식을 막음으로써 감염을 치료하는 데 사용되는 약이지만, 바이러스에 효과적이지 않고 과도한 사용은 항생제 내성을 초래할 수 있습니다.
``` ```
위 대답의 정확성은 추후 가이드에서 다룰 예정이므로 차치하고, 일단 모델이 단락을 한 문장으로 요약했다는 것에 초점을 맞춰보겠습니다. 좀 더 정확한 지시를 내리는 방법에 대해서도 뒷 장에서 살펴볼 예정이므로 잠시 잊어버리고 지금 당장은 자유롭게 더 나은 결과를 얻을 수 있는 방법을 실험해보세요. 위 대답의 정확성은 추후 가이드에서 다룰 예정이므로 차치하고, 일단 모델이 단락을 한 문장으로 요약했다는 것에 초점을 맞춰보겠습니다. 좀 더 정확한 지시를 내리는 방법에 대해서도 뒷 장에서 살펴보기로 하고, 지금은 자유롭게 더 나은 결과를 얻을 수 있는지 실험해 보겠습니다.
--- ---
## 정보 추출 ## 정보 추출
언어 모델은 자연어 생성과 관련된 작업을 수행하도록 훈련되었지만 분류나 다양한 자연어 처리(NLP) 작업을 수행할 수도 있습니다.
언어 모델은 자연어 생성 관련 작업을 수행하도록 훈련되었지만 분류나 다양한 자연어 처리(NLP) 작업을 수행할 수도 있습니다. 주어진 단락에서 정보를 추출하는 프롬프트의 예시를 살펴보겠습니다.
주어진 단락에서 정보를 추출하는 프롬프트의 예시를 살펴봅시다.
_프롬프트:_
*Prompt:*
``` ```
연구 논문의 저자 기고문과 인정서는 저자들이 원고 작성과 분석에 ChatGPT 등 AI 기술을 사용했는지 여부와 범위를 명확하고 구체적으로 명시해야 합니다. 또한 어떤 LLM이 사용되었는지 표시해야 합니다. 이를 통해 편집자와 검토자 잠재적 편향, 부정확성 및 부적절한 출처에 대해 원고를 보다 신중하게 검토하도록 유도할 수 있습니다. 마찬가지로, 과학 저널은 투고된 원고 선정 시 LLMs를 사용한 경우에는 그 이력을 투명하게 공개해야 합니다. 연구 논문의 저자 기고문과 인정서는 저자들이 원고 작성과 분석에 ChatGPT 등 AI 기술을 사용했는지 여부와 범위를 명확하고 구체적으로 명시해야 합니다. 또한 어떤 LLM이 사용되었는지 표시해야 합니다. 이를 통해 편집자와 검토자가 잠재적 편향, 부정확성 및 부적절한 출처에 대해 원고를 보다 신중하게 검토하도록 유도할 수 있습니다. 마찬가지로, 과학 저널은 투고된 원고 선정 시 LLM 사용 여부를 투명하게 공개해야 합니다.
위 단락에서 언급 대규모 언어 모델 기반 제품을 알려줘. 위 단락에서 언급 대규모 언어 모델 기반 제품을 알려줘.
``` ```
_출력:_ *Output:*
``` ```
위 단락에서 언급 대규모 언어 모델 기반 제품은 ChatGPT입니다. 위 단락에서 언급 대규모 언어 모델 기반 제품은 ChatGPT입니다.
``` ```
위의 결과를 개선하는 방법은 더러 있겠지만, 이미 그 자체로 꽤 쓸만합니다. 위의 결과를 개선하는 방법은 여러 가지가 있겠지만, 이미 그 자체로도 꽤 유용합니다.
이제 우리는 단순한 지시만으로 모델이 다양한 작업을 수행하도록 할 수 있다는 사실을 배웠습니다. 이는 AI 제품 개발자들이 이미 강력한 제품이나 서비스를 구현하기 위해 사용하는 강력한 능력입니다. 이제 우리는 단순히 무엇을 할지 지시하는 것으로 모델이 다양한 작업을 수행하도록 할 수 있다는 사실을 배웠습니다. 이는 AI 제품 개발자들이 이미 강력한 제품이나 서비스를 구현하기 위해 사용하고 있는 강력한 능력입니다.
원본 출처: [ChatGPT: five priorities for research](https://www.nature.com/articles/d41586-023-00288-7) 원본 출처: [ChatGPT: five priorities for research](https://www.nature.com/articles/d41586-023-00288-7)
--- ---
## 질의응답
## 질의 응답 모델로부터 원하는 답변을 끌어내는 가장 좋은 방법 중 하나는 프롬프트 형식을 개선하는 것입니다. 앞서 살펴본 바와 같이 프롬프트는 지시, 문맥, 입력 데이터와 출력 지시자를 조합하여 더 나은 결과를 얻을 수 있습니다. 이러한 요소는 필수적인 것은 아니지만, 지시가 구체적일수록 더 좋은 결과를 얻을 수 있습니다. 다음은 보다 구조화된 프롬프트를 실행해 보겠습니다.
모델로부터 원하는 답변을 끌어내는 가장 좋은 방법 중 하나는 프롬프트 포맷을 개선하는 것입니다. 앞서 살펴본 바와 같이 프롬프트는 지시, 문맥, 입력 및 출력 인디케이터를 조합하여 더 나은 결과를 얻을 수 있습니다. 이러한 요소는 필수적인 것은 아니지만, 지시가 구체적일수록 더 좋은 결과를 얻을 수 있기때문에 적절히 사용하는 방법을 익히세요. 다음은 보다 구조화된 프롬프트를 실행해보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
아래 문맥을 고려해서 질문에 답변해줘. 답변은 짧고 간결하게 해줘. 답변이 정확하지 않다면, 「확실치 않은 대답」 이라고 응답해줘. 아래 문맥을 고려해서 질문에 답변해 줘. 답변은 짧고 간결하게 해 줘. 답변이 정확하지 않다면, 「확실치 않은 대답」이라고 응답해 줘.
문맥: Teplizumab은 Ortho Pharmaceutical이라고 불리는 뉴저지의 약제 회사에서 유래했다. 그래서 과학자들은 OKT3라는 항체의 초기 버전을 생성했다. 원래 쥐에서 유래된 이 분자는 T 세포의 표면에 결합하여 세포를 죽이는 잠재력을 제한할 수 있다. 1986년, 신장 이식 후 장기 거부 반응 예방을 위해 승인되어 인간이 사용할 수 있는 최초의 치료용 항체가 되었다. 문맥: Teplizumab은 Ortho Pharmaceutical이라고 불리는 뉴저지의 약제 회사에서 유래했다. 그곳에서, 과학자들은 OKT3라는 항체의 초기 버전을 만들어냈다. 원래 쥐에서 유래된 이 분자는 T 세포의 표면에 결합하여 세포를 죽이는 잠재력을 제한할 수 있다. 1986년, 신장 이식 후 장기 거부 반응 예방을 위해 승인되어 인간이 사용할 수 있는 최초의 치료용 항체가 되었다.
질문: OKT3는 어디서 유래했는가? 질문: OKT3는 어디서 유래했는가?
@ -101,44 +91,38 @@ _프롬프트:_
답변: 답변:
``` ```
_출력:_ *Output:*
``` ```
쥐. 쥐.
``` ```
문맥 원문의 출처는 [Nature](https://www.nature.com/articles/d41586-023-00400-x) 입니다. 문맥의 출처는 [Nature](https://www.nature.com/articles/d41586-023-00400-x) 입니다.
--- ---
## 텍스트 분류 ## 텍스트 분류
지금까지 우리는 간단한 지시를 사용하여 작업을 수행했습니다. 프롬프트 엔지니어로서 점점 더 나은 지시를 내리는 것은 기본 소양입니다. 하지만 그것이 전부는 아닙니다. 더 까다로운 작업을 수행하기 위해서는 지시만으로는 충분하지 않다는 것을 깨닫게 될 것입니다. 문맥과 여러 요소들을 고려하여 적절한 프롬프트를 사용할 필요가 있습니다. `입력 데이터`나 `예시`또한 요소로 할 수 있습니다.
지금 까지, 우리는 작업 수행을 위 간단한 지시들을 사용해보았습니다. 프롬프트 엔지니어로서 점점 더 바른 지시를 내리는 것은 기본 소양입니다. 하지만 그것만이 전부는 아닙니다. 더 까다로운 작업을 수행하기 위해서는 지시만으로는 해결되지 않는다는 것을 깨닫게 될 것입니다. 문맥과 여러 요소들을 고려하여 적절한 프롬프트를 사용할 필요가 있습니다. `데이터 입력`이나 `예시`또한 요소로 사용됩니다. 텍스트 분류를 예시로 이를 설명해 보겠습니다.
텍스트 분류 예시를 제공하여 이를 설명해보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
문장을 중립, 부정 혹은 긍정으로 분류해줘. 문장을 neutral, 부정 혹은 긍정으로 분류해 줘.
문구: 그 음식은 그럭저럭이었어. 문구: 그 음식은 그럭저럭이었어.
감정: 감정:
``` ```
_출력:_ *Output:*
``` ```
중립 Neutral
``` ```
모델에게 텍스트 분류법을 알려주었더니 모델은 `'중립'`이라는 올바른 답변을 반환했습니다. 오답은 아니지만, 우리가 원하는 특정 형식의 라벨이 있고 그것을 모델이 반환하기를 원한다고 가정해보겠습니다. `Neutral` 대신 `neutral`을 반환하도록 유도해봅시다. 그러기위해서는 어떻게 하면 될까요? 방법은 여러가지가 있습니다. 지금 이 예시에서는 정확성에 초점을 맞추고있고, 프롬프트에 더 많은 정보를 제공하는만큼 더 나은 결과를 얻을 수 있습니다. 원하는 결과를 얻기위해 예시들을 제공해보겠습니다. 다시 시도해보겠습니다 : 모델에게 텍스트 분류를 지시하자 모델은 `'Neutral'`이라는 올바른 답변을 반환했습니다. 오답은 아니지만, 모델이 우리가 원하는 특정 형식의 라벨을 반환하기 원한다고 가정해 보겠습니다. `Neutral` 대신 `neutral`을 반환하도록 유도해 봅시다. 그러기 위해서는 어떻게 해야 할까요? 방법은 여러 가지가 있습니다. 지금 이 예시에서는 정확성에 초점을 맞추고 있고, 프롬프트에 더 많은 정보를 제공할수록 더 나은 결과를 얻을 수 있습니다. 원하는 결과를 얻기 위해 예시들을 제공해 보겠습니다. 다시 시도해 보겠습니다:
_프롬프트:_
*Prompt:*
``` ```
문장을 문장을 neutral, 부정 혹은 긍정으로 분류해 줘.
문장을 중립, 부정 혹은 긍정으로 분류해줘.
문구: 이번 휴가는 그럭저럭이었어. 문구: 이번 휴가는 그럭저럭이었어.
감정: neutral 감정: neutral
@ -147,119 +131,105 @@ _프롬프트:_
감정: 감정:
``` ```
_출력:_ *Output:*
``` ```
중립 neutral
``` ```
우와! 의도한 대로 모델은 소문자로 시작하는 `중립`이라는 대답을 반환했습니다. 프롬프트에 예시를 제공함으로써 모델로부터 원하는 답변을 끌어낼 수 있었습니다. 꼼꼼히 질문하는 것이 중요하다는 것을 다음 예시를 통해서 살펴보도록 합시다: 우와! 의도한 대로 모델은 소문자로 시작하는 `neutral`을 반환했습니다. 프롬프트에 예시를 제공함으로써 모델로부터 원하는 답변을 끌어낼 수 있었습니다.
_프롬프트:_ 구체적으로 질문하는 것이 중요하다는 것을 다음 예시를 통해서 살펴보겠습니다:
*Prompt:*
``` ```
문장을 증립, 부정 혹은 긍정으로 분류해줘. 문장을 nutral, 부정 혹은 긍정으로 분류해 줘.
문구: 이번 휴가는 그럭저럭이었어. 문구: 이번 휴가는 그럭저럭이었어.
감정: 감정:
``` ```
_출력:_ *Output:*
``` ```
중립 Neutral
``` ```
뭐가 문제일까요? 프롬프트에 입력된 "증립" 레이블은 모델에게 완전히 무시됐습니다. 대신, 모델은 "중립"을 출력하며 이는 해당 레이블에 대한 편향이 있기 때문입니다. 그러나 우리가 실제로 원하는 것은 "증립"이라고 가정해 봅시다. 이 문제를 해결하려면 어떻게 해야 할까요? 레이블에 설명을 추가하거나 프롬프트에 더 많은 예제를 추가해 볼 수 있을까요? 확신이 없으셔도, 우리는 다음 섹션에서 몇 가지 아이디어를 논의할 것 입니다. 어떤 점이 문제일까요? 프롬프트에 입력된 `nutral` 레이블은 모델에게 완전히 무시됐습니다. 대신, 모델은 `Neutral`을 출력했으며 이는 해당 레이블에 대한 편향이 있기 때문입니다. 그러나 우리가 실제로 원하는 것은 `nutral`이라고 가정해 보겠습니다. 이 문제를 어떻게 해결하려면 어떻게 해야 할까요? 레이블에 설명을 추가하거나 프롬프트에 더 많은 예제를 추가해 보는 것은 어떨까요? 확신이 들지 않는다면, 다음 절에서 몇 가지 생각을 논의해 보겠습니다.
--- ---
## 회화 ## 대화
아마 프롬프트 엔지니어링을 통해 접할 수 있는 흥미로운 점들 중 하나는 LLM 시스템의 행동과 의도 그리고 정체성을 고려하여 지시를 내리는 것일 겁니다. 이러한 특성은 고객 서비스 챗봇과 같은 대화형 시스템을 구축할 때 특히 유용합니다.
아마 프롬프트 엔지니어링을 통해 접할 수 있는 흥미로운 점들 중 하나는 LLM 시스템의 행동과 의도 그리고 정체성을 고려하여 지시를 내리는 것일겁니다. 이러한 특성은 고객 서비스 챗봇과 같은 대화형 시스템을 구축할 때 특히 유용합니다. 예를 들어 주어진 질문에 기술적이고 과학적인 대답을 반환할 수 있는 대화형 시스템을 구축해 보겠습니다. 이른바 *역할 프롬프팅(role prompting)*이라 불리는 것입니다.
예시로, 주어진 질문에 기술적이고 과학적인 대답을 반환 할 수있는 대화형 시스템을 구축해보겠습니다. 이른바 *role prompting*이라 불리우는 것입니다.
_프롬프트:_
*Prompt:*
``` ```
다음은 AI 연구 보조원과의 대화입니다. 이 보조원의 어조는 기술적이고 과학적입니다. 다음은 AI 연구 보조원과의 대화입니다. 이 보조원의 어조는 기술적이고 과학적입니다.
인간: 안녕, 너는 누구니? 인간: 안녕, 너는 누구니?
AI: 반갑습니다! 저는 AI 연구 보조원입니다. 무엇을 도와드릴까요? AI: 반갑습니다! 저는 AI 연구 보조원입니다. 오늘은 무엇을 도와드릴까요?
인간: 블랙홀 생성에 대해 설명해줄래? 인간: 블랙홀 생성에 대해 설명해 줄래?
AI: AI:
``` ```
_출력:_ *Output:*
``` ```
물론입니다! 블랙홀은 중력이 너무 강해서 심지어 빛조차도 벗어날 수 없는 시공간의 영역입니다. 거대한 별이 죽고 그 중심핵이 스스로 붕괴하여 무한 밀도의 특이점을 형성할 때 생성됩니다. 특이점의 강한 중력은 그 주변의 모든 물질과 방사선을 끌어당겨 블랙홀을 만듭니다. 물론입니다! 블랙홀은 중력이 너무 강해서 심지어 빛조차도 벗어날 수 없는 시공간의 영역입니다. 아주 거대한 별이 죽고 그 중심핵이 스스로 붕괴하여 무한 밀도의 특이점을 형성할 때 생성됩니다. 특이점의 강한 중력은 그 주변의 모든 물질과 방사선을 끌어당겨 블랙홀을 만듭니다.
``` ```
우리 AI 연구원의 대답은 쉽게 이해할 수 있는 논조는 아니지요? 이 행동을 변경하여 시스템에 보다 접근하기 쉬운 답변을 지시해봅시다. 우리 AI 연구 보조원의 대답은 너무 기술적인 것 같습니다. 이 행동을 변경하여 시스템에 보다 접근하기 쉬운 답변을 지시해 보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
다음은 AI 연구 보조원과의 대화입니다. 보조원은 초등학생도 이해할 수 있는 수준으로 답변해야합니다. 다음은 AI 연구 보조원과의 대화입니다. 보조원은 초등학생도 이해할 수 있는 수준으로 답변해야 합니다.
인간: 안녕, 너는 누구니? 인간: 안녕, 너는 누구니?
AI: 반갑습니다! 저는 AI 연구 보조원입니다. 무엇을 도와드릴까요? AI: 반갑습니다! 저는 AI 연구 보조원입니다. 오늘은 무엇을 도와드릴까요?
인간: 블랙홀 생성에 대해 설명해줄래? 인간: 블랙홀 생성에 대해 설명해줄래?
AI: AI:
``` ```
_출력:_ *Output:*
``` ```
물론이죠! 블랙홀은 아주 큰 별이 연료를 다 써버려 붕괴함으로써 만들어집니다. 별의 중력이 매우 강하기 때문에 빛조차도 끌어당겨 그 중력장에 의한 공간에 점이 생깁니다. 그것이 블랙홀이지요. 물론이죠! 블랙홀은 아주 거대한 별이 연료를 다 써버려서 스스로 붕괴함으로써 만들어집니다. 별의 중력이 매우 강하기 때문에 빛조차도 벗어날 수 없습니다. 이렇게 강력한 중력을 가진 시공간의 한 점이 블랙홀입니다.
``` ```
진전이 보이시지요? 여기서 더 개선할 수도 있어보입니다. 더 많은 예시를 지시할 수록 더 나은 결과가 나올것이라 확신합니다. 우리는 결과를 개선했습니다. 여기서 더 개선할 수도 있습니다. 더 많은 예시를 추가한다면 더 나은 결과를 얻을 수도 있습니다.
--- ---
## 코드 생성 ## 코드 생성
LLM은 매우 효과적인 코드 생성 애플리케이션 중 하나입니다. Copilot이 대표적인 예시입니다. 프롬프트를 영리하게 사용해서 코드를 생성하는 다양한 작업들이 있습니다. 아래에서 몇 가지 예시를 살펴보겠습니다.
LLM은 매우 효과적인 코드 생성 애플리케이션 중 하나입니다. Copilot이 대표적인 예시이지요. 먼저, 유저에게 인사를 건네는 단순한 프로그램을 생성해 보겠습니다.
프롬프트를 영리하게 사용해서 많은 양의 코드를 생성할 수 있습니다. 아래에서 몇 가지 예시를 살펴보겠습니다.
먼저, 유저에게 인사를 건네는 단순한 프로그램을 생성해보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
/* /*
유저의 이름을 입력받고 "안녕"이라고 해줘 유저의 이름을 입력받고 "안녕"이라고 해줘
*/ */
``` ```
_출력:_ *Output:*
``` ```
let name = prompt("이름이 뭐예요?"); let name = prompt("이름이 뭐예요?");
console.log(`안녕하세요, ${이름}!`); console.log(`안녕하세요, ${이름}!`);
``` ```
어느 프로그래밍 언어를 써야하는지 조차도 알려주지 않았습니다. 어느 프로그래밍 언어를 사용해야 하는지 지정할 필요도 없었습니다.
좀 더 레벨을 올려보겠습니다. 프롬프트를 어떻게 디자인하느냐에따라 LLM이 얼마나 더 강력해질 수 있는 지 보여주겠습니다. 좀 더 수준을 올려보겠습니다. 프롬프트를 어떻게 디자인하느냐에 따라 LLM이 얼마나 더 강력해질 수 있는지 살펴보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
""" """
DB테이블 departments, columns = [DepartmentId, DepartmentName] DB테이블 departments, columns = [DepartmentId, DepartmentName]
DB테이블 students, columns = [DepartmentId, StudentId, StudentName] DB테이블 students, columns = [DepartmentId, StudentId, StudentName]
컴퓨터 과학부에 속한 모든 학생에 대한 MySQL 쿼리를 작성해 줘
컴퓨터 과학부에 속한 모든 학생에 대한 MySQL 쿼리를 작성해줘
""" """
``` ```
_출력:_ *Output:*
``` ```
SELECT StudentId, StudentName SELECT StudentId, StudentName
FROM students FROM students
@ -271,59 +241,52 @@ WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName
--- ---
## 추론 ## 추론
어떤 형태로든 추론이 필요한 작업은 아마도 오늘날 LLM으로 하기 가장 어려운 작업에 속합니다. 추론은 LLM에서 나타날 수 있는 복잡한 애플리케이션의 유형 중에서 가장 흥미로운 분야 중 하나입니다.
형태를 막론하고 추론하는 일은 오늘 날 LLM이 다루기 어려워하는 작업일 것입니다. 추론은 LLM을 활용하여 만들 수 있는 복잡한 응용 프로그램의 유형이므로 제가 가장 흥미로워하는 분야 중 하나입니다. 수학적인 능력을 필요로 하는 작업에서는 눈에 띄는 개선을 보여주었지만, 현재의 LLM은 추론 작업을 수행하는 데 어려움을 겪기 때문에 훨씬 더 향상된 프롬프트 엔지니어링 기술을 필요로 합니다. 고급 기술에 대해서는 추후의 가이드에서 다루고, 지금은 산술 능력을 증명할 몇 가지 기본적인 예를 다뤄보겠습니다.
수학적인 능력을 필요로 하는 작업에서 눈에띄는 개선을 보여주었지만, 현재의 LLM은 추론 작업을 수행하는 데 아직은 어려움을 겪기 때문에 이를 위해서는 훨씬 더 진보된 프롬프트 엔지니어링 기술을 필요로합니다. 고급 기술에 대해서는 추후 가이드에서 설명 할 예정이고, 지금은 산술 능력을 증명 할 몇 가지 기본적인 예를 다뤄보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
9,000 * 9,000는 뭐야? 9,000 * 9,000는 뭐야?
``` ```
_출력:_ *Output:*
``` ```
81,000,000 81,000,000
``` ```
좀 더 어려운 문제를 시도해보겠습니다. 좀 더 어려운 문제를 시도해 보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
주어진 수 중에서 홀수를 모두 더하면 짝수가 될거야: 15, 32, 5, 13, 82, 7, 1. 주어진 수 중에서 홀수를 모두 더해서 짝수를 만들어 줘: 15, 32, 5, 13, 82, 7, 1.
A: A:
``` ```
_출력_ *Output*
``` ```
아니요, 주어진 수 중 홀수를 더한 값은 홀수입니다: 119 아니요, 주어진 수 중 홀수를 모두 더한 값은 홀수입니다: 119.
``` ```
이번에는 틀렸네요! 프롬프트를 개선하여 정확도를 향상시켜 봅시다. 이번에는 틀렸습니다! 프롬프트를 개선하여 정확도를 향상해 보겠습니다.
_프롬프트:_
*Prompt:*
``` ```
주어진 수 중에서 홀수를 모두 더하면 짝수가 될거야: 15, 32, 5, 13, 82, 7, 1. 주어진 수 중에서 홀수를 모두 더해서 짝수를 만들어 줘: 15, 32, 5, 13, 82, 7, 1.
문제를 단계별로 해결해봐. 먼저 주어진 수 중 홀수를 찾아낸 뒤 그것들을 합해서 결과가 홀수인지 짝수인지 판별해줘. 문제를 단계별로 해결해 봐. 먼저 주어진 수 중 홀수를 찾아낸 뒤, 그것들을 합해서, 결과가 홀수인지 짝수인지 판별해 줘.
``` ```
_출력:_ *Output:*
``` ```
홀수: 15, 5, 13, 7, 1 홀수: 15, 5, 13, 7, 1
총합: 41 총합: 41
41은 홀수입니다. 41은 홀수입니다.
``` ```
훨씬 낫지요? 참고로 저는 이 명령을 여러 번 시도했지만 시스템은 가끔 오답을 제시할 때도 있었습니다.더 나은 지시와 예시를 제공함으로써 보다 정확한 결과를 얻을 수 있겠지요. 훨씬 낫지 않나요? 참고로 저는 이 명령을 여러 번 시도했지만 시스템은 가끔 오답을 제시했습니다. 더 나은 지시와 예시를 결합하는 것으로 보다 정확한 결과를 얻을 수 있습니다.
이 가이드의 해당 섹션에서는 일반적인 응용 프로그램의 예시를 계속 소개 할 예정입니다. 가이드의 이 절에서는 일반적인 애플리케이션의 예시를 계속 소개할 예정입니다.
다음 섹션에서는 이러한 모든 작업의 성능을 향상시키기 위한 보다 심화된 프롬프트 엔지니어링 개념과 기술에 대해 설명하겠습니다. 다음 섹션에서는 이러한 모든 작업의 성능을 향상하기 위해 보다 심화된 프롬프트 엔지니어링의 개념과 기법에 대해 설명하겠습니다.

View File

@ -1,11 +1,11 @@
# LLM 설정 # LLM 설정
프롬프트를 사용 시 API를 사용하거나 직접 LLM과 소통할 것입니다. 몇 가지 파라미터를 설정함으로써 프롬프트에 별 다른 결과를 얻을 수 있습니다. 프롬프트를 사용할 때, API를 사용하거나 직접 대규모언어모델(LLM)과 상호작용 할 수 있습니다. 몇 가지 파라미터를 설정하여 프롬프트에서 여러 가지 결과를 얻을 수 있습니다.
**Temperature** - 간단히 말해서, `temperature`값이 낮을수록 가장 확률이 높은 응답(token)이 항상 선택되기 때문에 결과는 더 결정론적입니다. 이 값을 올리면 랜덤성이 증가하여 보다 다양하고 창조적인 결과물을 배출합니다. 즉, 엉뚱한(?) 답변의 가능성이 있는 쪽으로 무게를 늘리는 셈입니다. QA와 같은 작업을 위해 사실기반의 간결한 응답을 원한다면 더 낮은 temperature값을 사용해야겠지요. 반대로 시를 창작하는 등의 창의적인 작업의 경우 temperature 값을 높이는 것이 적합할 것입니다. **Temperature** - 요컨대, `temperature` 값이 낮을수록 항상 가장 확률이 높은 토큰(말뭉치의 최소 단위)이 선택되기 때문에 더 결정론적인 결과를 낳습니다. temperature 값을 올리면 무작위성이 증가하여 보다 다양하거나 창조적인 결과를 촉진합니다. 이는 다른 가능한 토큰의 가중치를 증가키는 것과 같습니다. 애플리케이션의 경우, 사실을 기반으로 하는 질의응답과 같은 작업에는 낮은 temperature 값을 사용하여 보다 사실적이고 간결한 응답을 얻을 수 있습니다. 시를 생성하거나 다른 창의적인 작업의 경우에는 temperature 값을 높이는 것이 도움이 될 수 있습니다.
**Top_p** - 마찬가지로, 핵 샘플링이라고 불리는 샘플링 기법인 `top_p`에서는 모델이 응답을 생성할 때 결정성을 제어할 수 있습니다. 사실에 근거한 답변을 원한다면 이 값을 낮추고, 더 다채로운 답변을 원한다면 더 높은 값으로 조정하세요. **Top_p** - 마찬가지로, temperature를 활용하는 핵 샘플링 기법인 `top_p`를 사용하면 모델이 응답을 생성하는 결정성을 제어할 수 있습니다. 정확하고 사실적인 답변을 원한다면 이를 낮게 유지합니다. 더 다양한 반응을 원한다면 더 높은 값으로 증가시킵니다.
일반적으로는 둘 중 하나를 변경하는 것을 권장합니다. 일반적인 권장 사항은 둘 중 하나만 변경하는 것을 권장합니다.
기본적인 예시를 살펴보기에 앞서, 사용하는 LLM 버전에 따라 결과가 상이할 수 있음을 알립니다. 몇 가지 기본적인 예시를 살펴보기에 앞서, 사용하는 LLM 버전에 따라 결과가 상이할 수 있음을 알립니다.