LLM은 입력된 텍스트를 바탕으로 가장 적합한 답변을 생성하는데, 이때 사용자가 질문을 어떻게 구성하느냐에 따라 응답의 질과 관련성이 크게 달라질 수 있습니다. 프롬프트 엔지니어링은 이러한 과정을 체계적으로 탐구하고, 최적의 입력을 설계해 원하는 결과를 얻어내는 기술입니다.
프롬프트 엔지니어링이 중요한 이유는 세 가지입니다.
- 동일한 질문이라도 프롬프트 구성에 따라 응답 품질이 크게 달라진다.
- 효과적인 설계는 모델의 연산 비용을 줄이고 처리 속도를 향상시킨다.
- 적절한 프롬프트는 모델의 편향성을 줄이고 일관된 출력을 보장한다.
많은 글이 프롬프트에 공식이 있는 것처럼 말하지만, 저자는 가장 중요한 것이 사용자가 원하는 바를 간단하고 명료하게 전달하는 것이라고 못박습니다.
프롬프트 엔지니어링과 콘텍스트 엔지니어링
최근 주목받는 콘텍스트 엔지니어링(context engineering) 은 LLM의 컨텍스트 윈도가 커지고 RAG가 보편화되면서 등장한 흐름입니다. 둘의 관심사가 다릅니다.
| 프롬프트 엔지니어링 | 콘텍스트 엔지니어링 | |
|---|---|---|
| 초점 | 모델에게 ‘어떻게(how)’ 행동할지 지시 | 모델이 참고해야 할 ‘무엇(what)’인 데이터와 배경 지식 |
| 수단 | 역할극, 논리적 추론 유도 | 데이터를 최적화해 배치 — 구조화(JSON, 마크다운), 중요도 순 재배치 |
예를 들어 수십 개의 관련 문서를 검색해 왔을 때 이를 단순히 나열하는 것이 아니라 모델이 이해하기 쉬운 구조로 정리하거나 중요도 순으로 재배치해 넣는 것이 콘텍스트 엔지니어링입니다.
다만 책은 둘을 갈라놓지 않습니다. 결국 이 콘텍스트 역시 프롬프트라는 그릇에 담겨 모델에 전달된다는 점에서 본질은 같습니다. 콘텍스트 엔지니어링은 ‘모델이 정보를 더 잘 소화할 수 있도록 프롬프트의 정보 영역을 정교하게 설계하는 고도화된 프롬프트 작성법‘이며, 따라서 프롬프트 작성 원칙은 콘텍스트를 구성할 때도 그대로 적용됩니다.
페르소나 — LLM에게도, 독자에게도
페르소나(persona) 는 특정 역할, 성격, 상황에 맞춰 대화형 LLM 모델이 대답하거나 독자가 특정 시각에서 내용을 이해할 수 있도록 설정하는 개념입니다. 여기서 중요한 건 페르소나를 LLM에 부여할 수도 있고, 사용자(독자)에게 부여할 수도 있다는 점입니다.
LLM에게 부여하기
‘당신은 콘텐츠 마케터입니다. 고객의 관심을 끌 수 있는 소셜 미디어 캠페인을 기획하고, 이를 간략히 설명해주세요’라고 하면, 모델은 ‘지속 가능한 미래를 위한 작은 실천’ 같은 캠페인 주제를 잡고 고객 참여형 전략을 제시합니다. 지정된 역할을 충실히 수행해 출력을 더 구체적이고 유용하게 만듭니다.
독자에게 부여하기
독자의 나이, 경험 수준, 관심사를 고려해 같은 개념을 다른 방식으로 설명하는 것입니다. 책의 ‘API 설명’ 예시가 이 차이를 잘 보여 줍니다.
| 독자 | 설명 방식 |
|---|---|
| 5살 아이 (구름이 비를 만드는 방법) | “구름은 하늘에 있는 아주 작은 물방울로 만들어져 있어. 이 물방울들이 많아지면 무거워져서 땅으로 떨어져 비가 되는 거야!” — 단순하고 생생한 표현 |
| 주니어 엔지니어 | “API는 두 소프트웨어가 서로 대화하도록 돕는 다리 같아요. 날씨 앱이 데이터를 얻으려면 날씨 API를 사용해서 정보를 받아오는 거예요” — 일상적인 용어로 풀이 |
| 숙련된 엔지니어 | “API 설계는 사용성과 안정성을 중점으로 해야 합니다. RESTful 설계를 기준으로 리소스를 명확히 표현하고, HTTP 메서드는 행위를 나타내야 합니다” — 전문성을 담은 정보 |
예시의 개수: 제로샷 · 원샷 · 퓨샷
예시를 쓰지 않으면 제로샷, 하나면 원샷, 여럿이면 퓨샷입니다.
| 장점 | 단점 | 적합한 상황 | |
|---|---|---|---|
| 제로샷 | 프롬프트가 짧아 토큰 소비가 적고 구현이 간단 | 복잡하거나 특수한 형식의 작업에서 정확도가 떨어지고, 지시를 잘못 해석할 수 있다 | 일반적인 지식 질문, 간단한 분류·요약 등 LLM이 이미 잘하는 작업 |
| 원샷 | 제로샷보다 명확한 지침을 줘서 작업의 목적과 형식을 더 잘 이해시킨다 | 다양한 변형이나 복잡한 패턴을 설명하기에는 제한적. 예를 들어 일인칭이 남성 삼인칭으로만 변환된다는 인상을 줄 수 있다 | 단순하지만 약간의 지침이 필요한 작업, 형식 변환, 기본 분류 |
| 퓨샷 | 출력 형식·패턴·맥락을 학습해, 유사한 새 입력에 재학습 없이도 정확하고 세부적인 답변을 생성 | 프롬프트가 길어진다 | 일관된 형식이 필요한 변환·분류 작업 |
원샷의 단점으로 든 ‘남성 삼인칭’ 예시가 재미있습니다. ‘나는 오늘 아침에 산책을 했다 → 그는 오늘 아침에 산책을 했다’ 하나만 주면, 모델이 삼인칭 변환을 ‘그’로만 이해할 수 있습니다. 그래서 퓨샷에서는 ‘그녀’가 들어간 예시를 함께 넣습니다.
다음 문장을 일인칭에서 삼인칭으로 바꾸세요.
예시 1: 나는 오늘 아침에 산책을 했다. → 그는 오늘 아침에 산책을 했다.
예시 2: 나는 점심으로 샌드위치를 먹었다. → 그녀는 점심으로 샌드위치를 먹었다.
질문: 나는 저녁에 영화를 볼 예정이다.
분류 작업도 같은 방식입니다.
주어진 문장을 긍정적 또는 부정적으로 분류하세요.
예시 1: 이 영화 정말 재미있었어! → 긍정적
예시 2: 서비스가 너무 형편없었어요. → 부정적
질문: 이 제품은 정말 만족스러웠어요!
예시의 효과는 모델 크기에 따라 다르다
그림 3-1(GPT-3 논문)이 보여 주는 바가 중요합니다. 컨텍스트에 넣는 예시 개수를 늘렸을 때 정확도가 오르는 정도는 모델 크기에 따라 완전히 다릅니다.
- 175B: 예시를 늘릴수록 정확도가 60%대까지 가파르게 상승
- 13B: 완만하게 20%대까지 상승
- 1.3B: 예시를 아무리 늘려도 거의 오르지 않음
같은 그래프에서 자연어 지시문(Natural Language Prompt)이 있는 경우가 없는 경우(No Prompt)보다 항상 위에 있다는 점도 눈여겨볼 만합니다. 특히 예시가 적을수록 지시문의 효과가 큽니다.
퓨샷 프롬프팅은 ChatGPT 같은 플랫폼을 쓸 때보다 직접 서비스를 개발할 때 더 유용합니다. 특히 답변 형식을 JSON으로 반환하게 하는 구조화된 출력(structured output)과 결합하면, LLM이 개발자가 원하는 방식으로 답변을 생성하도록 유도할 수 있습니다.
생각의 사슬(CoT)
생각의 사슬(chain-of-thought, CoT) 은 복잡한 문제를 해결하거나 논리적 사고 과정을 거쳐 답을 도출하도록 LLM을 유도하는 기법입니다. 최종 응답을 단번에 생성하는 대신 문제 해결의 중간 단계들을 순차적으로 설명하며 사고의 흐름을 따라가도록 합니다.
프롬프트에 포함할 요소는 셋입니다.
- 문제에 대한 질문을 제시한다.
- 문제 해결을 위한 사고 과정이나 논리적 단계를 텍스트로 풀어서 작성한다.
- 각 단계를 거쳐 최종적으로 정답을 도출한다.
CoT 논문의 유명한 예시가 그림 3-2로 실려 있습니다. 같은 질문에 대해 표준 프롬프팅과 CoT 프롬프팅의 결과가 갈립니다.
질문: 구내식당에 사과가 23개 있었습니다. 점심을 만드는 데 20개를 사용하고 6개를 더 샀다면, 사과가 몇 개 남았나요?
| 예시로 준 답변 | 모델 출력 | |
|---|---|---|
| 표준 프롬프팅 | “정답은 11입니다.” | “정답은 27입니다.” ❌ |
| CoT 프롬프팅 | “로저는 공 5개로 시작했습니다. 3개씩 들어있는 캔 2개는 테니스 공 6개입니다. 5 + 6 = 11. 정답은 11입니다.” | “구내식당에는 원래 사과가 23개 있었습니다. 점심을 만드는 데 20개를 사용했습니다. 그래서 23 - 20 = 3개가 남았습니다. 사과 6개를 더 샀으므로, 3 + 6 = 9개가 됩니다. 정답은 9입니다.” ✅ |
차이는 예시 답변에 풀이 과정을 넣었는지뿐입니다. 정답만 보여 준 쪽은 답만 툭 내놓다 틀리고, 풀이를 보여 준 쪽은 모델도 단계를 밟아 정답에 도달합니다.
CoT는 단순히 정답을 제시하는 데 그치지 않고 문제를 해결하는 사고 과정 자체를 명시적으로 드러내어 모델의 응답을 논리적이고 투명하게 만듭니다. 수학 문제, 논리적 추론, 복잡한 데이터 분석 등 복잡하고 단계적인 접근이 필요한 작업에서 강력합니다.
프롬프트가 어렵다면
지금까지의 기법들은 모두 ‘프롬프트 작성 공식’이라기보다 ‘사용자가 원하는 내용을 전달하는 방식’ 으로 이해하는 편이 좋습니다.
작성이 어렵다면 ChatGPT, Claude, Gemini 같은 도구로 연습하는 것을 추천합니다. OpenAI는 프롬프트 최적화 도구를, 앤트로픽은 Prompt Improver를 공개했습니다. LLM이 프롬프트를 어떻게 작성하는지 패턴을 배울 수 있는 도구들입니다.
정리
- 프롬프트 엔지니어링은 응답 품질뿐 아니라 비용과 속도, 편향까지 좌우한다.
- 콘텍스트 엔지니어링은 how가 아니라 what을 다루지만, 결국 프롬프트라는 그릇에 담기므로 본질은 같다.
- 페르소나는 LLM에게만이 아니라 독자에게도 부여한다. 같은 API도 5살 아이와 숙련 엔지니어에게 다르게 설명된다.
- 예시는 많을수록 좋은 게 아니라 모델이 클수록 효과가 크다. 작은 모델에서는 예시를 늘려도 정확도가 오르지 않는다.
- CoT의 핵심은 질문이 아니라 예시 답변에 풀이 과정을 넣는 것이다. 그것만으로 오답이 정답이 된다.