https://www.claude.com/blog/best-practices-for-prompt-engineering
컨텍스트 엔지니어링은 LLM 작업에서 점점 더 중요한 요소로 부각되고 있으며, 프롬프트 엔지니어링은 그 핵심 구성 요소다.
프롬프트 엔지니어링은 AI 모델로부터 더 나은 결과를 얻기 위해 명령을 구조화하는 기술이다. 질문을 구성하고 스타일을 명시하며 컨텍스트를 제공하고 모델의 동작을 유도하여 목표를 달성하는 방법을 다룬다.
모호한 지시와 정교하게 설계된 프롬프트의 차이는 일반적인 출력과 정확히 원하는 결과 사이의 간격을 좁힐 수 있다. 잘못 구성된 프롬프트는 의도를 명확히 하기 위해 여러 번의 소통이 필요할 수 있지만, 효과적인 프롬프트는 한 번에 원하는 결과를 도출한다.
시작을 돕기 위해, 우리 팀이 모은 즉각적인 결과 개선을 위한 실용적인 방법을 포함한 모범 사례를 소개한다. 오늘 바로 적용할 수 있는 간단한 습관부터 시작해 복잡한 프로젝트를 위한 고급 기법까지 단계적으로 살펴본다.
기본적으로 프롬프트 엔지니어링은 LLM에 전달하는 질의를 조정하는 과정이다. 단순히 요청 전에 추가 정보를 덧붙이는 것처럼 보일 수 있지만, 어떤 정보를 어떻게 제공할지 판단하는 것이 효과적인 프롬프트를 설계하는 핵심이다.
이 프롬프트 엔지니어링 기법들은 효과적인 AI 상호작용의 기반을 이룬다. 응답 품질을 즉시 개선하려면 이 기법들을 꾸준히 적용해야 한다.
최신 AI 모델은 명확하고 직접적인 지시에 탁월한 반응을 보인다. 모델이 여러분의 의도를 추측하리라 가정하지 말고, 명시적으로 요구사항을 전달해야 한다. 모호하지 않은 간결한 언어로 정확히 원하는 바를 표현한다.
핵심 원칙: 모델에게 정확히 원하는 내용을 알려준다. 포괄적인 출력이 필요하면 명시적으로 요청한다. 특정 기능이 필요하면 구체적으로 나열한다. Claude 같은 최신 모델은 특히 명확한 지시를 받았을 때 뛰어난 성능을 발휘한다.
예시: 분석 대시보드 만들기
모호한 표현: “분석 대시보드를 만들어라”
명확한 표현: “분석 대시보드를 만들어라. 관련 기능과 상호작용 요소를 최대한 많이 포함시켜라. 기본적인 수준을 넘어 완성도 높은 구현을 목표로 한다.”
두 번째 버전은 포괄적인 기능을 요구하며, 최소 요구사항을 넘어서길 원한다는 신호를 명확히 전달한다.
모범 사례:
왜 중요한지 설명하면 AI 모델이 목표를 더 잘 이해하고 더 정확한 응답을 제공할 수 있다. 특히 기본 목적을 추론할 수 있는 최신 모델에서 효과적이다.
예시: 형식 선호도
덜 효과적인 경우: “글머리 기호 절대 사용 금지”
더 효과적인 경우: “나는 글머리 기호보다 자연스러운 문단 형태의 응답을 선호한다. 흐르는 듯한 글이 읽기 쉽고 대화 형식에 더 가깝기 때문이다. 글머리 기호는 너무 형식적이고 목록처럼 느껴져 내 캐주얼한 학습 스타일과 맞지 않는다.”
두 번째 버전은 규칙 배경에 대한 논리를 이해시켜줘 관련 형식 선택 시 더 나은 결정을 내릴 수 있게 한다.
컨텍스트 제공이 필요한 경우:
프롬프트 엔지니어링에서 구체성은 명확한 지침과 요구사항을 포함해 구조화하는 것을 의미한다. 원하는 내용을 더 상세히 설명할수록 결과물의 질이 높아진다.
예시: 식단 계획
모호한 예시: “지중해식 식단 계획을 만들어 주세요”
구체적인 예시: “당뇨병 전단계 관리를 위한 지중해식 식단 계획을 작성해 주세요. 하루 1,800칼로리, 저혈당 지수 음식에 중점을 둔 구성으로 아침, 점심, 저녁, 간식 1회를 포함하고 각각의 영양 성분 분석을 상세히 표시해 주세요.”
효과적인 프롬프트 작성법
다음 요소를 포함한다:
예제가 항상 필요한 것은 아니지만, 개념 설명이나 특정 형식 시연 시 효과적이다. 원샷 또는 퓨샷 프롬프팅으로도 알려진 이 방법은 직접 보여주는 방식으로 설명만으로는 전달하기 어려운 미묘한 요구사항을 명확히 한다.
최신 모델 참고사항: Claude 4.x와 같은 고급 모델은 예제의 세부 사항에 매우 민감하게 반응한다. 원하는 동작을 유도하고 피해야 할 패턴을 최소화하려면 예제를 신중하게 선택해야 한다.
예제: 기사 요약
예제 없이: “이 기사를 요약해 주세요”
원하는 요약 스타일 예시:
기사: [AI 규제 관련 기사 링크]
요약: EU, 고위험 AI 시스템 대상으로 포괄적 AI법 통과. 주요 조항에는 투명성 요건과 인간 감독 의무 포함. 2026년 발효.
이제 동일한 스타일로 다음 기사를 요약해 주세요: [새 기사 링크]예제 사용이 효과적인 경우:
전문가 팁: 먼저 하나의 예제(원샷)로 시작한다. 원하는 출력이 나오지 않을 때만 추가 예제(퓨샷)를 사용한다.
AI가 추측하기보다 불확실성을 표현할 수 있도록 명시적으로 허용한다. 이렇게 하면 잘못된 정보 생성(hallucination)을 줄이고 신뢰성을 높일 수 있다.
예시: “이 재무 데이터를 분석하고 추세를 파악하세요. 결론을 내리기에 데이터가 부족하다면, 추측하지 말고 그 사실을 알려주세요.”
이 간단한 추가 사항은 모델이 한계를 인정할 수 있게 함으로써 응답의 신뢰도를 높여준다.
기본적인 접근법만으로도 많은 상황을 해결할 수 있지만, 더 복잡한 경우에는 고급 기법이 필요하다. 에이전트 기반 솔루션을 구축하거나 복잡한 데이터 구조를 다룰 때, 그리고 다단계 문제를 해결해야 할 때 특히 유용하다.
사전 입력(prefilling)은 AI의 응답을 미리 시작함으로써 형식, 톤, 구조를 안내하는 기술이다. 이 기법은 출력 형식을 강제하거나 서두를 건너뛸 때 특히 효과적이다.
사전 입력을 사용해야 할 때:
예시: JSON 출력 강제하기
사전 입력 없이 Claude는 다음과 같이 말할 수 있다: “요청하신 JSON은 다음과 같습니다: {…}”
사전 입력 사용 시(API 사용 예시):
messages=[
{"role": "user", "content": "제품 설명에서 이름과 가격을 추출해 JSON으로 변환하세요."},
{"role": "assistant", "content": "{"}
]AI는 여는 중괄호부터 이어서 유효한 JSON만 출력한다.
참고: 채팅 인터페이스에서는 명시적으로 지시함으로써 비슷한 효과를 낼 수 있다: “서두 없이 유효한 JSON만 출력하세요. 응답은 여는 중괄호로 시작하세요.”
사고 연쇄(Chain of Thought, CoT) 프롬프팅은 답변 전 단계별 추론 과정을 요구하는 기법이다. 구조화된 사고가 필요한 복잡한 분석 작업에 효과적이다.
모던 접근 방식: Claude는 사고 확장 기능을 제공해 구조화된 추론을 자동화한다. 가능한 경우 사고 확장 기능을 사용하는 것이 일반적으로 더 낫지만, 수동 CoT를 이해하는 것은 여전히 가치가 있다. 사고 확장 기능을 사용할 수 없거나 검토 가능한 명시적 추론이 필요한 경우 유용하다.
사고 연쇄를 사용해야 할 때:
주요 사고 연쇄 구현 방식 세 가지:
기본형 사고 연쇄
간단히 “단계별로 생각하라”는 지시를 추가한다.
올해 '아이들을 위한 사랑' 프로그램에 기부를 요청하는 개인 맞춤형 이메일을 작성하라.
프로그램 정보:
<program>
{{PROGRAM_DETAILS}}
</program>
기부자 정보:
<donor>
{{DONOR_DETAILS}}
</donor>
이메일 작성 전 단계별로 생각하라.안내형 사고 연쇄
구체적인 추론 단계를 제공하도록 프롬프트를 구조화한다.
이메일 작성 전 생각하라. 먼저, 기부자의 기부 이력을 고려해 어떤 메시지가 호소력 있을지 생각하라. 다음, '아이들을 위한 사랑' 프로그램 중 어떤 측면이 공감을 일으킬지 고려하라. 마지막으로 분석을 바탕으로 개인 맞춤형 기부 요청 이메일을 작성하라.구조화된 사고 연쇄
태그를 사용해 추론 과정과 최종 답변을 분리한다.
<thinking> 태그 안에서 이메일 작성 전 생각하라. 먼저 기부자에게 호소할 메시지를 분석하라. 다음, 관련 프로그램 측면을 식별하라. 마지막으로 분석을 바탕으로 <email> 태그 안에 개인 맞춤형 기부 요청 이메일을 작성하라.참고: 사고 확장 기능이 사용 가능한 경우에도 복잡한 작업에는 명시적 CoT 프롬프팅이 여전히 유용할 수 있다. 두 접근 방식은 상호 배타적이 아니라 상호 보완적이다.
현대 AI 모델의 응답 형식을 효과적으로 제어하는 몇 가지 방법이 있다:
1. 하지 말아야 할 것보다 해야 할 것을 명확히 알려주기
“마크다운을 사용하지 마세요”라고 말하는 대신
“응답은 자연스럽게 흐르는 문단으로 구성해 주세요”라고 지시한다.
2. 원하는 출력 스타일에 맞춰 프롬프트 스타일 조정하기
프롬프트에서 사용하는 형식 스타일이 AI의 응답 스타일에 영향을 미친다.
최소한의 마크다운을 원한다면 프롬프트에서도 마크다운 사용을 줄인다.
3. 형식 설정을 명확히 지정하기
세밀한 형식 제어를 원할 경우:
보고서나 분석을 작성할 때는 완결된 문단을 사용해 명확하고 자연스럽게 작성한다.
문단 구분은 표준적인 방식을 따른다.
마크다운은 주로 인라인 코드, 코드 블록, 간단한 제목에만 사용한다.
진정으로 개별 항목을 나열해야 하거나 사용자가 명시적으로 요청하지 않는 한
순서 있는 목록이나 순서 없는 목록을 사용하지 않는다.
글머리 기호로 항목을 나열하는 대신, 문장 속에 자연스럽게 통합한다.
독자가 아이디어를 자연스럽게 따라갈 수 있는 흐름 있는 텍스트를 목표로 한다.기존 기법들과 달리, 프롬프트 체이닝은 단일 프롬프트로 구현할 수 없다. 체이닝은 복잡한 작업을 더 작은 단계로 나누고 각 단계마다 별도의 프롬프트를 사용한다. 각 프롬프트는 한 단계를 처리하며, 출력 결과는 다음 단계의 입력으로 사용된다.
이 접근 방식은 개별 작업을 단순화함으로써 정확도를 높이는 대신 지연 시간을 늘린다. 일반적으로 워크플로우나 프로그래밍 방식으로 구현하지만, 응답을 받은 후 수동으로 프롬프트를 제공할 수도 있다.
예시: 연구 요약
첫 번째 프롬프트: “이 의학 논문을 방법론, 연구 결과, 임상적 함의로 요약하세요.”
두 번째 프롬프트: “위 요약문의 정확성, 명확성, 완성도를 평가하고 점수화된 피드백을 제공하세요.”
세 번째 프롬프트: “[2단계 피드백]을 바탕으로 요약문을 개선하세요.”
각 단계는 집중된 지시를 통해 결과를 점진적으로 개선한다.
프롬프트 체이닝 사용 시기:
단점: 체이닝은 여러 API 호출로 인해 지연 시간이 증가하지만, 복잡한 작업의 정확도와 안정성을 크게 향상시킨다.
이전 AI 모델에서 유행했던 프롬프트 엔지니어링 기법 중 일부는 Claude 같은 최신 모델에서는 덜 필요하다. 하지만 오래된 문서에서 여전히 접할 수 있으며, 특정 상황에서는 유용할 때도 있다.
XML 태그는 특히 대량의 데이터를 포함할 때 프롬프트에 구조와 명확성을 더하기 위해 권장되던 방식이다. 현대 모델은 XML 태그 없이도 구조를 잘 이해하지만, 특정 상황에서는 여전히 유용할 수 있다.
예시:
<athlete_information>
- 키: 6'2"
- 체중: 180 lbs
- 목표: 근육 증가
- 식이 제한: 채식주의자
</athlete_information>
위 운동선수 정보를 바탕으로 식단 계획을 생성하세요.XML 태그가 도움되는 경우:
현대적 대안: 대부분의 경우 명확한 제목, 공백, 명시적인 언어(“아래 운동선수 정보를 사용하여…”)만으로도 동일한 효과를 얻을 수 있으며 오버헤드가 적다.
역할 프롬프팅은 질문 방식에 전문가의 관점과 성격을 부여한다. 이 기법은 효과적이지만, 현대적인 모델은 충분히 정교하기 때문에 지나치게 강압적인 역할 부여는 종종 불필요하다.
예시: “당신은 금융 조언자입니다. 이 투자 포트폴리오를 분석해 주세요…”
주의사항: 역할을 지나치게 제한하지 말 것. “도움을 주는 조력자”로 설정하는 것이 “세계적인 전문가로서 기술 용어만 사용하며 절대 실수하지 않는 사람” 같은 과도한 역할보다 나은 경우가 많다. 지나치게 구체적인 역할은 AI의 도움을 제한할 수 있다.
역할 프롬프팅이 도움되는 경우:
현대적인 대안: 역할을 부여하기보다 원하는 관점을 명시적으로 표현하는 것이 더 효과적일 수 있다. 예를 들어 “이 투자 포트폴리오를 분석할 때 위험 감내 능력과 장기 성장 가능성에 초점을 맞춰 주세요”라고 요청할 수 있다.
지금까지 개별적인 기법을 따로 살펴봤지만, 실제로는 여러 기법을 전략적으로 조합할 때 그 진가가 발휘된다. 프롬프트 엔지니어링의 핵심은 모든 기법을 사용하는 것이 아니라, 특정 목적에 맞는 적절한 조합을 선택하는 데 있다.
여러 기법을 결합한 예시:
이 분기 보고서에서 주요 재무 지표를 추출해 JSON 형식으로 제시한다.
이 데이터는 자동화된 처리를 위해 사용되므로, 서문이나 설명 없이 유효한 JSON만 포함해야 한다.
다음 구조를 사용한다:
{
"revenue": "값과 단위",
"profit_margin": "백분율",
"growth_rate": "백분율"
}
보고서에 명확히 명시되지 않은 지표가 있을 경우, 추측하지 않고 null을 사용한다.
응답은 여는 중괄호로 시작한다: {이 프롬프트는 다음과 같은 기법을 결합했다:
모든 프롬프트에 모든 기법이 필요한 것은 아니다. 다음은 결정을 도와주는 프레임워크다:
기본 접근법:
기법 선택 가이드:
| 필요한 경우… | 사용 기법… |
|---|---|
| 특정 출력 형식 | 예시, 미리 채우기 또는 명시적 형식 지시 |
| 단계별 추론 | 확장 사고(Claude 4.x) 또는 사고의 연쇄 |
| 복잡한 다단계 작업 | 프롬프트 체이닝 |
| 투명한 추론 | 구조화된 출력과 함께하는 사고의 연쇄 |
| 환각 현상 방지 | “모른다”고 말할 수 있는 권한 부여 |
의도가 분명한 프롬프트도 예상치 못한 결과를 낼 수 있다. 자주 발생하는 문제와 해결 방법을 소개한다:
전문가 팁: 단순하게 시작하고 필요할 때만 복잡도를 추가한다. 각 변경 사항이 실제로 결과를 개선하는지 테스트한다.
시간을 절약하고 프롬프트 품질을 높이려면 다음 사항을 주의하자:
고급 프롬프트 엔지니어링을 구현할 때 어려운 점 중 하나는 추가적인 토큰 사용으로 인한 컨텍스트 오버헤드가 발생한다는 것이다. 예제, 다중 프롬프트, 상세한 지시사항 등은 모두 토큰을 소모하며, 컨텍스트 관리는 그 자체로 중요한 기술이다.
프롬프트 엔지니어링 기법은 적절한 경우에만 사용하고 그 효용을 정당화해야 한다. 효과적인 컨텍스트 관리에 대한 포괄적인 가이드는 컨텍스트 엔지니어링 블로그 포스트를 참고한다.
컨텍스트 인식 개선: Claude 4.x를 포함한 최신 AI 모델은 컨텍스트 인식 능력이 크게 향상되어, 과거 ‘중간 내용 인식 실패’ 문제를 해결했다. 이 문제는 모델이 긴 컨텍스트의 모든 부분을 동등하게 처리하지 못하는 현상이었다.
작업 분할의 지속적 중요성: 이러한 개선에도 불구하고 큰 작업을 작고 분리된 단위로 나누는 기법은 여전히 가치가 있다. 컨텍스트 제한 때문이 아니라, 모델이 특정 요구사항과 범위 내에서 최선의 작업에 집중할 수 있도록 돕기 때문이다. 명확한 경계가 있는 집중된 작업은 여러 목표를 한 번에 달성하려는 시도보다 일관적으로 더 높은 품질의 결과를 낸다.
전략: 긴 컨텍스트 작업 시 가장 중요한 세부사항을 처음이나 끝에 명확히 배치한다. 복잡한 작업은 집중된 하위 작업으로 분할했을 때 각 구성 요소의 품질과 신뢰성이 개선되는지 고려한다.
프롬프트 엔지니어링은 기술이므로 완벽하게 익히려면 여러 번 시도해야 한다. 제대로 하고 있는지 확인하는 유일한 방법은 직접 테스트해보는 것이다. 먼저 스스로 시도해보면, 여기서 소개한 기법을 적용한 경우와 그렇지 않은 경우의 차이를 바로 알 수 있다.
프롬프트 엔지니어링 기술을 제대로 연마하려면 프롬프트의 효과를 객관적으로 측정해야 한다. anthropic.skilljar.com에서 제공하는 프롬프트 엔지니어링 과정에서 이에 대해 자세히 다룬다.
간단한 평가 팁:
프롬프트 엔지니어링은 궁극적으로 의사소통에 관한 기술이다. AI가 여러분의 의도를 가장 명확하게 이해할 수 있는 언어로 소통하는 것이 핵심이다. 이 가이드 초반에 소개한 기본 기법부터 시작하라. 특정 문제를 해결할 때만 고급 기법을 추가해 나가라.
기억하라: 가장 좋은 프롬프트는 길거나 복잡한 것이 아니다. 목표를 안정적으로 달성하는 데 필요한 최소한의 구조를 가진 프롬프트가 최선이다. 연습을 거듭하다 보면 상황에 맞는 기법을 직관적으로 선택할 수 있을 것이다.
컨텍스트 엔지니어링으로의 전환이 프롬프트 엔지니어링의 중요성을 줄이는 것은 아니다. 사실 프롬프트 엔지니어링은 컨텍스트 엔지니어링의 기본 구성 요소다. 잘 만들어진 모든 프롬프트는 대화 기록, 첨부 파일, 시스템 지침과 함께 더 나은 결과를 만들어내기 위한 AI 행동을 형성하는 광범위한 컨텍스트의 일부가 된다.