프롬프트 엔지니어링

프롬프트 엔지니어링 (Prompt Engineering)

LLM(대규모 언어 모델)과 프롬프트의 기본 개념, 그리고 프롬프트 엔지니어링이 왜 필요한지, 예제를 통해 직접 만들어보는 문서예요.

출처: 문서

본문

LLM(대규모 언어 모델)이란? (What is a Large Language Model?)

대규모 언어 모델(LLM)은 본질적으로 단어 시퀀스를 입력으로 받아 그 다음에 이어질 가장 가능성 높은 시퀀스를 예측하는 것을 목표로 하는 예측 엔진이에요. 가능한 다음 시퀀스에 확률을 할당한 뒤 하나를 선택하는 방식으로 동작해요. 모델은 지정된 종료 기준(stopping criterion)을 충족할 때까지 시퀀스를 계속 생성해요.

이 모델들은 방대한 텍스트 말뭉치에서 훈련하며 배우기 때문에, 어떤 사용 사례에는 다른 경우보다 더 잘 맞을 수 있어요. 예를 들어 GitHub 데이터로 훈련된 모델은 소스 코드의 시퀀스 확률을 특히 잘 이해할 수 있어요. 하지만 생성된 시퀀스가 종종 그럴듯해 보이지만, 때로는 무작위적이고 현실에 근거하지 않을 수 있다는 점을 이해하는 것이 중요해요. 이러한 모델이 더 정확해질수록 놀라운 능력과 응용 프로그램이 많이 등장해요.

프롬프트란? (What is a prompt?)

프롬프트는 LLM의 시작점이에요. 모델이 텍스트를 생성하도록 촉발하는 입력이에요. 프롬프트 엔지니어링의 범위는 단순히 프롬프트를 작성하는 것뿐만 아니라, 은닉 프롬프트(hidden prompts), 토큰, 토큰 한도, 그리고 jailbreaks와 leaks 같은 현상을 포함하는 프롬프트 해킹(prompt hacking)의 가능성 같은 관련 개념을 이해하는 것도 포함해요.

프롬프트 엔지니어링이 왜 필요한가? (Why is prompt engineering needed?)

프롬프트 엔지니어링은 현재 LLM의 응답을 형성하는 데 중추적인 역할을 해요. 더 넓은 범위의 질의에 더 효과적으로 응답하도록 모델을 조정할 수 있게 해 줘요. 여기에는 의미 검색(semantic search), 명령 문법(command grammars), ReActive 모델 아키텍처 같은 기법의 사용이 포함돼요. LLM의 성능, 컨텍스트 윈도우, 비용은 모델과 모델 프로바이더별로 달라서 제약 조건이 더 추가돼요. 예를 들어 GPT-4 모델은 GPT-3.5-turbo보다 비싸고 현저히 느리지만, 특정 작업에서는 더 효과적일 수 있어요. 소프트웨어 엔지니어링의 많은 것처럼 비용과 성능 사이의 트레이드오프가 존재해요.

LLM을 비교하고 조정하는 데 도움을 주기 위해, 서로 다른 모델의 성능을 온라인에서 나란히 비교할 수 있는 AI 플레이그라운드를 만들었어요. 준비가 되면 AI SDK로 코드를 생성해 여러분의 프롬프트와 선택한 모델을 자신의 애플리케이션에 빠르게 사용할 수도 있어요.

예제: 슬로건 생성기 만들기 (Example: Build a Slogan Generator)

지시사항으로 시작하기 (Start with an instruction)

마케팅 캠페인용 슬로건 생성기를 만들고 싶다고 상상해 보세요. 눈에 띄는 슬로건을 만드는 것은 항상 간단하지 않아요!

먼저 여러분이 원하는 것을 명확히 하는 프롬프트가 필요해요. 지시사항으로 시작해볼게요. 이 프롬프트를 제출해 첫 번째 완성(completion)을 생성해 보세요.

<상호작용 예제: "Create a slogan for a coffee shop.">

나쁘지 않네요! 이제 지시사항을 더 구체적으로 만들어볼게요.

<상호작용 예제: "Create a slogan for an organic coffee shop.">

프롬프트에 설명적인 용어 하나를 도입하는 것만으로도 완성이 달라져요. 본질적으로 프롬프트를 작성하는 것이 모델을 "지시"하거나 "프로그래밍"하는 수단이에요.

예제 포함하기 (Include examples)

명확한 지시는 품질 좋은 결과의 핵심이지만, 항상 충분한 것은 아닐 수 있어요. 지시를 더 강화해볼게요.

<상호작용 예제: "Create three slogans for a coffee shop with live music.">

이 슬로건들은 괜찮지만 더 나아질 수 있어요. 모델이 프롬프트에서 'live' 부분을 놓친 것 같아요. 더 적절한 제안을 생성하도록 조금 바꿔볼게요.

종종 모델에게 요구사항을 보여주면서 동시에 말하는 것이 유익해요. 프롬프트에 예제를 포함하면 패턴이나 미묘한 차이를 전달하는 데 도움이 돼요. 몇 가지 예제가 들어 있는 이 프롬프트를 시험해 보세요.

<상호작용 예제: "Create three slogans for a business with unique features. Business: Bookstore with cats ..." (예제 포함)>

좋아요! 특정 입력에 대한 기대 출력의 예제를 포함함으로써 모델이 우리가 목표로 했던 종류의 이름을 생성하게 됐어요.

설정 조정하기 (Tweak your settings)

프롬프트를 설계하는 것 외에도 모델 설정을 조정해 완성에 영향을 줄 수 있어요. 핵심 설정 중 하나는 temperature예요.

같은 프롬프트를 반복했을 때 같거나 거의 같은 완성이 나온 것을 본 적이 있을 거예요. 이것은 temperature가 0일 때 발생해요.

temperature를 1로 설정하고 동일한 프롬프트를 몇 번 다시 제출해 보세요.

<상호작용 예제: temperature 1로 재제출>

차이점이 보이나요? temperature가 0보다 크면 같은 프롬프트가 매번 다양한 완성을 만들어내요.

모델은 앞선 텍스트 다음에 올 가장 가능성 높은 텍스트를 예측한다는 점을 기억하세요. temperature는 0에서 1 사이의 값으로, 기본적으로 이런 예측을 할 때 모델의 자신감 수준을 결정해요. 온도가 낮을수록 위험이 적어 더 정밀하고 결정적인 완성이 나와요. 온도가 높을수록 더 다양한 완성이 나와요.

슬로건 생성기에는 많은 이름 제안 풀이 필요할 수 있어요. 중간 정도인 0.6의 temperature가 잘 맞을 거예요.

프롬프트 엔지니어링은 매주 새로운 방법과 연구 논문이 나올 만큼 빠르게 진화하고 있어요. 프롬프트 엔지니어링을 배우고 실험하는 데 유용하다고 생각한 자료 몇 가지를 소개할게요:

더 알아보기 (Learn more)