Bedrock Model - Anthropic Claude
Prompt Engineering 기법
1. 단순하고 명확하게
원하는 바를 더 정확하게 설명할수록 Claude의 답변이 더 좋아질 것입니다.
-
맥락(배경) 정보를 제공하세요 : 맥락(배경) 정보를 더 많이 알면 Claude가 요청사항을 더 잘 이해할 수 있습니다.
- 작업 결과가 어떤 용도로 사용될 것인지
- 출력물이 어떤 대상에게 전달되는지
- 작업의 최종 목표 또는 성공적인 작업 완료의 모습
- 작업이 어떤 워크플로우의 일부이며 이 작업이 해당 워크플로우에서 어디에 속하는지
예시 :
user:
다음 <text></text> XML 태그 안의 텍스트를 읽고 질문에 답해주세요:
<text>
2020년 11월 12일, 위켄드가 쇼의 헤드라이너로 선정되었다는 발표가 있었습니다. 이는 캐나다 솔로 아티스트가 처음으로 슈퍼볼 하프타임 쇼의 헤드라이너가 된 사례였습니다. 쇼 준비에 대해 질문받았을 때, 위켄드는 "우리는 집에서 시청하는 팬들에게 초점을 맞추고 공연을 영화적인 경험으로 만드는 데 집중해왔으며, 슈퍼볼에서도 그렇게 하고 싶습니다"라고 말했습니다. 공연에는 흰색 의상을 입고 빨간 눈이 빛나는 마스크를 쓴 성가대원들이 네온 도시 풍경을 배경으로 서 있었습니다. 공연은 성가대와 같은 복장을 한 흰색 인물이 "Call Out My Name"을 부르는 성가대가 서 있는 배경으로 내려오면서 시작되었습니다. 이때 위켄드는 라스베이거스 스트립을 연상시키는 스카이라인을 배경으로 컨버터블 차량에 앉아 있었습니다. 공연의 다음 부분에서는 배경이 열리면서 위켄드가 등장해 "Starboy"를 부르고 이어서 "The Hills"를 공연했습니다. 다음으로 "Can't Feel My Face"를 부르면서 위켄드는 무대 뒤에 설치된 미로를 통과했고, 그의 네 번째 스튜디오 앨범 After Hours (2020)의 미학에 맞춰 그와 비슷한 빨간 블레이저와 검은 넥타이를 입고 얼굴에 붕대를 감은 댄서들이 함께했습니다. 댄서들은 공연 내내 이 붕대를 착용했습니다. 미로 구간에서는 카메라워크가 시각적으로 불안정했습니다. 이어서 "I Feel It Coming", "Save Your Tears", "Earned It"이 공연되었습니다. "Earned It" 공연에서는 바이올리니스트들이 위켄드와 함께했습니다. 쇼의 피날레로 위켄드는 댄서들과 함께 경기장으로 나와 "Blinding Lights"를 공연했습니다. 그와 댄서들은 "House of Balloons / Glass Table Girls"를 부르며 경기장에 입장했습니다. 공연은 불꽃놀이와 함께 끝났습니다.
</text>
위 텍스트를 바탕으로, 위켄드가 슈퍼볼 하프타임 쇼에서 어떤 노래들을 공연했는지 알려주세요.
assistant: -
작업을 구체적으로 지정하세요 : 간단하고 명확하며 완전한 선택지 또는 카테고리를 제공합니다. 또한 Claude가 코드만 출력하고 다른 것은 출력하지 않기를 원한다면 그렇게 말해야 합니다.
예시 :
주어진 상품 설명을 아래 카테고리로 분류해주세요.
카테고리 라벨을 <output></output> 태그 안에 작성해주세요.
상품 설명은 다음과 같습니다.
<text>
안전하며, 부드러운 모서리와 어린이 친화적인 소재로 제작되었습니다. 15가지 다른 모양의 총 112개 조각으로 구성되어 있으며, 이를 통해 56가지의 미리 정의된 구조물을 만들 수 있습니다. 창의력 향상을 돕고, 서로 다른 구조물을 연결하여 새로운 구조물을 만들 수 있어 창의적 사고를 촉진합니다. 부모와 자녀가 함께 놀면서 사회성 발달을 도모하여 부모-자녀 간 유대감을 강화할 수 있습니다.
</text>
카테고리:
(1) 장난감
(2) 뷰티 및 건강
(3) 전자제품 -
순차적인 단계로 지침을 제공하세요 : 번호가 매겨진 목록이나 글머리 기호를 사용하면 Claude가 원하는 방식으로 작업을 정확하게 수행할 수 있습니다.
예시 :
분기별 검토를 위해 고객 피드백을 익명화하는 것이 당신의 작업입니다.
지시사항:
1. 모든 고객 이름을 “CUSTOMER_[ID]“로 대체하세요(예: “Jane Doe” → “CUSTOMER_001”).
2. 이메일 주소를 “EMAIL_[ID]@example.com”으로 대체하세요.
3. 전화번호를 “PHONE_[ID]“로 수정하세요.
4. 특정 제품이 언급된 경우(예: “AcmeCloud”), 그대로 두세요.
5. PII가 발견되지 않으면 메시지를 그대로 복사하세요.
6. 처리된 메시지만 출력하고 ”---“로 구분하세요.
처리할 데이터: {{FEEDBACK_DATA}}
2. 예시를 제공하라 (Few Shot, Multi Shot)
예제는 Claude가 필요한 것을 정확하게 생성하도록 합니다. 프롬프트에 잘 만들어진 몇 가지 예제를 포함함으로써 출력의 정확성, 일관성 및 품질을 크게 향상시킬 수 있습니다. 이는 구조화된 출력이 필요하거나 특정 형식을 준수해야 하는 작업에 특히 효과적입니다.
-
Claude가 의도하지 않은 패턴을 실수로 포착하지 않도록 충분히 다양한 예시를 제공하도록 합시다.
-
예제를 제공할 때
<example>태그(여러 개일 경우<examples>태그 안에 중첩) 등을 사용해 구조화하면 Claude가 더 효과적으로 작업할 수 있습니다.예시 :
user:
주어진 이메일이 '개인적' 이메일인지, '상업적' 이메일인지 분류해주세요.
다음은 예시들입니다.
<example>
user: 안녕하세요 현수님, 지난번 만난 이후로 오랜만이네요. 이번 주말에 저희 집에서 파티를 열 계획인데요. 오실 수 있나요?
assistant: 개인적
</example>
<example>
user: 안녕하세요 현수님, 특별한 혜택을 준비했습니다. 2일 이내 예약 시 35%까지 할인받으실 수 있는 한정 특가 이벤트를 진행 중입니다. 지금 바로 예약하시고 할인 혜택을 누리세요!
assistantA: 상업적
</example>
user: 안녕하세요 현수님, 저희가 완전히 새로운 제품군을 출시했다는 소식 들으셨나요? 지금 주문하시면 신제품을 10만원 할인된 가격으로 구매하실 수 있습니다. 자세한 내용은 웹 사이트를 확인해주세요.
assistant:
3. Chain of Thought (CoT)
연구, 분석 또는 문제 해결과 같은 복잡한 작업에 직면했을 때 Claude가 문제를 단계별로 세분화하도록 유도하여 보다 정확한 결과물을 도출할 수 있도록 합니다. 문제를 단계적으로 해결하면 특히 수학, 논리, 분석 작업에서 오류가 줄어듭니다. 아래의 일련의 사고 기법은 가장 덜 복잡한 것부터 가장 복잡한 것까지 순서대로 나열되어 있습니다. 덜 복잡한 방법은 컨텍스트 창에서 공간을 덜 차지하지만 일반적으로 덜 효과적입니다.
-
기본 프롬프트 (가장 단순) : 프롬프트에 "Think step-by-step"("단계별로 차근차근 생각해보세요") 문장을 포함합니다. (또는 "Please provide the answer and show the reasoning."("답변과 함께 그 근거를 제시하세요.") 문장을 포함합니다.)
예시 :
올해의 아동 돌봄 프로그램을 위한 후원금 요청 이메일을 후원자 개개인에 맞춰 작성해주세요.
프로그램 정보:
<program>{{프로그램_세부사항}}</program>
후원자 정보:
<donor>{{후원자_세부사항}}</donor>
이메일을 작성하기 전에 차근차근 생각해보세요. -
안내 프롬프트 : Claude가 사고 과정에서 따라야 할 구체적인 단계를 설명합니다.
예시 :
올해의 아동 돌봄 프로그램을 위한 후원금 요청 이메일을 후원자 개개인에 맞춰 작성해주세요.
프로그램 정보:
<program>{{프로그램_세부사항}}</program>
후원자 정보:
<donor>{{후원자_세부사항}}</donor>
이메일을 작성하기 전에 다음 사항들을 고려해주세요.
먼저, 후원자의 기부 이력과 과거 지원했던 캠페인을 바탕으로 어떤 메시지가 이 후원자에게 효과적일지 생각해보세요.
그 다음, 후원자의 이력을 고려했을 때 아동 돌봄 프로그램의 어떤 측면이 그들의 관심을 끌 수 있을지 검토해보세요.
마지막으로, 이러한 분석을 바탕으로 개인화된 후원 요청 이메일을 작성해주세요. -
구조화된 프롬프트 :
<thinking>,<answer>같은 XML 태그를 사용하여 추론과 최종 답변을 분리합니다.예시 :
올해의 아동 돌봄 프로그램을 위한 후원금 요청 이메일을 후원자 개개인에 맞춰 작성해주세요.
프로그램 정보:
<program>{{프로그램_세부사항}}</program>
후원자 정보:
<donor>{{후원자_세부사항}}</donor>
이메일을 작성하기 전에 <thinking> 태그 안에서 생각하세요.
먼저, 이 기부자의 기부 이력과 과거에 지원한 캠페인을 고려하여 어떤 메시지가 호소력이 있을지 생각해보세요.
그런 다음, 그들의 이력을 고려할 때 아동 돌봄 프로그램의 어떤 측면이 그들에게 호소력이 있을지 생각해보세요.
마지막으로, 분석을 바탕으로 <email> 태그 안에 개인화된 기부자 이메일을 작성하세요.
4. XML 태그를 사용하라
프롬프트에 맥락, 지침 및 예제와 같은 여러 구성 요소가 포함된 경우 XML 태그가 판도를 바꿀 수 있습니다. XML 태그는 Claude가 프롬프트를 더 정확하게 분석하여 고품질의 결과물을 얻을 수 있도록 도와줍니다. <instructions>, <example>, <formatting> 같은 태그를 사용하여 프롬프트의 여러 부분을 명확하게 구분하세요. 이렇게 하면 Claude가 지침과 예제 또는 문맥을 혼동하는 것을 방지할 수 있습니다.
-
프롬프트 전체에서 동일한 목적으로 태그를 사용할 때는 동일한 태그 이름을 적용하여 일관성을 유지합니다.
-
계층을 이루는 내용의 경우
<outer><inner></inner></outer>와 같은 형태로 태그를 중첩해야 합니다.예시 :
이 소프트웨어 라이선스 계약서의 법적 위험과 책임을 분석하세요.
우리는 핵심 데이터 인프라를 위해 이 계약을 고려하고 있는 다국적 기업입니다.
<agreement>{{CONTRACT}}</agreement>
참고용 표준 계약서입니다:
<standard_contract>{{STANDARD_CONTRACT}}</standard_contract>
<instructions>
1. 다음 조항들을 분석하세요:
- 면책
- 책임 제한
- IP 소유권
2. 특이하거나 우려되는 조건들을 기록하세요.
3. 우리의 표준 계약서와 비교하세요.
4. 발견사항을 <findings> 태그 안에 요약하세요.
5. 실행 가능한 권장사항을 <recommendations> 태그 안에 나열하세요.
</instructions>
5. 역할을 부여하라
Claude를 사용할 때 system 매개변수를 사용하여 역할을 부여함으로써 성능을 크게 향상시킬 수 있습니다. Role Prompt라고 하는 이 기술은 Claude에서 system 프롬프트를 사용하는 가장 강력한 방법입니다. 적절한 역할을 부여하면 말투(커뮤니케이션 스타일), 집중하는 영역, 정확도 등의 측면에서 Claude를 일반 비서에서 전문가로 변신시킬 수 있습니다.
# callback.py
...
body = json.dumps({
'anthropic_version': 'bedrock-2023-05-31',
'system': "당신은 Fortune 500대 기업의 노련한 데이터 과학자입니다.", # <-- Role Prompt
'messages': [ { 'role': 'user', 'content': text } ],
'max_tokens': 2048,
'temperature': 0.5
}),
...
6. 답변을 미리 채워라
Claude를 사용할 때, assistant: ~~ 메시지를 채워 Claude의 행동을 지시하고, 불필요한 초기 텍스트 생성을 건너뛰며, JSON이나 XML과 같은 특정 형식을 강제하고, 심지어 역할극 시나리오에서 Claude가 캐릭터의 일관성을 유지하도록 조정할 수 있습니다. 몇 문장을 미리 채우는 것만으로도 Claude의 성능을 크게 향상시킬 수 있습니다.
예시 :
user:
당신이 가장 좋아하는 색은 무엇인가요?
assistant:
AI 도우미로서 저는 가장 좋아하는 색이 없지만,
만약 반드시 하나를 선택해야 한다면 녹색을 선택할 것입니다. 왜냐하면