Prompt 활용편 — 프롬프트 엔지니어링, 작성가이드, 팁과 주의사항, 예시

minji
20 min readMay 12, 2024

--

지난번 “Prompt 기초편-프롬프트 정의, LLM 하이퍼파라미터, 구성요소” 글을 통해 프롬프트 기초에 대해 알아보았습니다. 이번에는 그 글에 이어서 프롬프트 엔지니어링은 무엇인지, 작성가이드, 일반적인 팁들과 주의사항에 대해 소개 하겠습니다.

1. 프롬프트 엔지니어링 소개

프롬프트 엔지니어링은 생성형 AI 모델에게 제공되는 입력(prompt)을 세심하게 디자인하고, 모델의 반응을 가이드하여 원하는 결과를 얻을 수 있도록 하는 과정입니다.

프롬프트 엔지니어는 AI 모델의 내재된 지식을 최적화하고, 다양한 작업에 효율적으로 적용할 수 있도록 지원합니다. 이를 통해 생성형 AI가 다양한 분야에서 효율적이고 효과적인 결과물을 생성할 수 있게 됩니다.

ChatGPT 를 사용해 보신분을 아시겠지만 생각보다 생성형 AI에게 사용자가 의도한 결과대로 항상 일정한 형식의 출력으로 응답을 만들어 내는것이 그리 쉽지 만은 않습니다. 한번씩 AI가 엉뚱한 대답을 내놓거나 의도하지 않은 결과를 보여줄 때가 있거든요.

프롬프트 엔지니어링은 AI 에게 어떻게 명령을 시켜야 원하는 결과를 얻을 수 있을지에 대해 연구하고 보다 효율적인 작업을 할 수 있는 도구들을 만들어 내는 것입니다.

? 프롬프트 엔지니어링은 파인튜닝과 무엇이 다른가 ?

프롬프트 엔지니어링(Prompt Engineering)은 언어모델을 개발하는 것이 아닙니다.

사전 훈련된 언어 모델에 프롬프트를 입력해 원하는 결과를 얻어내는데 초점을 둡니다. 반면 파인튜닝(Fine-tuning) 은 사전 훈련된 언어 모델의 가중치를 조정하여 특정 작업이나 도메인에 대한 성능을 개선하는 방법입니다.

  • 파인 튜닝(Fine-tuning): 사전 훈련된 언어 모델의 가중치를 조정하여 특정 작업이나 도메인에 대한 성능을 개선하는 방법입니다. 작업 특화를 위한 추가 데이터 세트 및 레이블을 사용합니다. 이를 통해 기존 모델에 대한 변경 사항을 학습하며 모델의 성능을 개선하게 됩니다. 파인 튜닝을 사용하면 각각 작업별로 전문화된 성능을 얻을 수 있습니다. 일반적으로 다루기 어려운 도메인이나 복잡한 작업에 대한 성능 개선이 필한 경우 사용합니다.
  • 프롬프트 엔지니어링(Prompt Engineering): 사전 훈련된 언어 모델 입력 인터페이스에 면밀한 변경을 가하여, 원하는 결과를 산출하는 것에 초점을 맞춥니다. 입력 문장(프롬프트) 구조와 형식 등의 요소들로 조작해가며 최적화합니다. 추가적인 학습 데이터가 필요하지 않으며, 주로 소비자들과 상호작용할 때 유용합니다. 일반적으로 간단하거나 일상적인 질문-응답 상황에서 좋은 결과를 가져옵니다.

또한 프롬프트 엔지니어링 기법에는 여러가지가 있습니다. 이번 글에서는 어떤 것들이 있는지만 살펴보고 자세한 것은 다음 글에서 다루도록 하겠습니다.

프롬프트 엔지니어링 기법

  • Zero-Shot Prompting
  • One-Shot Prompting
  • Few-Shot Prompting
  • Chain of Thought
  • Tree of Thought (ToT)
  • Zero Shot Chain of Thought
  • Self Consistency
  • Meta-Reasoning over Mulpitle Chains
  • Genereated Knowledge Prompting
  • Synthetic Prompting
  • MRKL
  • Self Refine
  • ReAct Prompting
  • Automatic Prompt Engineering

등 다양한 기법들이 있으며 계속 해서 연구되고 있는 신생 분야라고 할 수 있습니다. 나열한 기법들 외에도 수많은 기법들이 계속 연구되고 나오고 있습니다.

2. 프롬프트 작성 가이드

프롬프트를 작성할때 사용자가 의도한대로 좀더 나은 응답을 얻기위해 고려해볼 만한 것들을 정리해보자면,

  1. 주제(Topic) 는 무엇이고 수행해야할 작업(Task)은 무엇인가?
  • AI에게 물어볼 궁금한 주제가 무엇이고 어떤 작업을 시킬것 인지를 명확하고 간단명료하게 규정하는 일입니다. 수행해야할 작업이 난해하고 복잡할수록 AI 모델이 이해하기 어려울 수가 있기 때문입니다.

2. 어떤 역할(Role) 을 부여해야 하는가?

  • 답변자로써 페르소나를 지정. 답변에 대한 배경 지식을 가지고 답하기 때문에 더 높은 정확도로 답하게 됩니다.
  • 예시) 당신은 영어 선생님입니다. 영어의 문법에 대해 설명해주세요.

3. 청중(Audience)은 누구인가?

  • 답변의 대상이 되는 특정 인구, 그룹, 또는 개인의 페르소나
  • 예시) 일식 요리사를 위한 일본 전통요리 레시피를 작성해주세요.

4. 필요한 정책( Policy )은 무엇인가?

  • 응답을 만들때 따라야 하는 특정 정책이나 규칙
  • Style : 응답에 사용해야 할 특정 톤,유머,감정 등의 스타일
    예시) 공손하고 정중한 말투로 사과 메일을 작성해주세요.\
  • Constraint : 응답이 따라야 하는 특정 제한 사항이나 조건
    예시 ) 3분 내로 읽을 수 있는 간략한 연설문을 만들어주세요.

5. 응답결과에 대한 예시(Examples)를 제공할 수 있는가?

  • 원하는 응답의 예시를 제공하여 원하는 출력을 더 잘 이해하도록 돕습니다.

기본가이드는 이와 같고, 다음은 일반적인 팁과 주의사항에 대해 설명하겠습니다.

3. 프롬프트 설계에 관한 일반적인 팁과 주의사항

프롬프트를 설계할 때 주의해야 할 몇 가지 사항에 대해 소개합니다.

1) 시작은 간단하게

프롬프트 설계를 시작할 때는 프롬프트 설계가 최적의 결과를 얻기 위해 많은 실험이 필요한 반복적인 과정임을 명심해야 합니다. OpenAI 또는 Cohere에서 제공하는 간단한 플레이그라운드로 시작해 보는 것이 좋습니다.

간단한 프롬프트로 시작하여 더 나은 결과를 위해 요소나 문맥을 계속해서 추가할 수 있습니다. 따라서 프롬프트의 버전 관리가 중요합니다. 이 글에서는 구체성, 단순성, 간결함을 통해 더 나은 결과를 얻을 수 있는 많은 예시를 제시하고 있습니다.

여러 하위 작업을 포함한 큰 단위 작업을 실행해야 하는 경우, 작업을 보다 작은 단위로 세분화하고 결과가 개선됨에 따라 점진적으로 구축해 나갈 수 있습니다. 이러한 방식을 통해 프롬프트 설계 초기 과정에 너무 많은 복잡성이 추가되는 것을 방지할 수 있습니다.

2) 지시

‘작성하기’, ‘분류하기’, ‘요약하기’, ‘번역하기’, ‘정렬하기’ 등의 명령어를 사용하여 달성하고자 하는 결과를 모델에 지시함으로써 다양한 간단 작업에 대해 효과적인 프롬프트를 설계할 수 있습니다.

또한, 무엇이 가장 효과적인지 확인하기 위해서는 여러 차례의 실험이 필요하다는 점을 명심해야합니다. 다양한 키워드, 문맥 및 데이터를 활용하여 다양한 지시를 내려 보고, 특정 사용 사례와 작업에 가장 적합한 방법을 확인해야합니다. 일반적으로, 수행하고자 하는 작업과 관련된 문맥이 구체적이고 적절할수록 더 좋은 결과를 얻을 수 있습니다. 다음 가이드에서 샘플링과 문맥 추가의 중요성에 대해 다뤄 보도록 하겠습니다.

프롬프트의 시작 부분에 지시 사항을 명시하는 것이 좋다는 의견도 있습니다. 또 다른 권장 사항으로는 ‘###’과 같이 명확한 구분 기호를 사용하여 명령어와 지시 사항을 구분하는 것을 들 수 있습니다.

예시:

Prompt:

### 지시 ###
다음 텍스트를 스페인어로 번역해 줘.
텍스트: "안녕하세요!"

Output:

¡Hola!

3) 특이성

모델에 실행시킬 지시와 작업을 구체적으로 설명해야합니다. 프롬프트가 상세하고 구체적일수록 결과는 더 좋아집니다. 특정한 출력이나 스타일을 얻고자 하는 경우 특히 중요합니다. 더 나은 결과를 내는 특정한 토큰이나 키워드는 존재하지 않습니다. 좋은 형식과 상세한 프롬프트를 준비하는 것이 중요합니다. 프롬프트에 예시를 제공하는 것은 특정한 형식으로 출력을 얻는 데 실제로도 매우 효과적 입니다.

프롬프트의 길이에는 제한이 있기 때문에 프롬프트를 설계할 때는 그 사항을 염두에 두어야 합니다. 얼마나 구체적이고 상세하게 작성해야 하는지 생각할 필요가 있습니다. 불필요한 세부 사항을 많이 포함하는 것이 반드시 좋은 접근 방법은 아닙니다. 세부 사항은 관련성이 있어야 하고, 당면한 과제에 기여해야 합니다.

아까도 말했지만, 프롬프트의 설계는 많은 실험과 반복이 필요합니다. 목적에 맞는 프롬프트의 최적화를 위해 많은 실험과 반복을 거듭해야합니다.

텍스트에서 특정 정보를 추출하는 간단한 프롬프트의 예시를 살펴봅시다.

Prompt:

다음 텍스트에서 장소의 이름을 추출해 줘.
원하는 형식:Place: <comma_separated_list_of_places>
입력: "이러한 발전은 연구자들에게 격려가 되지만, 많은 것들이 여전히 수수께끼입니다. 리스본에 있는 샴팔리마우드 센터(CCU: Champalimaud Centre for the Unknown)의 신경면역학자인 Henrique Veiga-Fernandes는 "뇌와 주변부에서 보이는 효과 사이에 블랙박스가 있는 경우가 종종 있습니다."라고 말합니다. 그리고 다음과 같이 덧붙입니다. "치료적 맥락에서 이를 사용하고자 할 경우, 그 메커니즘을 실제로 이해할 필요가 있습니다."

Output:

장소: 샴팔리마우드 센터(CCU: Champalimaud Centre for the Unknown), 리스본

입력 텍스트는 네이처(Nature)지의 이 논문(opens in a new tab)에서 가져왔습니다.

4) 부정확성 피하기

상세하게 기술하고 형식을 개선하는 방법에 대한 위 내용을 고려할 경우, 프롬프트를 교묘하게 다루려 하거나 부정확한 설명을 작성하는 등의 함정에 빠지기 쉽습니다. 프롬프트는 구체적이고 직접적이어야 더욱 좋은 결과를 얻을 수 있습니다. 직접적일수록 메시지가 더 효과적으로 전달됩니다. 효과적인 커뮤니케이션 방식과 매우 유사하다고 할 수 있습니다.

프롬프트 엔지니어링의 개념을 배우고자 하는 경우를 예시로 들어 보겠습니다. 이 경우, 다음과 같이 시도해 볼 수 있습니다.

프롬프트 엔지니어링의 개념을 설명해 줘. 설명은 간결하게 몇 문장으로만 하고 너무 자세히는 하지 말아 줘.

위의 프롬프트에서는 몇 문장을 사용해야 하는지, 어떤 스타일을 사용해야 하는지 명확하게 지시되어 있지 않습니다. 물론 이 프롬프트로도 여전히 좋은 답변을 얻을 수는 있겠지만, 매우 구체적이고 간결하며 정곡을 찌르는 프롬프트일수록 좋습니다. 적절한 예시로 다음을 살펴봅시다.

고등학생에게 프롬프트 엔지니어링의 개념을 2~3개의 문장으로 설명해 줘.

5) 해야 하는 것과 하지 말아야 할 것

프롬프트를 설계할 때 적용할 수 있는 또 다른 일반적인 팁은 ‘하지 말아야 할 것’보다는 ‘해야 하는 것’에 초점을 두는 것입니다. 이렇게 하면, 보다 구체적이고 모델로부터 좋은 답변을 이끌어 내는 세부 사항에 집중할 수 있습니다.

다음은 ‘하지 말아야 할 것’에 초점을 두어 영화 추천 챗봇이 실패한 예시입니다.

Prompt:

다음은 고객에게 영화를 추천하는 상담원입니다. 관심사를 묻지 마세요. 개인정보를 묻지 마세요.
고객: 제 관심사를 바탕으로 영화를 추천해 주세요.
상담원:

Output:

네, 당신의 관심사를 바탕으로 영화를 추천해 드리겠습니다. 액션, 코미디, 로맨스, 아니면 그 밖의 장르, 어떤 종류의 영화를 좋아하세요?

해야하는것에 초점을 맞춰 개선된 프롬프트는 다음과 같습니다.

Prompt:

다음은 고객에게 영화를 추천하는 상담원입니다. 상담원은 글로벌 인기 영화 중에서 영화를 추천해야 합니다.
사용자의 관심사를 묻지 않고, 개인 정보를 요구하지 않아야 합니다.
상담원이 추천할 영화가 없는 경우 "죄송합니다.오늘 추천할 영화를 찾을 수 없습니다." 라고 응답해야 합니다.
고객: 제 관심사를 바탕으로 영화를 추천해 주세요.
상담원:

Output:

죄송합니다만, 당신의 관심사에 관한 정보를 찾을 수 없었습니다. 하지만 지금 가장 인기 있는 영화에 대한 목록이 있습니다: [영화 목록]. 좋아하는 것을 찾으시길 바랄게요!

4. 다양한 프롬프트 예시

이제까지는 가장 기초적인 프롬프트 작성 가이드와 팁, 주위사항에 대해 알아보았습니다. 아래 부터는 문장요약, 정보 추출 등 다양한 목적을 바탕으로 작성된 각각의 프롬프트 예시에 대해 소개하겠습니다.

문장 요약

문장 요약은 자연어 생성의 대표적인 작업 중 하나입니다. 문장 요약은 여러 주제와 도메인을 포함합니다. 사실, 언어 모델의 가장 유망한 애플리케이션 중 하나는 기사와 개념을 빠르고 읽기 쉽게 요약할 수 있는 능력입니다. 프롬프트를 사용하여 간단한 요약 작업을 시도해 보겠습니다.

예를 들어 항생제에 대해 배우고 싶다면 다음과 같은 프롬프트를 시도할 수 있습니다.

Prompt:

항생제에 대해 설명해 줘
A:

Output:

항생제는 세균 감염을 치료하기 위해 사용되는 약물의 일종입니다. 세균을 죽이거나 번식을 방지하여 신체의 면역 체계가 감염에 대항할 수 있도록 합니다. 항생제는 보통 알약, 캡슐, 액체의 형태로 경구 복용하거나 때때로 정맥 주사로 투여되기도 합니다. 항생제는 바이러스 감염에는 효과적이지 않고, 남용할 경우 항생제 내성이 생길 수 있습니다.

“A:”는 질의응답에 사용되는 명시적 프롬프트 형식을 띠고 있습니다. 여러분은 모델에게 추가적으로 답변을 기대하고 있다는 것을 전달하기 위해서 이 방법을 사용했습니다. 이 예시가 얼마나 유용한가에 대해서는 추후에 다른 예시에서 살펴보도록 하겠습니다. 이제 이 출력이 우리가 원했던 것보다 더 많은 양의 정보라서 추가적인 요약이 필요하다고 가정해 보겠습니다. 실제로 모델에게 다음과 같이 한 문장으로 요약하도록 지시할 수 있습니다.

Prompt:

항생제는 세균 감염을 치료하기 위해 사용되는 약물의 일종입니다. 세균을 죽이거나 번식을 방지하여 신체의 면역 체계가 감염에 대항할 수 있도록 합니다. 항생제는 보통 알약, 캡슐, 액체의 형태로 경구 복용하거나 때때로 정맥 주사로 투여되기도 합니다. 항생제는 바이러스 감염에는 효과적이지 않고, 남용할 경우 항생제 내성이 생길 수 있습니다.
위 내용을 한 문장으로 요약해 줘:

Output:

항생제는 박테리아를 죽이거나 번식을 막음으로써 감염을 치료하는 데 사용되는 약이지만, 바이러스에 효과적이지 않고 과도한 사용은 항생제 내성을 초래할 수 있습니다.

위 대답의 정확성은 추후 글에서 다룰 예정이므로 차치하고, 일단 모델이 단락을 한 문장으로 요약했다는 것에 초점을 맞춰 보겠습니다. 좀 더 정확한 지시를 내리는 방법에 대해서도 뒤에서 살펴보기로 하고, 지금은 자유롭게 더 나은 결과를 얻을 수 있는지 실험해 보겠습니다.

정보 추출

언어 모델은 자연어 생성과 관련된 작업을 수행하도록 훈련되었지만 분류나 다양한 자연어 처리(NLP) 작업을 수행할 수도 있습니다.

주어진 단락에서 정보를 추출하는 프롬프트의 예시를 살펴보겠습니다.

Prompt:

연구 논문의 저자 기여도 진술서과 사사는 저자들이 원고 작성과 분석에 ChatGPT 등 AI 기술을 사용했는지 여부와 범위를 명확하고 구체적으로 명시해야 합니다. 또한 어떤 LLM이 사용되었는지 표기해야 합니다. 이를 통해 편집자와 심사자가 잠재적 편향, 부정확성 및 부적절한 출처 등의 문제를 고려해 원고를 보다 신중하게 검토하도록 유도할 수 있습니다. 마찬가지로, 과학 저널은 투고된 원고 선정 시 LLM 사용 여부를 투명하게 공개해야 합니다.
위 단락에서 언급한 대규모언어모델 기반 제품을 알려줘.

Output:

위 단락에서 언급한 대규모언어모델 기반 제품은 ChatGPT입니다.

위의 결과를 개선하는 방법은 여러 가지가 있겠지만, 이미 지금 결과로도 꽤 유용합니다.

이제 우리는 단순히 무엇을 할지 지시하는 것으로 모델이 다양한 작업을 수행하도록 할 수 있다는 사실을 배우게 되었습니다. 이는 AI 제품 개발자들이 이미 강력한 제품이나 서비스를 구현하기 위해 사용하고 있는 강력한 능력중 하나입니다.

원본 출처: ChatGPT: five priorities for research(opens in a new tab)

질의응답

모델로부터 원하는 답변을 끌어내는 가장 좋은 방법 중 하나는 프롬프트 형식을 개선하는 것입니다. 앞서 살펴본 바와 같이 프롬프트는 지시, 문맥, 입력 데이터와 출력 지시자를 조합하여 더 나은 결과를 얻을 수 있습니다. 이러한 요소는 필수적인 것은 아니지만, 지시가 구체적일수록 더 좋은 결과를 얻을 수 있습니다. 다음은 보다 구조화된 프롬프트를 실행해 보겠습니다.

Prompt:

아래 문맥을 고려해서 질문에 답변해 줘. 
답변은 짧고 간결하게 해 줘. 답변이 정확하지 않다면, 「확실치 않은 대답」이라고 응답해 줘.
문맥: Teplizumab은 Ortho Pharmaceutical이라는 뉴저지의 제약 회사에서 유래했다. 그곳에서, 과학자들은 OKT3라는 항체의 초기 버전을 만들어 냈다. 원래 쥐에서 유래된 이 분자는 T 세포의 표면에 결합하여 세포를 죽이는 잠재력을 제한할 수 있다. 1986년, 신장 이식 후 장기 거부 반응 예방을 위해 승인되어 인간이 사용할 수 있는 최초의 치료용 항체가 되었다.
질문: OKT3는 어디서 유래했는가?
답변:

Output:

쥐.

문맥의 출처는 Nature(opens in a new tab)입니다.

텍스트 분류

지금까지 우리는 간단한 지시를 사용하여 작업을 수행했습니다. 프롬프트 엔지니어로서 점점 더 나은 지시를 내리는 것은 기본입니다. 하지만 그것이 전부는 아닙니다. 더 까다로운 작업을 수행하기 위해서는 지시만으로는 충분하지 않다는 것을 깨닫게 될 수 있습니다. 문맥과 여러 요소들을 고려하여 적절한 프롬프트를 사용할 필요가 있습니다. 입력 데이터예시 또한 요소로 할 수 있습니다.

텍스트 분류를 예시로 이를 설명해 보겠습니다.

Prompt:

문장을 neutral, 부정 혹은 긍정으로 분류해 줘.
문구: 그 음식은 그럭저럭이었어.
감정:

Output:

Neutral

모델에게 텍스트 분류를 지시하자 모델은 'Neutral'이라는 올바른 답변을 반환했습니다. 오답은 아니지만, 모델이 우리가 원하는 특정 형식의 라벨을 반환하길 원한다고 가정해 보겠습니다.

Neutral 대신 neutral을 반환하도록 유도해 보겠습니다. 그러기 위한 방법은 여러 가지가 있습니다. 지금 이 예시에서는 정확성에 초점을 맞추고 있고, 프롬프트에 더 많은 정보를 제공할수록 더 나은 결과를 얻을 수 있습니다. 원하는 결과를 얻기 위해 예시들을 추가하여 다시 시도해 보겠습니다.

Prompt:

문장을 neutral, 부정 혹은 긍정으로 분류해 줘.
문구: 이번 휴가는 그럭저럭이었어.
감정: neutral
문구: 그 음식은 그럭저럭이었어.
감정:

Output:

neutral

의도한 대로 모델은 소문자로 시작하는 neutral을 반환했습니다. 프롬프트에 예시를 제공함으로써 모델로부터 원하는 답변을 끌어낼 수 있었습니다.

대화

아마 프롬프트 엔지니어링을 통해 접할 수 있는 흥미로운 점들 중 하나는 LLM 시스템의 행동과 의도 그리고 정체성을 고려하여 지시를 내리는 것일 겁니다. 이러한 특성은 고객 서비스 챗봇과 같은 대화형 시스템을 구축할 때 특히 유용합니다.

예를 들어 주어진 질문에 기술적이고 과학적인 대답을 반환할 수 있는 대화형 시스템을 구축해 보겠습니다. 역할 프롬프팅이라 불리는 것입니다.

Prompt:

다음은 AI 연구 보조원과의 대화입니다. 
이 보조원의 어조는 기술적이고 과학적입니다.
인간: 안녕, 너는 누구니?
AI: 반갑습니다! 저는 AI 연구 보조원입니다. 오늘은 무엇을 도와드릴까요?
인간: 블랙홀 생성에 대해 설명해 줄래?
AI:

Output:

물론입니다! 블랙홀은 중력이 너무 강해서 심지어 빛조차도 벗어날 수 없는 시공간의 영역입니다. 아주 거대한 별이 죽고 그 중심핵이 스스로 붕괴하여 무한한 밀도의 특이점을 형성할 때 생성됩니다. 특이점의 강한 중력은 그 주변의 모든 물질과 방사선을 끌어당겨 블랙홀을 만듭니다.

우리 AI 연구 보조원의 대답은 너무 기술적인 것 같습니다. 이 행동을 변경하여 시스템에 보다 접근하기 쉬운 답변을 지시해 보겠습니다.

Prompt:

다음은 AI 연구 보조원과의 대화입니다. 
보조원은 초등학생도 이해할 수 있는 수준으로 답변해야 합니다.
인간: 안녕, 너는 누구니?
AI: 반갑습니다! 저는 AI 연구 보조원입니다. 오늘은 무엇을 도와드릴까요?
인간: 블랙홀 생성에 대해 설명해줄래?
AI:

Output:

물론이죠! 블랙홀은 아주 거대한 별이 연료를 다 써 버려서 스스로 붕괴함으로써 만들어집니다. 별의 중력이 매우 강하기 때문에 빛조차도 벗어날 수 없습니다. 이렇게 강력한 중력을 가진 시공간의 한 점이 블랙홀입니다.

개선된 결과를 확인 할 수 있습니다. 하지만 여기서 더 개선할 수도 있습니다. 더 많은 예시를 추가한다면 더 나은 결과를 얻을 수도 있겠죠?

코드 생성

LLM은 매우 효과적인 코드 생성 애플리케이션 중 하나입니다. 코파일럿(Copilot)이 대표적인 예시입니다. 프롬프트를 영리하게 사용해서 코드를 생성하는 다양한 작업들이 있습니다. 아래에서 몇 가지 예시를 살펴보겠습니다.

먼저, 유저에게 인사를 건네는 단순한 프로그램을 생성해 보겠습니다.

Prompt:

/*유저의 이름을 입력받고 "안녕"이라고 해 줘*/

Output:

let name = prompt("이름이 뭐예요?");console.log(`안녕하세요, ${이름}!`);

어느 프로그래밍 언어를 사용해야 하는지 지정할 필요도 없었습니다.

좀 더 수준을 올려 보겠습니다. 프롬프트를 어떻게 디자인하느냐에 따라 LLM이 얼마나 더 강력해질 수 있는지 살펴보겠습니다.

Prompt:

"""DB테이블 departments, columns = [DepartmentId, DepartmentName]DB테이블 students, columns = [DepartmentId, StudentId, StudentName]컴퓨터과학부에 속한 모든 학생에 대한 MySQL 쿼리를 작성해 줘"""

Output:

SELECT StudentId, StudentNameFROM studentsWHERE DepartmentId IN (SELECT DepartmentId 
FROM departments
WHERE DepartmentName = 'Computer Science');

데이터베이스 스키마에 대한 정보를 제공하고 정상 작동하는 MySQL 쿼리를 작성하도록 요청했고 의미있는 결과가 나옴을 확인 할 수 있습니다.

추론

어떤 형태로든 추론이 필요한 작업은 아마도 오늘날 LLM으로 하기 가장 어려운 작업에 속합니다. 추론은 LLM에서 나타날 수 있는 복잡한 애플리케이션의 유형 중에서 가장 흥미로운 분야 중 하나입니다.

수학적인 능력을 필요로 하는 작업에서는 눈에 띄는 개선을 보여 주었지만, 현재의 LLM은 추론 작업을 수행하는 데 어려움을 겪기 때문에 훨씬 더 향상된 프롬프트 엔지니어링 기술을 필요로 합니다. 고급 기술에 대해서는 다음 글에서 다루고, 지금은 산술 능력을 증명할 몇 가지 기본적인 예시를 다뤄 보겠습니다.

Prompt:

9,000 * 9,000는 뭐야?

Output:

81,000,000

좀 더 어려운 문제를 시도해 보겠습니다.

Prompt:

주어진 수 중에서 홀수를 모두 더해서 짝수를 만들어 줘: 15, 32, 5, 13, 82, 7, 1.
A:

Output

아니요, 주어진 수 중 홀수를 모두 더한 값은 홀수입니다: 119.

이번에는 틀렸습니다! 프롬프트를 개선하여 정확도를 향상해 보겠습니다.

Prompt:

주어진 수 중에서 홀수를 모두 더해서 짝수를 만들어 줘: 15, 32, 5, 13, 82, 7, 1.
문제를 단계별로 해결해 봐.
먼저 주어진 수 중 홀수를 찾아낸 뒤, 그것들을 합해서, 결과가 홀수인지 짝수인지 판별해 줘.

Output:

홀수: 15, 5, 13, 7, 1
총합: 4141은 홀수입니다.

훨씬 낫지 않나요? 참고로 저는 이 명령을 여러 번 시도했지만 시스템은 가끔 오답을 제시했습니다. 더 나은 지시와 예시를 결합하는 것으로 보다 정확한 결과를 얻을 수 있습니다.

마무리

프롬프트는 모델이 생성하는 결과물의 질과 효과에 큰 영향을 미치는 중요한 요소입니다. 프롬프트 엔지니어링, 작성 가이드, 팁과 주의사항, 그리고 예시들을 통해 프롬프트를 보다 효과적으로 활용하는 방법에 대해 살펴보았습니다.

이러한 지식과 가이드라인을 바탕으로 사용자의 요구에 맞는 적절한 프롬프트를 설계하고 구현함으로써 모델의 성능을 향상시킬 수 있습니다. 또한, 프롬프트 작성 과정에서 주의해야 할 사항들을 명확히 이해하고 고려함으로써 모델의 안정성과 신뢰성을 높일 수 있습니다.

앞선 글과 이번 글에서도 계속 언급했지만, 프롬프트를 적재적소에 활용하여 더 나은 결과물을 얻을 수 있도록 지속적으로 노력하고 개선해 나가는 것이 중요합니다.

다음 섹션에서는 이러한 모든 작업의 성능을 향상하기 위해 보다 심화된 프롬프트 엔지니어링의 개념과 기법에 대해 설명하겠습니다.

--

--