1. Automatically generate first draft prompt templates
Claude 의 Prompt Generator 를 이용하면 시작하기에 괜찮은 프롬프트를 얻을 수 있음:
- 이 Generator 가 등장한 이유는 Blank page problem (시작할 때 무엇을 해야하는지 막막함) 문제를 해결할 수 있음.
- 참고: https://console.anthropic.com/dashboard
2. Be clear, direct, and detailed
Prompt 를 작성할 때 고려해야할 것:
- Claude 를 새로운 직원이라고 생각하는 것. 그래서 아무것도 모르기 때문에 모든 맥락에 대해 명확히 설명해줘야함.
- 원하는 바를 더 정확하게 설명할수록 Claude의 응답이 더 좋아질 것
- 순차적 단계로 지시 제공:
- 번호가 매겨진 목록이나 글머리 기호를 사용하여 지시사항을 제시하는 것.
- 이는 Claude가 사용자가 원하는 정확한 방식으로 작업을 수행하도록 보장하는 데 도움이 될 것임.
Prompt 의 Golden rules:
- 프롬프트를 동료에게 보여주고 지시를 따르도록 해봐라
- 특히 해당 작업에 대해 맥락이 없는 동료에게
- 동료가 혼란스러워한다면 cladue 또한 잘 하지 못할 것.
Unclear Prompt 와 Clear Prompt 를 비교해보자. 다음 예시는 Anoymizing Customer feedback 임.
# Unclear Prompt
Please remove all personally identifiable information from these customer feedback messages: {{FEEDBACK_DATA}}
# Clear Prompt
Your task is to anonymize customer feedback for our quarterly review.
Instructions:
1. Replace all customer names with “CUSTOMER_[ID]” (e.g., “Jane Doe” → “CUSTOMER_001”).
2. Replace email addresses with “EMAIL_[ID]@example.com”.
3. Redact phone numbers as “PHONE_[ID]“.
4. If a message mentions a specific product (e.g., “AcmeCloud”), leave it intact.
5. If no PII is found, copy the message verbatim.
6. Output only the processed messages, separated by ”---“.
Data to process: {{FEEDBACK_DATA}}
3. Use examples (multishot prompting) to guide Claude's behavior
잘 만들어진 예시를 프롬프트에 포함시키면 Claude의 출력의 정확성, 일관성, 품질을 향상 시키는게 가능함.
Few-shot 또는 Multishot 프롬프팅:
- 이 기법은 구조화된 출력이나 특정 형식을 따라야 하는 작업에 특히 효과적임.
- 몇 가지 예시를 제공하여 AI가 패턴을 학습하고 비슷한 방식으로 응답하도록 유도하는 방법
적용 방법:
- 3-5개의 다양하고 관련성 있는 예시를 포함하여 Claude에게 정확히 원하는 바를 보여주는 것
- 예시가 많을수록 성능이 향상됨. 특히 복잡한 작업에서 더 큼.
효과적인 예시 기준:
- 관련성 (Relevant): 예시가 실제 사용 사례를 반영해야함.
- 다양성 (Diversity): 예시는 경계 사례(edge cases)와 잠재적 도전 과제를 포함해야 함. 그리고 예시는 충분히 다양해야 함.
- 명확성 (Clear): 구조화를 위해 예시를 <example> 태그로 감싸는 것. 여러 예시가 있는 경우, 이들을 <examples> 태그 안에 중첩하여 배치하는 것
Claude 와 함께 예시를 생성하는 방법도 있음:
- 예시를 주고 예시의 관련성과 다양성 그리고 명확성을 평가하도록 한 다음 예시를 생성하도록 하는 것
- 다양성을 주기 위해서는 다양성 요인에 대해 먼저 묻고 그것을 이용해서 예시를 생성해야한다.
No Example VERSUS With Examples: Analyzing customer feedback
# No examples
Analyze this customer feedback and categorize the issues. Use these categories: UI/UX, Performance, Feature Request, Integration, Pricing, and Other. Also rate the sentiment (Positive/Neutral/Negative) and priority (High/Medium/Low).
Here is the feedback: {{FEEDBACK}}
# No examples - claude response
Here’s the analysis of the customer feedback:
Issue: UI/UX
Sentiment: Negative
Priority: High
The customer is frustrated with the new dashboard design, which they find cluttered and slow to load. They specifically call out the missing “export” button, which is likely a critical feature. This issue needs to be addressed as a high priority.
Issue: Integration
Sentiment: Positive
Priority: Medium
The customer is pleased with the existing Salesforce integration but would like to see support for Hubspot as well. This is a feature request that could be considered for a future product update.
Issue: Pricing
Sentiment: Negative
Priority: High
The customer finds the pricing to be unreasonable, especially for the basic features. They are threatening to switch to a competitor, so this is a high-priority issue that needs to be reviewed.
Issue: Performance
Sentiment Negative
Priority: High
The customer is experiencing critical issues with the mobile app, where large file uploads consistently result in crashes. This is a significant problem that impacts the customer’s ability to use the product effectively and should be addressed as a high priority.
Issue: UI/UX
Sentiment: Positive
Priority: Low
The customer is overall satisfied with the product, specifically calling out the intuitive UI and excellent customer support. This is a positive piece of feedback that does not require any immediate action.
# With examples
Our CS team is overwhelmed with unstructured feedback. Your task is to analyze feedback and categorize issues for our product and engineering teams. Use these categories: UI/UX, Performance, Feature Request, Integration, Pricing, and Other. Also rate the sentiment (Positive/Neutral/Negative) and priority (High/Medium/Low). Here is an example:
<example>
Input: The new dashboard is a mess! It takes forever to load, and I can’t find the export button. Fix this ASAP!
Category: UI/UX, Performance
Sentiment: Negative
Priority: High
</example>
Now, analyze this feedback: {{FEEDBACK}}
# With examples - claudes response
Here’s the analysis of the customer feedback:
1. The new dashboard is a mess! It takes forever to load, and I can’t find the export button. Fix this ASAP!
Category: UI/UX, Performance
Sentiment: Negative
Priority: High
2. Love the Salesforce integration! But it’d be great if you could add Hubspot too.
Category: Integration, Feature Request
Sentiment: Positive
Priority: Medium
3. Your pricing is ridiculous! $99/mo for basic features? I’m switching to Competitor X.
Category: Pricing
Sentiment: Negative
Priority: High
4. The mobile app keeps crashing when I try to upload large files (>50MB). This is critical for our field agents.
Category: Performance
Sentiment: Negative
Priority: High
5. Overall, I’m happy with the product. The UI is intuitive, and the customer support is top-notch. Keep it up!
Category: UI/UX, Other (Customer Support)
Sentiment: Positive
Priority: Low
4. Let Claude think (chain of thought prompting) to increase performance
CoT 프롬프팅을 사용하는 것을 말함:
- CoT 프롬프팅은 AI가 복잡한 문제를 해결할 때 중간 단계를 명시적으로 표현하도록 하는 기법
- 이건 Claude에게 "생각할 공간"을 주는 것임
- 그래서 Claude가 문제를 단계별로 분석하도록 장려하는 것
- 이렇게하면 더 정확하고 섬세한 결과물을 얻을 수 있음.
AI 모델에게 "생각할 공간"을 주는 것의 이점:
- 정확성(Accuracy) 향상:
- AI가 각 단계를 명시적으로 처리함으로써 중간 과정에서 발생할 수 있는 오류를 줄일 수 있음.
- 일관성(Coherence) 개선:
- 구조화된 사고는 더 응집력 있고 잘 정리된 응답해줌
- 디버깅(Debugging) 용이성:
- Claude의 사고 과정을 볼 수 있으면 프롬프트가 불명확한 부분을 정확히 파악하는 데 도움을 줌.
- 이를 통해 프롬프트를 개선할 수 있다.
AI 모델에게 "생각할 공간"을 주는 것의 잠재적인 단점:
- 지연 시간(latency) 증가:
- 출력 길이가 증가하면 응답 시간이 길어질 수 있음.
- 모든 작업에 심층적 사고가 필요하지 않음:
4.1 How to prompt for thining:
CoT 프롬프트를 쓸 때 생각할 공간을 명시해주는게 중요하다.
생각할 공간을 주고 생각 과정을 표시하도록 해야지 이게 정답 답변으로 가는데 쓰일거임. 생각할 공간을 주지 않으면 생각 과정이 일어나지 않는거임.
Basic prompt: Include “Think step-by-step” in your prompt.
- 이거는 생각 과정을 명시하지 않고, Let's think step-by-step 이라는 말만 프롬프트에 넣은 걸 말함.
Draft personalized emails to donors asking for contributions to this year’s Care for Kids program.
Program information:
<program>{{PROGRAM_DETAILS}}
</program>
Donor information:
<donor>{{DONOR_DETAILS}}
</donor>
Think step-by-step before you write the email.
Guided prompt: Outline specific steps for Claude to follow in its thinking process.
- 다음 프롬프트는 생각 과정을 명시했지만, 구조화를 하지는 않아서 생각과 정답이 분리되지는 않았음.
Draft personalized emails to donors asking for contributions to this year’s Care for Kids program.
Program information:
<program>{{PROGRAM_DETAILS}}
</program>
Donor information:
<donor>{{DONOR_DETAILS}}
</donor>
Think before you write the email. First, think through what messaging might appeal to this donor given their donation history and which campaigns they’ve supported in the past. Then, think through what aspects of the Care for Kids program would appeal to them, given their history. Finally, write the personalized donor email using your analysis.
Structured prompt: Use XML tags like <thinking> and <answer> to separate reasoning from the final answer.
- 생각의 공간을 명시적으로 적어넣은 것.
Draft personalized emails to donors asking for contributions to this year’s Care for Kids program.
Program information:
<program>{{PROGRAM_DETAILS}}
</program>
Donor information:
<donor>{{DONOR_DETAILS}}
</donor>
Think before you write the email in <thinking> tags. First, think through what messaging might appeal to this donor given their donation history and which campaigns they’ve supported in the past. Then, think through what aspects of the Care for Kids program would appeal to them, given their history. Finally, write the personalized donor email in <email> tags, using your analysis.
5. Use XML tags to structure your prompts
프롬프트에서 XML 태그를 활용하는 것:
- Claude가 프롬프트의 구성 요소인 지시사항, 예시, 맥락 등을 혼동하지 않도록 방지하는 것.
- 이는 Claude가 프롬프트를 더 정확하게 해석하도록 돕고, 결과적으로 더 높은 품질의 출력으로 이어지게 만듬.
- 게임 체인저(game-changer)"라고 표현될 만큼 중요한 역할을 한다.
- 프롬프트의 다른 부분들을 명확하게 구분할 수 있게 해준다.
구체적인 XML 태그 사용 팁:
- <instructions> : 지시사항을 위한 태그
- <example> : 예시를 위한 태그
- <formatting> : 형식 지정을 위한 태그
- 이러한 태그들을 사용하여 프롬프트의 다양한 부분을 명확히 구분할 수 있다.
XML 태그를 사용하는 이유와 그 이점:
- 명확성(Clarity):
- 프롬프트의 다른 부분들을 명확하게 구분할 수 있음.
- 정확성(Accuracy):
- Claude가 프롬프트의 일부를 잘못 해석하여 발생하는 오류를 줄일 수 있음.
- 유연성(Flexibility):
- 프롬프트의 특정 부분을 쉽게 찾고, 추가하고, 제거하거나 수정할 수 있음.
- 파싱 가능성(Parseability):
- Claude의 출력에 XML 태그를 사용하면, 후처리를 통해 응답의 특정 부분을 쉽게 추출할 수 있음.
- 태그 선택에 대한 조언:
- 태그 이름과 그것이 감싸는 정보는 연관성이 있어야함.
XML 태그를 효과적으로 사용하기 위한 방법:
- 일관성 유지(Be consistent):
- 프롬프트 전체에 걸쳐 동일한 태그 이름을 사용해야 함.
- 내용에 대해 언급할 때 해당 태그 이름을 참조해야 함.
- 예를 들면 Using the contract in <contract> tags 이렇게 사용해야함.
- 태그 중첩(Nest tags):
- 계층적 내용을 위해 태그를 중첩해야 함.
- 형식: <outer> <inner> </inner> </outer>
- XML 태그를 다른 기술과 결합하여 사용할 수 있음.
- CoT 와 결합하는 건 <thinking> 과 <answer> 태그를 사용하는 것.
XML Tag 를 이용하는 프롬프트 예시:
You’re a financial analyst at AcmeCorp. Generate a Q2 financial report for our investors.
AcmeCorp is a B2B SaaS company. Our investors value transparency and actionable insights.
Use this data for your report:<data>{{SPREADSHEET_DATA}}</data>
<instructions>
1. Include sections: Revenue Growth, Profit Margins, Cash Flow.
2. Highlight strengths and areas for improvement.
</instructions>
Make your tone concise and professional. Follow this structure:
<formatting_example>{{Q1_REPORT}}</formatting_example>
6. Giving Claude a role with a system prompt
역할 프롬프팅(role prompting)' 기법:
- Claude와 같은 AI 모델과 함께 시스템 프롬프트를 사용하는 가장 강력한 방법으로 소개됨.
- Role Prompting 을 위해 시스템 파라미터를 사용할 수 있음.
- 적절한 역할 부여를 통해 Claude를 일반적인 보조자에서 특정 분야의 가상 전문가로 전환하는 것
시스템 프톰프트 사용 팁:
- 시스템 파라미터는 오직 Claude의 역할을 설정하는 데에만 사용해야 함
- 적업별 구체적인 지시사항은 시스템 파라미터가 아닌 사용자 턴에 포함시켜야한다.
Why use role prompting?
- 정확성 향상 (Enhanced accuracy):
- 복잡한 시나리오에서 Claude의 성능을 크게 향상시킬 수 있음.
- 맞춤형 톤 (Tailored tone):
- Claude의 커뮤니케이션 스타일을 조정할 수 있음
- 집중도 향상 (Improved focus):
- 역할 맥락을 설정함으로써 Claude가 주어진 작업의 특정 요구사항 내에서 더 잘 집중할 수 있음.
How to give Claude a role:
- Role 을 줄 땐 다양하게 실험을 해보는게 권장됨
- 간단하게 data scientist 로의 역할을 주는 것과, marketing strategist 로 역할을 주는 것은 각각 데이터에 대해 다른 관점을 가질거임
- 그리고 data scientist 라고 하더라도, 역할을 보다 구체적으로 주면 이것도 작업의 결과가 다를 거임 (e.g data scientist specializing in customer insight analysis for Fortune 500 companies)
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=2048,
system="You are a seasoned data scientist at a Fortune 500 company.", # <-- role prompt
messages=[
{"role": "user", "content": "Analyze this dataset for anomalies: <dataset>{{DATASET}}</dataset>"}
]
)
print(response.content)
Role Prompting Example:
You are the CFO of a high-growth B2B SaaS company. We’re in a board meeting discussing our Q2 financials:
<data>
{{FINANCIALS}}
</data>
Analyze key trends, flag concerns, and recommend strategic actions. Our investors want aggressive growth but are wary of our burn rate.
7. Prefill Claude's response for greater output control
어시스턴트 메시지 사전 채우기(prefilling the Assistant message) 기법:
- Claude를 사용할 때, 어시스턴트 메시지를 사전에 채울 수 있는 기능임
- Claude의 행동을 직접 지시할 수 있고
- 불필요한 서문(preambles)을 건너뛸 수 있고
- JSON이나 XML과 같은 특정 형식을 강제할 수 있고
- 역할극 시나리오에서 캐릭터의 일관성을 유지하는 데 도움을 줄 수 있음
- Claude가 예상대로 작동하지 않을 때, 몇 문장의 사전 채우기만으로도 성능을 향상 시킬 수 있음
How to prefill Claude’s response:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=1024,
messages=[
{"role": "user", "content": "What is your favorite color?"},
{"role": "assistant", "content": "As an AI assistant, I don't have a favorite color, But if I had to pick, it would be green because"} # Prefill here
]
)
Example 1: Controlling output formatting and skipping the preamble
- prefiling 으로
{
를 채워넣으면 Claude 는 서론 없이 바로 JSON 객체를 뱉어내게 될거임.
# prompt
Extract the name, size, price, and color from this product description as a JSON object:
<description>
The SmartHome Mini is a compact smart home assistant available in black or white for only $49.99. At just 5 inches wide, it lets you control lights, thermostats, and other connected devices via voice or app—no matter where you place it in your home. This affordable little hub brings convenient hands-free control to your smart devices.
</description>
# prefling
Assistant (prefill): {
# Claude response
“name”: “SmartHome Mini”,
“size”: “5 inches wide”,
“price”: “$49.99”,
“colors”: [
“black”,
“white”
]
}
Example 2: Maintaining character in roleplay scenarios
- 역할 이름 사전 채우기:
- AI의 응답을 사전에 채울 때 대괄호로 묶인 역할 이름 [ROLE_NAME]을 사용.
- 이 방법은 Claude가 캐릭터의 특성을 유지하도록 상기시키는 역할을 함.
- 긴 대화나 복잡한 대화에서도 AI가 일관된 캐릭터성을 유지하는 데 도움을 줌
8. Chain complex prompts for stronger performance
단일 프롬프트의 한계:
- 복잡한 작업을 하나의 프롬프트로 처리하려 할 때 Claude가 실수를 할 수 있음.
- 그러니까 AI가 중요한 부분을 놓치거나 제대로 수행하지 못할 수 있음을 의미한다.
사고 연쇄(Chain of Thought, CoT) 프롬프팅의 한계:
- CoT 프롬프팅이 유용하지만, 여러 단계의 심층적 사고가 필요한 작업에는 충분하지 않을 수 있음.
프롬프트 체이닝(Prompt chaining) 소개:
- 복잡한 작업을 더 작고 관리하기 쉬운 하위 작업으로 분해하는 기법
- 각 단계가 심층적인 사고를 요구하는 여러 단계로 구성된 작업을 처리해 나가는 것
Why chain prompts?
- 정확성 (Accuracy):
- 각 하위 작업(subtask)에 Claude의 완전한 주의를 기울일 수 있음.
- 이로 인해 오류가 줄어듬.
- 명확성 (Clarity):
- 더 단순한 하위 작업은 더 명확한 지시와 출력을 의미한다.
- 복잡한 작업을 작은 단위로 나누면 각 단계의 목표와 요구사항이 더 명확해짐.
- 추적 가능성 (Traceability):
- 프롬프트 체인에서 문제를 쉽게 찾아내고 수정할 수 있음.
- 각 단계가 분리되어 있어 어느 부분에서 오류가 발생했는지 정확히 파악할 수 있다.
When to chain prompts
- 다단계 작업에 적합함. 예를 들어: a) 연구 종합 b) 문서 분석 c) 반복적 콘텐츠 생성
- 여러 변환 과정이 필요한 경우
- 다수의 지시사항이 포함된 경우
- Claude가 단계를 누락하거나 잘못 처리하는 것을 방지함
- 디버깅 팁: Claude가 단계를 놓치거나 성능이 좋지 않을 경우, 해당 단계를 별도의 프롬프트로 분리하면 됨.
How to chain prompts:
- 하위 작업 식별(Identify subtasks):
- 전체 작업을 구별되고 순차적인 단계로 나눔
- XML을 사용한 명확한 인계(Structure with XML for clear handoffs):
- XML 태그를 사용하여 프롬프트 간에 출력을 전달함.
- 단일 작업 목표 설정(Have a single-task goal):
- 각 하위 작업은 단일하고 명확한 목표를 가져야 함.
- 반복(Iterate):
- 하위 작업을 반복적으로 개선해야함.
Example chained workflows:
- Multi-step analysis: See the legal and business examples below.
- Content creation pipelines: Research → Outline → Draft → Edit → Format.
- Data processing: Extract → Transform → Analyze → Visualize.
- Decision-making: Gather info → List options → Analyze each → Recommend.
- Verification loops: Generate content → Review → Refine → Re-review.
Advanced: Self-correction chains:
- Claude 의 output 을 보고 스스로 평가하고 개선하도록 하면 훨씬 응답 퀄리티가 높아짐
Example: Multitenancy strategy review:
9. Long context prompting tips
Claude 3 모델의 확장된 컨텍스트 윈도우(extended context window):
- Claude 3 모델은 200K 토큰의 컨텍스트 윈도우를 가지고 있음
- 이는 매우 큰 규모의 컨텍스트를 한 번에 처리할 수 있음을 의미한다.
- 이러한 대용량 컨텍스트 처리 능력은 복잡하고 데이터가 풍부한 작업을 수행할 수 있게 해줌
Essential tips for long context prompts:
- 장문 데이터를 상단에 배치 (Put longform data at the top):
- 긴 문서나 입력 데이터(약 20K+ 토큰)를 프롬프트의 상단에 위치시켜야함.
- 이 데이터는 쿼리, 지시사항, 예시보다 위에 배치해야 한다.
- 이 방법은 모든 Claude 모델에서 성능을 크게 향상시킬 수 있음.
- 쿼리를 마지막에 배치:
- 쿼리(질문이나 요청)를 프롬프트의 끝 부분에 위치시키는 것이 좋음.
- 이 방법은 응답 품질을 최대 30%까지 향상시킬 수 있다고 테스트에서 나타남.
- Structure document content and metadata with XML tags:
- 여러 문서를 사용할 때 XML 태그를 이용해 문서 내용과 메타데이터를 구조화 하는 것
- 각 문서를 <document> 태그로 감싸는 것을 권장.
- <document_content> 태그를 사용하여 실제 문서 내용을 구분하는 것도 권장
- <source> 태그를 사용하여 문서의 출처 정보를 명시하는 것도 좋음
- 이와 같이 기타 메타데이터도 별도의 태그로 포함할 수 있음.
- 이러한 구조화는 명확성(clarity)을 위한 것
- Ground responses in quotes:
- Claude에게 작업을 수행하기 전에 먼저 문서의 관련 부분을 인용하도록 요청하는 것
- 이 방법은 Claude가 문서 내용의 "노이즈"를 걸러내는 데 도움을 줌.
- 프로세스:
- 1.먼저 관련 부분 인용
-
- 그 다음 요청된 작업 수행
예시: Structure document content and metadata with XML tags
<documents>
<document index="1">
<source>annual_report_2023.pdf</source>
<document_content>
{{ANNUAL_REPORT}}
</document_content>
</document>
<document index="2">
<source>competitor_analysis_q2.xlsx</source>
<document_content>
{{COMPETITOR_ANALYSIS}}
</document_content>
</document>
</documents>
예시: Ground responses in quotes
You are an AI physician's assistant. Your task is to help doctors diagnose possible patient illnesses.
<documents>
<document index="1">
<source>patient_symptoms.txt</source>
<document_content>
{{PATIENT_SYMPTOMS}}
</document_content>
</document>
<document index="2">
<source>patient_records.txt</source>
<document_content>
{{PATIENT_RECORDS}}
</document_content>
</document>
<document index="3">
<source>patient01_appt_history.txt</source>
<document_content>
{{PATIENT01_APPOINTMENT_HISTORY}}
</document_content>
</document>
</documents>
Find quotes from the patient records and appointment history that are relevant to diagnosing the patient's reported symptoms. Place these in <quotes> tags. Then, based on these quotes, list all information that would help the doctor diagnose the patient's symptoms. Place your diagnostic information in <info> tags.
'Generative AI > Prompt Engineering' 카테고리의 다른 글
Strategic Chain-of-Thought: Guiding Accurate Reasoning in LLMs throughStrategy Elicitation (0) | 2024.09.23 |
---|---|
ANTHROPIC - Prompt engineering Detailed (0) | 2024.09.23 |
(2) Building with Claude - Create strong empirical evaluations (0) | 2024.09.07 |
(1) Building with Claude - Define your success criteria (0) | 2024.09.06 |
Limitations of LLM-as-a-Judge (0) | 2024.09.06 |