Prompt Engineering From First Principles: 그들이 가르쳐 주지 않는 메커니즘 파트-1

발행: (2025년 12월 28일 오후 05:42 GMT+9)
17 min read
원문: Dev.to

Source: Dev.to

왜 이 시리즈는 다를까

대부분의 블로그는 바로 사용할 수 있는 템플릿을 제공합니다:

  • “이 프롬프트를 사용해 보세요!”
  • “이 10가지 기법을 사용하세요!”

우리가 하는 일은 그렇지 않습니다.

우리는 대형 언어 모델(LLM)의 메커니즘을 깊이 파고듭니다:

  • LLM은 실제로 프롬프트를 어떻게 처리할까요?
  • 메커니즘 수준에서 프롬프트를 효과적으로 만드는 요소는 무엇일까요?
  • LLM이 어디서 실패하고 그 이유는 무엇일까요?

목표는 다른 사람의 예시를 복사하는 대신, 스스로 프롬프트를 설계할 수 있는 정신 모델을 제공하는 것입니다.

시리즈 개요 (현재까지)

  1. 기초 – LLM이 실제로 작동하는 방식
  2. 프롬프트의 예술과 과학
  3. 프롬프트 기법 및 최적화
  4. 프롬프트 평가 및 확장
  5. 팁, 요령 및 경험

추후에 파트를 추가할 수 있습니다.

Part 1으로 뛰어들어 보자

빠른 현실 점검

LLM이 인간처럼 지능적이라고 생각하나요?
당신의 질문을 이해하고 답을 생각해내는 “뇌”가 있나요?

예라고 답했다면 틀렸습니다.

LLM은 생각하지 않습니다. 이해하지도 못합니다. 이들은 다음 토큰을 예측하는 모델—지금까지 본 패턴을 기반으로 다음 토큰을 추측하는 정교한 자동완성 기계입니다.

“잠깐, 단순한 다음 단어 예측이 어떻게 복잡한 질문에 답하고, 코드를 작성하거나, 대화를 유지할 수 있나요?”

좋은 질문입니다. 답은 흥미로운 엔지니어링에 기반하지만, 여기서는 더 나은 프롬프트를 작성하기 위해 알아야 할 것에만 집중합니다. 그 이상도, 그 이하도 아닙니다.

머신이 어떻게 학습하는지 정말 궁금하다면, 제 긴 글을 여기에서 확인해 보세요 (링크 자리표시자).

Source:

프롬프트의 기본 워크플로

프롬프트를 입력하고 Enter를 누르면 모델은 다음과 같은 간단한 단계들을 수행합니다:

  1. 토큰화 – 텍스트가 토큰(텍스트 조각)으로 나뉩니다.
  2. 임베딩 – 각 토큰이 숫자 벡터로 변환됩니다.
  3. 트랜스포머 처리 – 여러 층의 어텐션이 토큰 간 관계를 계산합니다.
  4. 확률 분포 – 모델이 가능한 모든 다음 토큰에 대해 확률을 할당합니다.
  5. 샘플링 / 디코딩 – 토큰이 선택되어 시퀀스에 추가되고, 정지 조건이 충족될 때까지 이 과정이 반복됩니다.

아래에서 각 단계를 자세히 살펴봅니다.

토큰화

토큰은 대략 텍스트 조각을 의미합니다—때로는 전체 단어, 때로는 단어의 일부, 때로는 구두점입니다.

"Hello world" → ["Hello", " world"]          # 2 tokens
"apple"       → ["apple"]                    # 1 token
"12345"       → ["123", "45"]                # 2 tokens

토큰화가 중요한 이유

  • 컨텍스트 윈도우단어가 아니라 토큰 단위로 측정됩니다.
  • 텍스트가 어떻게 토큰화되는지가 모델이 텍스트를 “보는” 방식을 결정합니다.
  • 일부 단어는 하나의 토큰으로 처리되어 효율적이며, 다른 단어는 여러 토큰으로 나뉩니다.

임베딩

모델은 원시 텍스트를 직접 다룰 수 없으며, 숫자만 이해합니다.
각 토큰은 의미적 특성을 포착한 고차원 벡터(임베딩)로 변환됩니다.

트랜스포머 층 & 어텐션

토큰 임베딩은 트랜스포머 층들의 스택을 통과합니다.
어텐션 메커니즘은 모델이 서로에게 중요한 토큰을 판단하도록 합니다.

예시: In the sentence “The bank of the river was muddy,” attention links bankriver and muddy, helping the model interpret “bank” as a riverbank rather than a financial institution.

어휘 전체에 대한 확률 분포

어텐션 처리가 끝나면 모델은 어휘에 있는 모든 토큰에 대해 확률을 생성합니다(보통 50 000개 이상).

Paris      → 0.85   (85 %)
the        → 0.05   (5 %)
beautiful  → 0.03   (3 %)
London     → 0.02   (2 %)
… (수천 개의 다른 토큰이 아주 작은 확률을 가짐)

모델은 **“Paris가 프랑스의 수도라는 것을 안다”**는 것이 아니라, 학습 데이터에서 “The capital of France is” 뒤에 *“Paris”*가 높은 빈도로 등장한다는 통계적 패턴을 학습했을 뿐입니다.

샘플링 / 디코딩

확률 분포에 따라 토큰이 선택됩니다(예: greedy, top‑k, nucleus sampling). 선택된 토큰은 출력에 추가되고, 종료 토큰이나 다른 정지 조건이 나타날 때까지 전체 과정이 반복됩니다.

핵심: LLM은 학습된 통계적 패턴에 기반한 반복적인 다음 토큰 예측기입니다.

“다음 단어 맞추기”에서 유용한 행동까지

LLM이 단순히 확률 기계라면, 어떻게 다음을 할 수 있을까요?

  • 질문에 정확히 답변하기
  • 동작하는 코드를 작성하기
  • 일관된 대화를 유지하기
  • 복잡한 지시를 따르기

답은 모델 행동을 형성하는 두 가지 주요 학습 단계에 있습니다.

사전 학습 (unsupervised)

모델은 수조 개의 토큰을 다양한 출처에서 읽습니다:

  • 웹사이트 (위키피디아, 포럼, 블로그)
  • 코드 저장소 (GitHub)
  • 연구 논문
  • 소셜 미디어

학습 내용: 통계적 동시 발생 패턴
학습하지 못하는 것: 도움이 되는 어시스턴트로 행동하는 방법

예시: 기본 모델에 “프랑스의 수도는 어디인가요?”라고 물어보면, 퀴즈 형식 데이터를 본 뒤 다른 수도들의 목록을 나열할 수 있습니다. 이는 단지 패턴을 이어가는 것이기 때문입니다.

인스트럭션 튜닝 (supervised + RLHF)

  1. 지도 미세조정 (Supervised Fine‑Tuning, SFT) – 인간이 수천 개의 예시 대화(질문 → 좋은 답변)를 작성합니다. 모델은 질문도움이 되는 답변으로 매핑하는 방법을 배우게 됩니다.
  2. 인간 피드백을 통한 강화 학습 (Reinforcement Learning from Human Feedback, RLHF) – 인간이 여러 모델 응답을 “좋음” 또는 “나쁨”으로 평가합니다. 모델은 도움이 되고, 해롭지 않으며, 정직한 응답을 생성하도록 최적화됩니다.

이 단계들은 확률 질량을 이동시킵니다: 이제 모델은 가장 확률이 높은 패턴이 도움이 되는 어시스턴트 답변처럼 보이는 토큰을 예측하게 됩니다.

요약

  • LLM은 토큰화 → 임베딩 → 트랜스포머 → 확률 분포 → 샘플링으로 구성된 다음 토큰 예측기입니다.
  • 사전 학습을 통해 원시 지식(통계적 패턴)을 얻게 됩니다.
  • SFT와 RLHF는 그 지식을 유용하고 정렬된 행동으로 전환합니다.

이 파이프라인을 이해하면 모델의 메커니즘에 맞게 작동하는 프롬프트를 설계할 수 있는 기반을 갖게 되며, 블랙 박스를 “능가”하려고 애쓰는 대신에 활용할 수 있습니다.

다음 내용

Part 2에서는 The Art & Science of Prompting을 탐구합니다 – 이제 이해한 시스템에서 최상의 결과를 얻기 위해 프롬프트를 어떻게 표현하고, 구조화하며, 프레임을 잡을지에 대해 살펴봅니다.

계속 지켜봐 주세요! 🚀

Source:

Controlling generation

모든 것은 여전히 다음 토큰 예측일 뿐입니다. 훈련은 어떤 예측이 높은 확률을 가질지 형태를 잡아줄 뿐입니다.

우리가 이야기했던 확률 분포를 기억하시나요? 여기서 제어가 가능합니다. 모델은 확률을 제공하지만, 구성 파라미터가 그 확률에서 실제 토큰을 어떻게 선택할지를 결정합니다.

Temperature

모델 선택이 얼마나 “무작위”인지를 제어합니다.

예시 상황 – 모델이 다음과 같이 예측합니다:

토큰확률
Paris85 %
beautiful3 %
London2 %
  • 낮은 Temperature (예: 0.2) – 모델이 더 “자신감 있게” 행동하며 거의 항상 최상위 선택을 합니다. Paris가 실질적으로 95 %+ 정도의 확률이 될 수 있습니다.

    • 결과: 결정적이고, 집중된, 반복적인 출력.
    • 사용처: 코드 생성, 데이터 추출, 사실 기반 답변.
  • 높은 Temperature (예: 0.8) – 확률 곡선이 평평해집니다. Paris는 ~60 %로 떨어지고, beautiful은 ~10 %, London은 ~8 %로 상승합니다.

    • 결과: 더 다양하고, 창의적이며, 예측 불가능한 출력.
    • 사용처: 창작 글쓰기, 브레인스토밍, 다양한 관점 제시.

실제 예시

Prompt: "The sky is"
Temperature 0.2 → "blue" (거의 항상)
Temperature 0.8 → "blue" 혹은 "cloudy" 혹은 "vast" 혹은 "filled with stars" (다양하게 변함)

Top‑P (Nucleus Sampling)

확률 임계값을 설정합니다.

Top‑P = 0.9 로 설정하면, 모델은 전체 확률 중 상위 90 %를 차지하는 토큰들만 고려하고 나머지는 무시합니다.

왜 중요한가

  • Top‑P 없이, 온도가 합리적이라 하더라도 모델이 0.001 % 확률의 토큰을 가끔 선택해 완전한 난센스를 만들 수 있습니다.
  • Top‑P = 0.9 를 사용하면, 그런 초저확률 토큰은 절대 고려되지 않으므로 모델은 일관성을 유지하면서도 어느 정도 창의성을 발휘합니다.

실용적인 조합

TemperatureTop‑P효과
0.70.9창의적이면서도 일관된
0.21.0결정적이고 집중된

Top‑K

모델이 고려할 K개의 가장 가능성 높은 토큰만 제한합니다.

예시: Top‑K = 50 → 확률이 가장 높은 50개의 토큰만 고려하고 나머지는 무시합니다.
이는 Top‑P의 더 단순한 버전이며, 현대 시스템에서는 덜 자주 사용됩니다.

전체 단계별 예시

프롬프트: “광합성을 간단히 설명해 주세요”

  1. 토큰화
    ["Explain", " photosynthesis", " in", " simple", " terms"]

  2. 모델 처리 – 트랜스포머가 토큰 간 관계를 계산합니다.

  3. 다음 토큰에 대한 확률 분포

토큰확률
Photosynthesis40 %
It15 %
The12 %
In8 %
  1. 구성 적용 – 온도 0.3, Top‑P 0.9

    • 낮은 온도는 분포를 날카롭게 만듭니다: Photosynthesis → 65 %
    • 모델은 Photosynthesis를 선택합니다.
  2. 반복 – 이제 시퀀스는

    Explain photosynthesis in simple terms Photosynthesis

    다음 토큰에 대한 확률을 계산하고, 동일한 구성으로 선택하며, 답변이 완성될 때까지 계속합니다.

모델은 절대 “광합성을 이해”하지 못했습니다. 훈련 데이터의 패턴을 기반으로 통계적으로 설명을 구성하는 토큰을 예측했을 뿐입니다.

핵심 요약

LLM은 확률 엔진이며, 추론 기계가 아닙니다. 모든 응답은 훈련 데이터에 의해 형성되고 구성 매개변수에 의해 제어되는 다음 토큰에 대한 통계적 예측입니다.

확률 엔지니어링

프롬프트는 단순히 질문을 하는 것이 아니라 모델이 사용하는 전체 확률 풍경을 형성합니다. 표현을 미세 조정하고, 지시 순서를 바꾸거나, 예시를 추가함으로써 다른 토큰이 더 가능성 있게 만들어져 다른 출력이 나오게 할 수 있습니다.

다음 파트에서는 프롬프트의 예술과 과학을 탐구합니다—확률을 여러분에게 유리하게 조정하는 프롬프트를 의도적으로 만드는 방법을 다룹니다.

리소스

저는 이 시리즈를 위해 GitHub 저장소를 만들었으며, 여기서 코드와 추가 자료를 공유할 예정입니다. 한 번 살펴보고 별을 눌러 주세요!

자유롭게 생각, 댓글, 그리고 인사이트를 공유해 주세요. 함께 배우고 성장합시다!

Back to Blog

관련 글

더 보기 »

LLM에 가드레일을 적용하세요

!Forem 로고https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%...