Claude 프롬프트 작성법 (프롬프트 엔지니어링)
이번 아티클에서는 Anthropic에서 공개한 프롬프트 엔지니어링을 요약, 정리하여 알려드립니다.
Jul 12, 2024
클로드 3.5는 현존하는 생성형 AI 중 가장 성능이 좋은 모델인데요. 클로드를 개발한 기업인 Anthropic에서 클로드의 프롬프트 엔지니어링 방법을 공식 사이트에 공개했습니다. 이번 아티클에서는 Anthropic에서 공개한 방식을 요약, 정리하여 알려드립니다.
*API를 사용해야 하는 경우의 프롬프트 엔지니어링은 생략했습니다. 더 자세한 프롬프트 엔지니어링은 공식 사이트에서 확인할 수 있습니다.
1) 정확하고 직접적으로 작성하기
클로드와 대화할 때, 클로드를 매우 똑똑하지만 배경지식이 없는 새로운 직원으로 생각해야 합니다. 클로드는 우리의 규범이나 스타일, 선호하는 작업 방식에 대한 맥락이 없기 때문이죠. 원하는 것을 더 정확히 설명할 수록 클로드의 응답은 나아집니다.
맥락에는 어떤 것들이 있을까요? 결과가 어디에, 누구에게 사용되는지, 결과가 어떤 워크플로우에 속하는지 등이 있습니다. 또, 원하는 결과에 대해 구체적으로 설명해야 하며, 클로드가 수행할 사항을 순서로 표현해 주는 것도 좋습니다.
예시) 마케팅 이메일을 작성해야 할 때
부정확한 프롬프트 예시 | 개선된 프롬프트 예시 |
우리의 새로운 Cloud 서비스에 대한 마케팅 이메일을 작성해줘. | 지시 사항:
- 대상 고객: 온프레미스에서 클라우드로 업그레이드하는 중형 기술 회사 (100-500명 직원).
- 세 가지 주요 신규 기능 강조: 고급 데이터 암호화, 크로스 플랫폼 동기화, 실시간 협업.
톤: 전문적이면서도 친근하게. 보안, 효율성, 팀워크를 강조하세요.
- 명확한 CTA(행동 유도 문구) 포함: 우선 온보딩과 함께 30일 무료 체험.
- 제목: 50자 이하, "보안"과 "협업"을 언급하세요.
개인화: {{COMPANY_NAME}} 및 {{CONTACT_NAME}} 변수를 사용하세요.
구조:
- 제목
- 이메일 본문 (150-200 단어)
- CTA 버튼 텍스트 |
2) 예시 사용하기
잘 구성된 예시 3-5가지를 프롬프트에 포함하는 것은 클로드의 출력 정확성, 일관성 및 품질을 크게 향상할 수 있는 방법입니다. 이러한 기술은 few-shot 또는 multishot 프롬프트라고 일컫는데요. 형식을 준수해야 하는 작업에 효과적입니다.
예시는 실제 사용 사례와 유사한 것이 좋습니다. 또, 다양한 예시를 다룰 수록 좋은데요, 클로드가 의도치 않은 패턴을 학습할 수도 있는 상황을 방지하기 위함입니다. 예시는 <example> 태그로 감싸서 입력해야 합니다.
예시) 고객 피드백을 분석할 때
예시를 사용하지 않은 예시 | 예시를 사용한 예시 |
고객 피드백을 분석하고 문제를 분류해줘. 다음 카테고리를 사용해줘: I/UX, 성능, 기능 요청, 통합, 가격, 기타.
감정(긍정적/중립적/부정적)과 우선 순위(높음/중간/낮음)를 평가해줘.
피드백은 다음과 같아: {{FEEDBACK}} | 우리 고객 서비스 팀은 구조화되지 않은 피드백으로 인해 과부하 상태야. 해야 할 작업은 피드백을 분석하고 우리 제품 및 엔지니어링 팀을 위해 문제를 분류하는 거야.
다음 카테고리를 사용: UI/UX, 성능, 기능 요청, 통합, 가격, 기타. 또한 감정(긍정적/중립적/부정적)과 우선 순위(높음/중간/낮음)를 평가하세요. 예시는 다음과 같습니다:
<example>
입력: 새로운 대시보드가 엉망이에요! 로드하는 데 시간이 너무 오래 걸리고, 내보내기 버튼을 찾을 수 없어요. 이 문제를 빨리 해결해 주세요!
카테고리: UI/UX, 성능
감정: 부정적
우선 순위: 높음</example>
이제 이 피드백을 분석해줘: {{FEEDBACK}} |
3) 클로드가 생각하게 만들기
클로드가 사고하는 과정을 허용하면 클로드의 성능이 크게 향상될 수 있습니다. 이러한 과정을 CoT(Chain of thought)이라고 일컫습니다. CoT은 연구, 분석 혹은 문제 해결과 같은 복잡한 작업을 할 때 매우 좋은데요. 하지만 모든 작업이 심층적 사고를 요구하지는 않습니다. 간단한 문제에 CoT를 하게 되면 출력 시간이 늘어나는 문제가 발생할 수 있죠. 따라서, 복잡한 수학이나 분석 등 인간이 생각해야 하는 작업에 CoT를 사용해야 합니다.
CoT를 하기 위해서는 어떻게 프롬프트를 작성해야 할까요? 프롬프트에 “단계별로 생각해줘.”라는 내용을 작성합니다. 또는 <thinking>, <answer>같은 태그를 사용해 주는 것도 좋은 방법입니다.
예시 1) 기부를 요청하는 이메일 | 예시 2) 최적의 투자 옵션 결정 |
올해의 Care for Kids 프로그램에 기부를 요청하는 개인화된 이메일 초안을 작성해줘.
프로그램 정보:
<program>{{PROGRAM_DETAILS}}</program>
기부자 정보:
<donor>{{DONOR_DETAILS}}</donor>
이메일을 작성하기 전에 <thinking> 태그 안에 사고 과정을 작성해줘. 먼저, 기부자의 기부 역사와 과거에 지원한 캠페인을 고려하여 이 기부자에게 어떤 메시지가 호소력을 가질지 생각해봐. 그런 다음, 그들의 역사에 비추어 Care for Kids 프로그램의 어떤 측면이 그들에게 매력적일지 생각해봐. 마지막으로, 당신의 분석을 사용하여 <email> 태그 안에 개인화된 기부자 이메일을 작성해줘. | 고객이 $10,000를 투자하려고 해. 두 가지 옵션 중 하나를 선택할 수 있어:
A) 연평균 12%의 수익률을 보이지만 변동성이 큰 주식
B) 연 6%를 보장하는 채권.
고객은 5년 후에 집을 사기 위한 계약금을 마련하기 위해 투자를 하는 거야. 어떤 옵션을 추천할 거야? 단계별로 생각해줘. |
4) XML 태그 사용하기
맥락, 지시 사항, 예시 등 여러 구성요소가 포함된 경우, XML 태그를 사용하는 것을 추천드립니다. XML 태그를 사용하면 클로드가 프롬프트를 보다 정확하게 해석하도록 도와주어 더 높은 품질의 결과물을 제공받을 수 있습니다. 프롬프트의 부분을 명확하게 구분하여 클로드가 프롬프트를 오해하는 일을 줄일 수 있습니다. 프롬프트의 일정 부분을 수정하는 것도 수월합니다.
XML 태그는 어떻게 사용해야 할까요? 특정 XML 태그를 클로드가 특별히 학습한 적은 없지만, 태그 이름이 해당 내용을 잘 설명하도록 만드는 것이 좋습니다. 프롬프트 전체에서 동일한 태그 이름을 사용하고, 태그 안의 내용에 대해 언급할 때 해당 태그를 사용하는 것이 좋습니다. 예를 들어, ‘<contract> 태그에 있는 계약서를 사용해줘.’라고 요청할 수 있습니다. 또, 계층적 콘텐츠인 경우 <outer><inner></inner></outer>태그를 중첩하는 것도 가능합니다.
예시) 재무 보고서를 작성할 때
XML 태그를 사용하지 않은 예시 | XML 태그를 사용한 예시 |
너는 AcmeCorp의 금융 분석가야. 우리 투자자들을 위해 Q2 재무 보고서를 작성해줘. 수익 성장, 이익률, 현금 흐름에 대한 섹션을 포함하고 작년 예시를 참고해: {{Q1_REPORT}}. 이 스프레드시트의 데이터 포인트를 사용해: {{SPREADSHEET_DATA}}. 보고서는 매우 간결하고, 요점만을 포함하며, 전문적이고 목록 형식이어야 해. 강점과 개선 영역을 강조해줘. | 당신은 AcmeCorp의 금융 분석가야. 우리 투자자들을 위해 Q2 재무 보고서를 작성해줘.
AcmeCorp는 B2B SaaS 회사입니다. 우리의 투자자들은 투명성과 실행 가능한 통찰력을 중요하게 생각합니다.
보고서에 이 데이터를 사용하세요:<data>{{SPREADSHEET_DATA}}</data>
<instructions>
1. 수익 성장, 이익률, 현금 흐름 섹션을 포함하세요.
2. 강점과 개선 영역을 강조하세요.
</instructions>
톤은 간결하고 전문적으로 유지하세요. 이 구조를 따르세요:
<formatting_example>{{Q1_REPORT}}</formatting_example> |
5) 클로드에게 역할 부여하기
클로드를 사용할 때 시스템 파라미터를 사용하여 클로드에게 역할을 부여하면 성능이 향상될 수 있습니다. 이 기술을 역할 프롬프트(role prompting)라고 하는데요, 클로드를 일반적인 협력자에서 전문가로 변화시킬 수 있는 효과적인 방법입니다.
역할 프롬프트를 사용하는 이유는 3가지가 있는데요, 금융 모델링같은 복잡한 시나리오에서 클로드의 성능을 할 수 있습니다. 또, 카피라이터의 재치나 CFO의 간결함을 원할 때 클로드의 커뮤니케이션 스타일을 조정할 수 있습니다. 마지막으로 역할 맥락을 설정하면 클로드를 특정 요구 사항 내에서 유지할 수 있습니다.
예시) 법률 계약을 분석할 때
역할을 부여하지 않은 예시 | 역할을 부여한 예시 |
다음 소프트웨어 라이선스 계약의 잠재적 위험을 분석해줘:
<contract>
{{CONTRACT}}
</contract>
집중할 부분: 보상, 책임, 지적 재산권 소유권. | 너는 Fortune 500 기술 회사의 법무 책임자(General Counsel)야. 우리는 우리의 핵심 데이터 인프라를 위한 이 소프트웨어 라이선스 계약을 고려하고 있어:
<contract>
{{CONTRACT}}
</contract>
보상, 책임, 지적 재산권 소유권에 중점을 두고 잠재적 위험을 분석해줘. 너의 전문적인 의견을 제시해줘. |
6) 복잡한 프롬프트 연결하기
클로드의 프롬프트 체이닝(prompt chaining)은 복잡한 작업을 여러 개의 하위 작업으로 나누어 Claude가 각 하위 작업에 집중하도록 하는 기술인데요. 이를 통해 오류를 줄이고 더 명확한 지시사항과 출력을 얻을 수 있습니다.
체이닝 프롬프트의 단계는 다음과 같습니다. 작업을 명확하고 순차적인 단계로 나눕니다. XML 태그를 사용하여 프롬프트 간 출력을 전달할 수 있게 합니다. 각 하위 작업은 명확한 목표를 가지고 있어야 하죠. 그리고 이 과정을 반복하게 됩니다.
예시) 아키텍처 검토
프롬프트 1 | 프롬프트 2 |
역할: 최고 클라우드 아키텍트
내용:
현재 멀티테넌시 아키텍처의 잠재적 약점을 검토하여 데이터 격리, 자원 할당, 성능 확장성에 중점을 두고 분석해줘.
<architecture>
{{CURRENT_ARCHITECTURE}}
</architecture>
결과를 <analysis> 태그 안에 출력해. | 역할: 최고 클라우드 아키텍트
내용:
다음 분석을 기반으로 수정된 멀티테넌시 전략을 제안해줘.
<analysis>
{{ANALYSIS}}
</analysis>
전략을 <strategy> 태그 안에 제공해줘. |
프롬프트 1 결과 | 프롬프트 2 결과 |
<analysis>
1. 데이터 격리 (섹션 7):
- 문제: 고객 데이터가 충분히 격리되지 않음.
- 위험: 데이터 누출 가능성.
2. 자원 할당 (섹션 5):
- 문제: 자원 할당이 비효율적.
- 위험: 성능 저하.
3. 성능 확장성 (섹션 9):
- 문제: 확장성 문제.
- 위험: 증가하는 수요를 처리할 수 없음.
</analysis> | <strategy>
1. 데이터 격리:
- 제안: 고객 데이터를 완전히 격리하도록 데이터베이스 아키텍처 수정.
2. 자원 할당:
- 제안: 자원 할당 알고리즘 최적화.
3. 성능 확장성:
- 제안: 클라우드 인프라 확장성을 개선하는 전략 도입.
</strategy> |
7) 긴 텍스트 프롬프트
Claude는 많은 분량의 프롬프트를 처리할 수 있도록, 컨텍스트 창이 확장되었는데요. 확장된 컨텍스트 창은 복잡하고 데이터가 많은 작업을 처리할 수 있도록 합니다.
긴 컨텍스트를 효과적으로 사용하기 위해서는 두 가지 팁을 알아두면 좋은데요. 우선 긴 형식의 데이터를 프롬프트의 맨 위에 배치합니다. 또, 쿼리를 사용한다면 가장 끝에 배치하는 것이 좋습니다. 쿼리를 끝에 배치하는 것은 응답 성능을 최대 30%까지 향상시키죠.
🦾 프롬프트 엔지니어링으로 AI 활용력을 높이고 싶다면?
업무에 AI를 활용하는 것은 이제 선택이 아닌 필수가 되었죠. Claude와 같은 생성형 AI를 업무에 어떻게 활용할 수 있을까요? 실무에 딱맞는 프롬프트 엔지니어링 교육으로 업무 경쟁력을 높이고 싶다면, 팀스파르타 기업교육과 함께하세요. 임직원들의 AI 활용력을 높여 드립니다.
Share article
Subscribe to our newsletter