🧠 Chain of Thought (CoT)
🌟 Start With a Real-World Scenario
You ask ChatGPT a math problem:
"If a train leaves Station A at 60mph heading east, and another train
leaves Station B (100 miles east of A) at 40mph heading west,
when do they meet?"
Without Chain of Thought (Direct Answer):
ChatGPT: "They meet in 1 hour."
✅ Correct! But... how did it get there? Can we trust it?
Try a harder problem:
"A store has a 20% off sale. You have a $10 coupon. An item costs $100.
Do you save more by applying the discount first or the coupon first?"
Without Chain of Thought:
ChatGPT: "It doesn't matter, you save the same amount."
❌ WRONG! (You actually save more by applying the discount first!)
With Chain of Thought (Show Your Work):
Prompt: "Let's think step by step:
A store has a 20% off sale. You have a $10 coupon. An item costs $100.
Do you save more by applying the discount first or the coupon first?"
ChatGPT: "Let me work through both scenarios:
Scenario 1: Discount first, then coupon
1. Original price: $100
2. Apply 20% discount: $100 - $20 = $80
3. Apply $10 coupon: $80 - $10 = $70
Final price: $70
Scenario 2: Coupon first, then discount
1. Original price: $100
2. Apply $10 coupon: $100 - $10 = $90
3. Apply 20% discount: $90 - $18 = $72
Final price: $72
Answer: You save more ($2 more) by applying the discount first!"
✅ CORRECT! And we can see exactly how it got there!
The Magic of "Let's think step by step"
Just adding this phrase improves accuracy by 20-50%! 🤯
Research Results (Google, 2022):
Math Problems:
- Without CoT: 17% accuracy
- With CoT: 78% accuracy
- Improvement: 4.6x better!
Logic Puzzles:
- Without CoT: 34% accuracy
- With CoT: 89% accuracy
- Improvement: 2.6x better!
Common Sense Reasoning:
- Without CoT: 52% accuracy
- With CoT: 91% accuracy
- Improvement: 1.75x better!
Real-World Applications:
1. Customer Support (Troubleshooting):
Without CoT:
Customer: "My printer won't work"
AI: "Try restarting it"
❌ Generic, might not help
With CoT:
Customer: "My printer won't work"
AI: "Let me diagnose step by step:
1. Is the printer powered on? (Check power light)
2. Is it connected to computer? (Check USB/WiFi)
3. Is there paper in the tray?
4. Are there any error messages?
5. Is the ink/toner full?
Based on your answers, I can provide specific solutions."
✅ Systematic, thorough, helpful!
2. Code Debugging:
Without CoT:
"This code has a bug"
AI: "Try adding error handling"
❌ Vague
With CoT:
"This code has a bug"
AI: "Let me trace through the logic:
1. Line 5: Variable 'x' is initialized to 0
2. Line 10: Loop runs 5 times
3. Line 12: x += i (should be x += i+1)
4. Line 15: Returns x (will be 10, not 15)
Bug found: Line 12 should be 'x += i+1' not 'x += i'"
✅ Specific, actionable!
3. Medical Diagnosis (Conceptual):
Without CoT:
Symptoms: "Fever, cough, fatigue"
AI: "Might be flu"
❌ Uncertain
With CoT:
Symptoms: "Fever, cough, fatigue"
AI: "Let me consider systematically:
1. Fever + cough → Respiratory infection likely
2. Fatigue → Systemic involvement
3. Duration: 3 days → Acute onset
4. Season: Winter → Flu season
5. Exposure: Recent travel → Increased risk
Differential diagnosis:
- Influenza (most likely - 70%)
- COVID-19 (possible - 20%)
- Common cold (less likely - 10%)
Recommendation: Get tested for flu and COVID-19"
✅ Thorough, reasoned, actionable!
Types of Chain of Thought:
1. Zero-Shot CoT (Just add the magic phrase):
"Let's think step by step: [your question]"
- Easiest to use
- Works immediately
- 20-30% improvement
2. Few-Shot CoT (Show examples):
"Q: Roger has 5 balls. He buys 2 more. How many does he have?
A: Let's think step by step:
1. Roger starts with 5 balls
2. He buys 2 more balls
3. Total = 5 + 2 = 7 balls
Q: The cafeteria had 23 apples. They used 20 for lunch. How many left?
A: Let's think step by step:
1. Started with 23 apples
2. Used 20 apples
3. Remaining = 23 - 20 = 3 apples
Q: [Your question]
A: Let's think step by step:"
- More powerful
- 40-50% improvement
- Best for complex tasks
3. Self-Consistency CoT (Multiple reasoning paths):
"Solve this 3 different ways, then pick the most common answer"
- Most accurate
- 50-60% improvement
- Slower and more expensive
When to Use Chain of Thought:
✅ Perfect for:
- Math and logic problems
- Multi-step reasoning
- Debugging and troubleshooting
- Decision making with trade-offs
- Complex analysis
- When you need to verify reasoning
❌ Not needed for:
- Simple factual questions ("What's the capital of France?")
- Creative writing (slows it down)
- Translation (adds unnecessary steps)
- When speed is critical
The Cost Trade-off:
Without CoT:
- Tokens: 50
- Cost: $0.001
- Accuracy: 60%
- Speed: Fast
With CoT:
- Tokens: 200 (4x more!)
- Cost: $0.004 (4x more!)
- Accuracy: 90% (1.5x better!)
- Speed: Slower
Worth it? For critical tasks, YES! For simple tasks, NO!
By the end of this guide, you'll understand:
- How to use "Let's think step by step" effectively
- When CoT improves accuracy (and when it doesn't)
- Different CoT techniques (zero-shot, few-shot, self-consistency)
- How to debug AI reasoning by examining steps
- Cost vs. accuracy trade-offs
- How to combine CoT with other techniques
The breakthrough: CoT was discovered accidentally! Researchers found that just adding "Let's think step by step" to prompts dramatically improved reasoning. Nobody programmed this ability - it emerged from scale! 🤯
Fun fact: GPT-3 with CoT can solve problems that GPT-4 without CoT cannot! The technique matters more than model size for reasoning tasks! 🎯
Let's dive in! 🚀
🗺️ Concept Mind Map
CHAIN OF THOUGHT (CoT)
|
+---------------+---------------+
| | |
APPROACHES TECHNIQUES BENEFITS
| | |
| | |
Zero-Shot CoT Step-by-Step Better Reasoning
- "Let's think - Break down - Complex math
step by step" problem - Logic puzzles
- No examples - Show work - Multi-hop QA
- Simple prompt - Explain - Planning tasks
- Works well reasoning
| | |
| | |
Few-Shot CoT Self-Consistency Transparency
- Show examples - Generate N - See thinking
with reasoning answers - Debug errors
- Demonstrate - Vote on best - Trust building
thinking - Majority wins - Explainability
- Best quality - More reliable
| | |
| | |
Structured CoT Verification Accuracy Boost
- Fixed format - Check steps - 20-50% better
- JSON output - Validate - Fewer mistakes
- Parseable logic - Catches errors
- Consistent - Self-correct - More reliable
| | |
| | |
Tree of Decomposition Cost Trade-off
Thoughts - Sub-problems - More tokens
- Multiple - Solve parts - Higher cost
paths - Combine - Slower
- Explore results - Worth it for
branches - Recursive complex tasks
Direct vs Chain of Thought:
DIRECT PROMPTING:
Q: "Roger has 5 tennis balls. He buys 2 more cans of
tennis balls. Each can has 3 balls. How many does he have?"
A: "11 balls" ❌ (Wrong! No reasoning shown)
CHAIN OF THOUGHT:
Q: Same question + "Let's think step by step:"
A: "Step 1: Roger starts with 5 balls
Step 2: He buys 2 cans
Step 3: Each can has 3 balls, so 2 × 3 = 6 balls
Step 4: Total = 5 + 6 = 11 balls
Answer: 11 balls" ✅ (Correct! Shows reasoning)
CoT Patterns:
PATTERN 1: Zero-Shot
"Let's think step by step:"
"Let's break this down:"
"Let's solve this systematically:"
PATTERN 2: Few-Shot
Example 1: [Problem] → [Step-by-step] → [Answer]
Example 2: [Problem] → [Step-by-step] → [Answer]
Now solve: [New Problem]
PATTERN 3: Self-Consistency
Generate 5 different reasoning paths
Vote on most common answer
Return majority result
When to Use CoT:
- ✅ Math problems
- ✅ Logic puzzles
- ✅ Multi-step reasoning
- ✅ Complex analysis
- ❌ Simple classification
- ❌ Factual lookup
- ❌ Short answers
zations](#🎮-interactive-tools--visualizations) 3. Fun Facts & Hacks 4. What You'll Learn 5. Core Concept 6. Code Examples 7. Hands-On Exercises 8. Assignments & Practice Problems 9. Common Pitfalls & Debugging 10. Related Concepts 11. Resources 12. Key Takeaways 13. Next Steps
🛠️ Local Setup (5 Minutes)
Set up for Chain of Thought experiments:
Step 1: Install Dependencies
pip install openai==1.3.0 \
anthropic==0.7.0 \
langchain==0.1.0 \
python-dotenv==1.0.0
Step 2: Quick Test
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI()
# Test Chain of Thought
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{
"role": "user",
"content": """
Solve this problem step by step:
If a train travels 60 miles in 1 hour, how far will it travel in 2.5 hours?
Let's think step by step:
"""
}],
temperature=0
)
print(response.choices[0].message.content)
print("\n✅ Chain of Thought working!")
🧠 Core Concept
The Problem: Complex Reasoning
LLMs struggle with multi-step reasoning when asked directly:
# Direct prompting (often fails)
prompt = "If John has 3 apples and buys 2 more, then gives 1 to Mary, how many does he have?"
# Model might guess: "4" or "5" (wrong!)
The Solution: Show the Steps
Chain of Thought breaks down reasoning:
# Chain of Thought (much better)
prompt = """
If John has 3 apples and buys 2 more, then gives 1 to Mary, how many does he have?
Let's think step by step:
1. John starts with 3 apples
2. He buys 2 more: 3 + 2 = 5 apples
3. He gives 1 to Mary: 5 - 1 = 4 apples
4. Final answer: 4 apples
"""
# Model follows the reasoning and gets it right!
Types of Chain of Thought
1. Zero-Shot CoT: Just add "Let's think step by step"
prompt = "Solve this problem. Let's think step by step:\n{problem}"
2. Few-Shot CoT: Show example reasoning
prompt = """
Example:
Q: If a train travels 60 mph for 2 hours, how far does it go?
A: Let's think step by step:
1. Speed = 60 mph
2. Time = 2 hours
3. Distance = Speed × Time = 60 × 2 = 120 miles
Now solve:
Q: {new_problem}
A: Let's think step by step:
"""
3. Self-Consistency CoT: Multiple reasoning paths
# Generate 5 different reasoning chains
# Take majority vote on final answer
💻 Code Examples
Example 1: Basic Chain of Thought
from openai import OpenAI
client = OpenAI()
def solve_with_cot(problem):
"""
Solve problem using Chain of Thought.
"""
prompt = f"""
Solve this problem step by step:
{problem}
Let's think step by step:
"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return response.choices[0].message.content
# Test
problem = "A store has 45 items. They sell 12 in the morning and 8 in the afternoon. How many are left?"
solution = solve_with_cot(problem)
print(solution)
Output:
1. Start with 45 items
2. Sell 12 in morning: 45 - 12 = 33 items
3. Sell 8 in afternoon: 33 - 8 = 25 items
4. Final answer: 25 items remaining
Example 2: Few-Shot Chain of Thought
def few_shot_cot(problem, examples):
"""
Use few-shot examples to guide reasoning.
"""
# Build prompt with examples
prompt = "Solve these problems step by step:\n\n"
for ex in examples:
prompt += f"Problem: {ex['problem']}\n"
prompt += f"Solution:\n{ex['solution']}\n\n"
prompt += f"Problem: {problem}\nSolution:\n"
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return response.choices[0].message.content
# Example usage
examples = [
{
"problem": "If a book costs $12 and you have $50, how many can you buy?",
"solution": """
Step 1: Identify what we know
- Book cost: $12
- Money available: $50
Step 2: Calculate
- Number of books = $50 ÷ $12 = 4.16...
Step 3: Round down (can't buy partial books)
- Can buy 4 books
Final Answer: 4 books
"""
}
]
problem = "If a pizza costs $15 and you have $100, how many can you buy?"
solution = few_shot_cot(problem, examples)
print(solution)
Example 3: Self-Consistency CoT
from collections import Counter
def self_consistency_cot(problem, num_samples=5):
"""
Generate multiple reasoning chains and take majority vote.
"""
answers = []
reasonings = []
for i in range(num_samples):
prompt = f"""
Solve this problem step by step:
{problem}
Let's think step by step:
"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.7 # Higher temperature for diversity
)
reasoning = response.choices[0].message.content
reasonings.append(reasoning)
# Extract final answer (last number in response)
import re
numbers = re.findall(r'\d+', reasoning)
if numbers:
answers.append(numbers[-1])
# Majority vote
if answers:
most_common = Counter(answers).most_common(1)[0]
final_answer = most_common[0]
confidence = most_common[1] / num_samples
return {
"answer": final_answer,
"confidence": confidence,
"all_answers": answers,
"reasonings": reasonings
}
return None
# Test
problem = "A farmer has 17 sheep. All but 9 die. How many are left?"
result = self_consistency_cot(problem, num_samples=5)
print(f"Final Answer: {result['answer']}")
print(f"Confidence: {result['confidence']:.1%}")
print(f"All answers: {result['all_answers']}")
Example 4: Structured Chain of Thought
class StructuredCoT:
"""
Enforce structured reasoning format.
"""
def __init__(self, client):
self.client = client
def solve(self, problem, domain="math"):
"""
Solve with structured steps.
"""
if domain == "math":
template = """
Solve this math problem using these steps:
Problem: {problem}
Step 1 - Identify Given Information:
[List what we know]
Step 2 - Identify What We Need to Find:
[State the goal]
Step 3 - Choose Strategy:
[Explain approach]
Step 4 - Execute Calculation:
[Show work]
Step 5 - Verify Answer:
[Check if reasonable]
Final Answer:
[Clear answer]
"""
elif domain == "logic":
template = """
Solve this logic problem:
Problem: {problem}
Step 1 - List Facts:
[Known information]
Step 2 - Identify Assumptions:
[What we're assuming]
Step 3 - Apply Logic:
[Reasoning process]
Step 4 - Draw Conclusion:
[Final conclusion]
Step 5 - Check Consistency:
[Verify logic]
Final Answer:
[Clear answer]
"""
prompt = template.format(problem=problem)
response = self.client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return response.choices[0].message.content
# Example usage
cot = StructuredCoT(client)
math_problem = "If a car travels at 60 mph for 2.5 hours, how far does it go?"
solution = cot.solve(math_problem, domain="math")
print(solution)
Example 5: CoT with Verification
def cot_with_verification(problem):
"""
Chain of Thought with self-verification.
"""
# Step 1: Initial solution
solve_prompt = f"""
Solve this problem step by step:
{problem}
Let's think step by step:
"""
solution = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": solve_prompt}],
temperature=0
).choices[0].message.content
# Step 2: Verify solution
verify_prompt = f"""
Problem: {problem}
Proposed Solution:
{solution}
Verify this solution:
1. Check each step for errors
2. Verify the final answer
3. If wrong, provide correct solution
Verification:
"""
verification = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": verify_prompt}],
temperature=0
).choices[0].message.content
return {
"initial_solution": solution,
"verification": verification
}
# Test
problem = "If you have $100 and spend 25%, how much is left?"
result = cot_with_verification(problem)
print("Initial Solution:")
print(result["initial_solution"])
print("\nVerification:")
print(result["verification"])
📝 Assignments & Practice Problems
Assignment 1: CoT Prompt Builder ⭐
Difficulty: Easy | Time: 30 minutes
Build a tool that converts direct prompts to CoT prompts.
Requirements:
- Input: Direct question
- Output: CoT-formatted prompt
- Add "Let's think step by step"
- Test with 10 problems
Assignment 2: Multi-Step Reasoning System ⭐⭐
Difficulty: Medium | Time: 60 minutes
Create a system that breaks complex problems into steps.
Requirements:
- Identify problem type
- Generate appropriate steps
- Execute each step
- Verify final answer
- Handle errors
Assignment 3: Self-Consistency Framework ⭐⭐⭐
Difficulty: Hard | Time: 90 minutes
Build a complete self-consistency system.
Requirements:
- Generate N reasoning chains
- Extract and compare answers
- Implement voting mechanism
- Calculate confidence scores
- Provide explanation for disagreements
❌ Bad: Vague steps
"Step 1: Think about it Step 2: Calculate Step 3: Answer"
✅ Good: Specific steps
"Step 1: Identify given values (speed=60mph, time=2hrs) Step 2: Apply formula (distance = speed × time) Step 3: Calculate (60 × 2 = 120 miles)"
### Pitfall 2: Skipping Verification
```python
# ❌ Bad: No verification
"Final Answer: 42"
# ✅ Good: Verify
"Final Answer: 42
Verification: 42 makes sense because..."
Pitfall 3: Using CoT for Simple Tasks
# ❌ Bad: Overkill
"What is 2+2? Let's think step by step..."
# ✅ Good: Direct for simple tasks
"What is 2+2?" → "4"
🔗 Related Concepts
- Previous: Context Engineering - Prompt optimization
- Next: Vector Database - Storing knowledge
- Related: Few-Shot Prompting - Learning from examples
- Advanced: Reasoning Models - Advanced reasoning
📚 Resources
Papers
- 📄 Chain-of-Thought Prompting - Original paper
- 📄 Self-Consistency - Majority voting
- 📄 Zero-Shot CoT - "Let's think step by step"
Guides
Tools
pip install langchain # CoT chains
pip install guidance # Structured reasoning
