프롬프트 엔지니어링: 앵무새 길들이기

LLM에서 원하는 답변을 얻는 방법을 소개합니다.
임요한's avatar
Aug 25, 2024
프롬프트 엔지니어링: 앵무새 길들이기

LLM을 비유적으로 표현한 '통계적 앵무새'라는 말은 AI 연구자 Timnit Gebru가 처음 사용했다고 알려져 있습니다. 질문을 넣으면 그에 대한 답변은 사실 해당 모델이 학습한 데이터를 기반으로 확률적으로 결정 되기 때문입니다. 꽤나 답변이 자연스럽게 느껴지지만, 같은 질문에 대해서도 매번 확률적으로 응답하기 때문에 약간 어색한 답변을 하는 경우도 많습니다. "수학을 잘하려면 어떻게 하면 좋을까요"라는 질문에는 청산유수로 답하다가 간단한 계산문제도 쩔쩔 매는 걸 보면 헛웃음이 나오기도 합니다. 대단해 보이면서도 허술한 점이 많은 귀여운 '앵무새'를 길들이기 위한 많은 방법이 있습니다. 그중에서 '프롬프트 엔지니어링'에 대해 몇가지 예시와 함께 소개해드리고자 합니다.

프롬프트엔지니어링?

일단 개념에 대해 한번 짚고 넘어가자면 자동차 엔지니어라면 자동차를 소프트웨어 엔지니어라면 소프트웨어를 다루듯이 프롬프트 엔지니어링도 마찬가지 입니다. 통상 컴퓨터에서는 CLI(Command Line Interface)에서 어떤 명령어를 입력했을 때 화면에 보여지는 문구들 프롬프트 라고 해왔습니다. 또한 방송이나 연극, 발표등에서도 무대 뒤에서 연기자에게 대사를 상기시키는 글을 프롬프트라고 합니다. LLM에서는 사용자가 답변으로 받은 문구가 아닌 쿼리로 입력한 문구를 프롬프트라고 합니다. LLM이 무대에서 사람인양 연기하는 중이고, 우리는 원하는 답변을 얻기 위해 프롬프트를 날리는 중인 셈입니다.

프롬프트의 기본 구조

프롬프트의 4가지 기본 구조에 대한 간단한 설명과 예시입니다.

  1. 명령 + 출력데이터

    • 가장 기본형으로, 샷기법으로 분류시 제로 샷에 해당 하는 예시 입니다.

    질문 : 구름 색깔은?
    답변 : 구름의 색깔은 주로 하늘과 태양의 위치에 따라 달라집니다. 기본적으로 구름은 빛을 반사하는 작은 물방울이나 얼음 결정으로 이루어져 있어서, 태양의 빛이 강할 때는 대부분 밝은 흰색으로 보입니다. 그러나 해가 지거나 … (중략)

  2. 명령 + 맥락 + 출력데이터

    1. 기본 구조에 맥락이 추가됩니다. 맥락은 상황, 시간, 장소와 같은 정보입니다. 아무래도 상대적으로 더 구체적인 답변을 얻을 수 있습니다.

      질문 : 해가 질 때 구름 색깔은?
      답변 : 하늘에 있는 구름의 색깔은 대기의 빛 산란 현상과 일몰의 각도에 따라 다양하게 변화합니다. 일반적으로 구름은 붉은색, 주황색, 노란색과 같은 따뜻한 … (중략)

  3. 명령 + 맥락 + 예시 + 출력데이터

    1. 위 구조에서 예시를 추가한 형태입니다. 언어모델의 추론능력을 향상 시킬 수 있습니다.

      질문 : 해가질때 구름의 색깔과 종류는 ? 예시구조처럼 대답해줘

      1. 권운

      하얀섬유 모양의 구름으로 얼음 결정으로 되어 있다. 구름이 얇아서 시시각각 모습이 바뀐다

      2. 고적운

      중층운으로 양떼구름, 높쌘구름이라고도 한다. 보통 지표면을 기준으로 2~7km에서 나타난다.
      답변 : 해가 질 때 구름의 색깔과 종류는 다음과 같이 설명할 수 있습니다

      1. 적운:

      붉은색이나 핑크색으로 물들며, 하층운 중 가장 낮은 곳에서 형성된다. 저녁 노을 때 특히 화려한 색을 보여 주며, 대기 중 먼지나 습기가 많을 때 더욱 선명하게 나타난다.

      2. 권운:

      높은 고도에서 나타나는 얇고 흰색의 구름으로, 얼음 결정으로 이루어져 있다. 해질녘 하늘에서 금빛이나 분홍빛으로 물들 때가 많다. 이러한 구름은 하늘 전체에 퍼져 있거나 띠 모양으로 나타나기도 한다.

  4. 명령 + 입력 + 출력데이터

    1. 입력데이터는 명령 이외에 외부(인터넷 또는 문서)로 부터 가져온 데이터를 의미합니다.

      질문: 구름의 종류를 설명해줘
      아래 [[입력 데이터]]를 활용해서 한 문단으로 완성해
      [[입력데이터]]
      여러 가지 구름의 모양을 최초로 나눈 사람은 영국의 기상학자 루크 하우드 입니다. 그는 1803년 구름을 네가지 이름으로 구분했습니다.
      층운: 넓고 얇게 펼쳐진 구름
      권운: 가느다랗고 새털처럼 생긴 구름
      적운: 쌓아 올려진 모양의 구름
      난운: 회색 빛의 먹구름
      지금은 이보다 다양한 10개의 기본형으로 나눕니다.
      답변: 구름을 최초로 분류한 영국의 기상학자 루크 하우드는 1803년에 구름을 네 가지 기본 형태로 구분하였습니다. 층운은 넓고 얇게 펼쳐진 구름으로, 보통 하늘 전체를 덮습니다. 권운은 가느다란 새털 모양으로 높은 고도에서… (중략)

프롬프트 유형을 사용할 수 있는 경우를 정리한다면 다음과 같습니다.
1. 명령 출력 : 간단한 질문
2. 명령 맥락 출력 : 맥락에 따라 다른 의미가 되는 경우
3. 명령 맥락 예시 출력 : 논리 적이거나 답변의 형식을 보여줘서 모델의 이해력을 높여야 하는 경우
4. 명령 입력 출력 : 서비스를 구현하는 경우

Shot prompting

샷은 예제를 의미합니다. 프롬프트 내에서 얼마나 제시 했는지에 따라 다르게 구분됩니다. 모델이 답변양식을 빠르게 이해 할 수 있습니다.

  • zero shot : 예시를 제공하지 않습니다.

  • one shot : 예시를 하나만 제공합니다.

  • few shot : 여러개의 예시를 제공합니다.

COT(chain of thought) prompting

복잡한 문제를 단계적으로 생각해서 풀어갈 때 사용하는 기법입니다. 서두에 고민했던 문제 단순한 수학계산을 못하는 문제를 어느 정도 해결할 수 있는 방식입니다.

  • zero shot COT : 예시를 제공하지 않고 “단계적으로 생각해봅니다” 라는 대화를 추가합니다.

  • few shot COT : 단계적으로 문제를 풀고 있는 질문 답변예시를 여러개 추가합니다. 답변중인 예시 함께 COT를 적용합니다.

관련 예시(https://arxiv.org/pdf/2205.11916)

위 내용은 일반적인 zero shot, few shot은 실패하는 테스트가 ‘순차적으로 생각해보자‘ 라는 말을 넣거나 순차적인 방식으로 문제를 푸는 예시 질문과 함께 넣어주니 성공하는 사례입니다. 단순한 생각의 전환이 프롬프트엔지니어링에서는 엄청난 효율을 낼 수 있음을 보여주는 사례라고 생각합니다.

마무리

프롬프트 엔지니어링에 대한 소개, 기본구조 4가지, shot propting, cot prompting에 대해 알아보고 정리했습니다. 감사합니다.

참고자료

프롬프트 엔지니어링 - 반병헌

프롬프트 엔지니어의 업무일지 - 강수진

Large Language Models are Zero-Shot Reasoners

Share article
Subscribe to our newsletter
RSSPowered by inblog