Claude Prompt Engineering Best Practices
Claude Prompt Engineering Best Practices
Prompt engineering is the art of crafting inputs that get the best possible outputs from Claude. Whether you are building a production API integration or using Claude Code for development, well-structured prompts directly impact response quality, consistency, and cost efficiency. This guide covers proven techniques for getting the most out of Claude.
The Foundation: Clear Instructions
Claude performs best with explicit, structured instructions. Vague prompts produce vague results. Compare these approaches:
# Weak prompt
"Tell me about databases"
# Strong prompt
"Compare PostgreSQL and MongoDB for a high-traffic e-commerce application.
Cover: query performance, scalability, data consistency, and operational complexity.
Format your response as a comparison table followed by a recommendation."
The strong prompt specifies the topic, scope, evaluation criteria, and desired output format. This level of specificity consistently produces better results.
System Prompts
System prompts set Claude's persona, constraints, and behavioral guidelines for the entire conversation. They are the most important tool for production applications:
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
system="You are a senior code reviewer. Analyze code for bugs, security issues, and performance problems. Be concise and specific. Rate severity as Critical, High, Medium, or Low. Always suggest a fix for each issue found.",
messages=[
{"role": "user", "content": "Review this function:\n\ndef login(username, password):\n query = f'SELECT * FROM users WHERE username=\"{username}\" AND password=\"{password}\"'\n return db.execute(query)"}
]
)
system parameter, not in the first user message. System prompts receive special treatment in Claude's attention mechanism and produce more consistent results. When using prompt caching, cached system prompts also save significant token costs on repeated requests.
Structured Output Techniques
When you need structured responses, tell Claude the exact format you expect:
# Request JSON output
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="Always respond with valid JSON. No markdown, no explanation outside the JSON.",
messages=[{
"role": "user",
"content": "Extract entities from this text: 'Apple CEO Tim Cook announced new products at the San Francisco event on March 15.'\n\nReturn JSON with keys: organizations, people, locations, dates"
}]
)
Chain of Thought Prompting
For complex reasoning tasks, ask Claude to think step-by-step. This dramatically improves accuracy on math, logic, and multi-step analysis:
"Analyze this algorithm's time complexity.
Think through it step by step:
1. Identify the loops and their bounds
2. Determine the relationship between loop variables
3. Calculate the total operation count
4. Express in Big-O notation
Show your reasoning for each step."
Extended Thinking
For the most complex tasks, use Claude's extended thinking feature to get transparent reasoning chains:
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=8192,
thinking={
"type": "enabled",
"budget_tokens": 4096
},
messages=[{
"role": "user",
"content": "Design a rate limiter that handles 100K requests/second with fair distribution across users"
}]
)
Few-Shot Examples
Providing examples is one of the most reliable ways to guide Claude's behavior. Show 2-3 examples of the input-output pattern you want:
"Convert natural language to SQL queries.
Example 1:
Input: How many users signed up last month?
Output: SELECT COUNT(*) FROM users WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month') AND created_at < DATE_TRUNC('month', CURRENT_DATE);
Example 2:
Input: Top 5 products by revenue
Output: SELECT product_name, SUM(price * quantity) as revenue FROM orders GROUP BY product_name ORDER BY revenue DESC LIMIT 5;
Now convert this:
Input: Average order value by country for 2025"
Role-Based Prompting
Assigning Claude a specific role improves domain-specific responses:
"You are a DevOps engineer with 15 years of experience in Kubernetes, AWS, and CI/CD pipelines.
A junior developer asks: 'Our Kubernetes pods keep restarting. How do I debug this?'
Provide a systematic troubleshooting guide with specific kubectl commands."
Prompt Anti-Patterns to Avoid
- Overly broad prompts — "Tell me everything about X" wastes tokens and produces unfocused responses.
- Negative instructions only — "Don't do X, don't do Y" is less effective than positive instructions stating what Claude should do.
- Ambiguous output format — If you need JSON, say JSON. If you need markdown, say markdown. Do not leave it to chance.
- Excessive system prompt length — Keep system prompts focused. A 5,000-word system prompt is usually less effective than a concise 500-word one.
- No context about the task — Claude performs better when it understands why you need something, not just what you need.
Production Prompt Optimization
- Use prompt caching — Mark your system prompt for caching to save 90% on input costs for repeated requests.
- A/B test prompts — Test different prompt formulations and measure output quality systematically.
- Version your prompts — Store prompts in version control and track changes over time.
- Monitor output quality — Set up automated evaluation of Claude's outputs to catch prompt regression.
- Use temperature wisely — Lower temperature (0.0-0.3) for consistent factual responses, higher (0.7-1.0) for creative tasks.
Mastering prompt engineering is the highest-leverage skill for Claude API users. A well-crafted prompt can transform a mediocre output into an excellent one without changing models or increasing cost.
Get Started with 轻舟 AI
Stable, fast AI API relay — supports Claude, OpenAI, Gemini and more
Sign Up Free
轻舟 AI