Ga naar hoofdinhoud

Claude Sonnet 4: Een praktische gids voor developers

Ontdek de developerfeatures van Claude Sonnet 4—code‑executie, Files API en toolgebruik—door een Python‑agent te bouwen die wiskunde oplost.
Bijgewerkt 2 okt 2026  · 11 min lezen

Verken met AI

ChatGPTClaudePerplexity

Anthropic lanceerde onlangs de vernieuwde Claude Sonnet 4.5, Claude Agents SDK en Imagine with Claude.

Met de release van Claude Sonnet 4 hebben developers nu toegang tot krachtige nieuwe mogelijkheden—waaronder native code‑executie, een flexibele Files API en dynamisch toolgebruik. Deze features openen spannende mogelijkheden om AI‑applicaties te bouwen die verder gaan dan simpele tekstinteracties.

In deze tutorial neem ik je stap voor stap mee langs deze nieuwe features door een Python‑gebaseerde agent te bouwen die geavanceerde wiskundevragen direct vanuit je terminal kan oplossen. Je leert te werken met de nieuw geïntroduceerde native code‑executietool en de Files API.

Aan het einde heb je een werkende agent, aangedreven door Claude Sonnet 4, die problemen analyseert, Pythoncode schrijft en uitvoert, en visuals rendert zoals hieronder.

Voorbeeldplots gegenereerd door de native code-executietool van Claude 4 Sonnet

Bekijk the GitHub‑repository van dit project om alle code te zien voor het bouwen van de applicatie.

Als je net begint met bouwen met LLM’s zoals Claude, dan schetst deze AI‑developer roadmap de essentiële tools, skills en leerroutes om te starten.

Wat is er nieuw in de Anthropic API

Voordat we in de tutorial duiken, kijken we naar de recent uitgebrachte nieuwe features in de Anthropic API. Sla dit gerust over als je ze al kent.

Ik denk dat de gehele aankondiging van Claude 4 kan worden samengevat in deze ene afbeelding:

Een afbeelding die laat zien dat Claude 4-modellen leiden op SWE-bench Verified, een benchmark voor prestaties op echte software-engineeringtaken.

Claude 4‑modellen (Opus en Sonnet 4) verslaan de concurrentie met een aanzienlijke voorsprong op geverifieerde software‑engineeringtaken. Anthropic bereikte dit door een paar belangrijke wijzigingen in het modelgedrag door te voeren:

  1. Lange runtimes: Beide modellen ondersteunen meerdere uren continue taakuitvoering om problemen met duizenden stappen op te lossen.
  2. Uitgebreid redeneren met toolgebruik: Beide modellen kunnen nu tijdens uitgebreid denken tools gebruiken, zoals websearch, waardoor Claude kan afwisselen tussen redeneren en toolgebruik om antwoorden te verbeteren.
  3. Parallelle toolexecutie: De modellen kunnen nu meerdere tools gelijktijdig in plaats van sequentieel gebruiken.
  4. Nauwkeuriger instructieopvolging: Verbeterde stuurbaarheid geeft gebruikers meer controle over implementaties en hoe Claude op instructies reageert.
  5. Verbeterde geheugencapaciteiten: Met toegang tot lokale bestanden kunnen de modellen kernfeiten extraheren en opslaan om continuïteit te behouden en impliciete kennis in de tijd op te bouwen.
  6. Minder shortcut‑gedrag: In vergelijking met eerdere versies zijn beide modellen 65% minder geneigd om shortcuts of mazen te gebruiken om taken te voltooien (zie de volledige aankondiging voor meer details).

Daarnaast heeft Anthropic als onderdeel van de Claude 4‑modelfamilie vier nieuwe features toegevoegd voor het bouwen van AI‑agents: de code‑executietool, Files API, MCP‑connector en uitgebreide promptcaching. Deze tools veranderen hoe developers AI‑applicaties kunnen bouwen.

Code‑executietool: Voer Pythoncode veilig uit

De code‑executietool stelt Claude in staat om Pythoncode uit te voeren in een beveiligde sandboxomgeving. In plaats van alleen codevoorstellen te doen, kan Claude nu code uitvoeren, resultaten analyseren en itereren op oplossingen.

Om de code‑executietool te gebruiken, voeg je deze toe aan je tools‑array en neem je de vereiste beta‑header op:

from anthropic import Anthropic

# Initialize client with the code execution beta header
client = Anthropic(
   default_headers={
       "anthropic-beta": "code-execution-2025-05-22"
   }
)

# Send a request that triggers code execution
response = client.messages.create(
   model="claude-sonnet-4-20250514",
   max_tokens=4096,
   messages=[{
       "role": "user",
       "content": "Solve the quadratic equation 2x² + 5x - 3 = 0 and plot the parabola"
   }],
   tools=[{
       "type": "code_execution_20250522",
       "name": "code_execution"
   }]
)

Wanneer Claude code uitvoert, bevat het antwoord zowel de gegenereerde code als de uitvoerresultaten. Zo parse je de verschillende componenten:

# Parse the response to extract code and results
for item in response.content:
   if item.type == "server_tool_use":
       # This contains the actual Python code Claude wrote
       print(f"Code executed:\n{item.input['code']}")
   elif item.type == "code_execution_tool_result":
       # This contains the output from running the code
       print(f"Output:\n{item.content['stdout']}")
       if item.content.get('stderr'):
           print(f"Errors:\n{item.content['stderr']}")

Sandbox‑beperkingen: De code‑executieomgeving heeft diverse ingebouwde beveiligingsrestricties. Claude draait in een geïsoleerde container zonder internettoegang, met beperkte rekenmiddelen (1 GB RAM, 5 GB schijfruimte en 1 CPU) en kan je lokale bestandssysteem niet benaderen. De omgeving wordt geleverd met populaire libraries zoals numpy, pandas, matplotlib en scipy vooraf geïnstalleerd, maar je kunt tijdens de uitvoering geen extra packages installeren.

Files API: Persistente bestandscontext voor complexe taken

De Files API stelt je in staat om documenten één keer te uploaden en ze in meerdere conversaties te gebruiken. Zo hoef je geen grote documenten in elke API‑request mee te sturen.

Upload eerst je bestand naar de servers van Anthropic:

# Upload a file once - this stores it on Anthropic's servers
uploaded_file = client.beta.files.upload(
   file=open("sales_data.csv", "rb"),
   purpose="user_upload"
)
# The uploaded_file.id can now be referenced in multiple conversations

Na het uploaden verwijs je in je API‑calls naar het bestand met het container_upload‑contenttype:

# Reference the uploaded file in a conversation
response = client.messages.create(
   model="claude-sonnet-4-20250514",
   max_tokens=4096,
   messages=[{
       "role": "user",
       "content": [
           {"type": "text", "text": "Create a quarterly sales report from this data"},
           {"type": "container_upload", "file_id": uploaded_file.id}
       ]
   }],
   tools=[{
       "type": "code_execution_20250522",
       "name": "code_execution"
   }]
)

Wanneer Claude tijdens code‑executie bestanden aanmaakt (zoals plots of bewerkte data), kun je die extraheren en downloaden:

# Extract file IDs of any files Claude created during execution
def extract_created_files(response):
   file_ids = []
   for item in response.content:
       if item.type == 'code_execution_tool_result':
           content = item.content
           if content.get('type') == 'code_execution_result':
               # Look for file objects in the execution results
               for file_obj in content.get('content', []):
                   if 'file_id' in file_obj:
                       file_ids.append(file_obj['file_id'])
   return file_ids

# Download any files Claude created
created_files = extract_created_files(response)
for file_id in created_files:
   file_content = client.beta.files.download(file_id)
   file_content.write_to_file(f"output_{file_id}.png")

MCP‑connector: Koppel Claude aan elke workflow

De MCP‑connector brengt Model Context Protocol‑ondersteuning rechtstreeks naar de API. Met MCP’s kan Claude verbinden met externe services zoals databases, API’s en productiviteitstools zonder eigen integratiecode.

Voorheen vereiste de koppeling met MCP‑servers het bouwen van clientinfrastructuur. Nu kun je simpelweg een remote MCP‑server‑URL in je API‑request opgeven, en Claude ontdekt automatisch beschikbare tools, beheert verbindingen en regelt authenticatie.

Dit opent toegang tot een groeiend ecosysteem van MCP‑servers van bedrijven als Zapier en Asana, zodat je agents kunt bouwen die je agenda lezen, projectmanagementtools bijwerken of integreren met honderden andere services.

Aan de slag met Claude Sonnet 4: Projectoverzicht en setup

Nu we de nieuwe API‑features begrijpen, gaan we onze interactieve wiskunde‑oplosser bouwen. We combineren Claude’s code‑executiecapaciteiten met bestandsafhandeling tot een volledige wiskundige assistent.

Onze applicatie accepteert wiskundevragen in natuurlijke taal, voert Pythoncode uit om ze op te lossen, genereert visualisaties en slaat uitgebreide rapporten op.

Voor een gestructureerde aanpak van projecten als deze, bekijk de Developing AI Applications‑track.

> Let op: Omdat we lange codeblokken afwisselen met uitleg, kan de inspringing in snippets niet overal exact kloppen. We raden daarom aan om de GitHub‑repo van dit project in een apart tabblad te openen tijdens het volgen.

Stap 0: Richt je Claude Sonnet 4‑projectomgeving in

Voordat we code schrijven, zetten we de ontwikkelomgeving en dependencies op.

Maak een nieuwe directory voor je project en de benodigde bestanden:

mkdir math-solver
cd math-solver
touch math_solver.py demo_problems.py requirements.txt README.md

Maak een requirements.txt‑bestand met de benodigde dependencies:

anthropic>=0.42.0

Installeer de dependencies:

pip install -r requirements.txt

Stel je Anthropic API‑sleutel in als omgevingsvariabele:

export ANTHROPIC_API_KEY="your-api-key-here"

Stap 1: Ontwerp de applicatiestructuur

We beginnen met het maken van de basisstructuur van onze MathSolver‑klasse. Deze klasse handelt alle hoofdfuncties af: API‑communicatie, bestandsbeheer en gebruikersinteractie.

Eerst zetten we de imports en basisstructuur op:

#!/usr/bin/env python3
"""
Interactive Math Problem Solver using Claude 4 Code Execution Tool

This application allows users to ask math questions in natural language,
gets solutions using Claude's code execution capabilities, and saves
both visualizations and detailed markdown reports.
"""

import os
import json
import datetime
from pathlib import Path
from typing import List, Dict, Any
from anthropic import Anthropic

Nu definiëren we de hoofdklassestructuur:

class MathSolver:
   def __init__(self, api_key: str = None):
       """Initialize the Math Solver with Anthropic client."""
       # API setup and directory creation will go here
       pass

   def solve_problem(self, question: str) -> Dict[str, Any]:
       """Send a math question to Claude and get solution with code execution."""
       pass
Here are the methods for file and report handling:
def extract_files_from_response(self, response) -> List[str]:
       """Extract file IDs from Claude's response."""
       pass

   def download_files(self, file_ids: List[str]) -> List[str]:
       """Download files created by code execution to local storage."""
       pass

   def extract_code_blocks(self, response) -> List[str]:
       """Extract all code blocks from the response."""
       Pass

Tot slot voegen we sessiebeheer en het entrypoint toe:

def generate_markdown_report(self, result: Dict[str, Any], downloaded_files: List[str]) -> str:
       """Generate a comprehensive markdown report of the solution."""
       pass

   def run_interactive_session(self):
       """Run the main interactive session loop."""
       pass


def main():
   """Main entry point for the application."""
   pass

Deze structuur geeft een helder stappenplan: initialisatie, probleemoplossing, bestandsafhandeling, rapportgeneratie en gebruikersinteractie. Elke methode heeft een specifieke verantwoordelijkheid binnen onze wiskunde‑pipeline.

Een wiskunde‑oplosser bouwen met Claude Sonnet 4‑code‑executie

Laten we nu de kernfunctionaliteit implementeren met Claude’s code‑executietool en streamingantwoorden.

Stap 2: Initialiseer Claude met veilige API‑headers

We implementeren de __init__()‑methode voor het opzetten van de API‑client en het aanmaken van directories.

Eerst regelen we het beheer van de API‑sleutel:

def __init__(self, api_key: str = None):
   """Initialize the Math Solver with Anthropic client."""
   if not api_key:
       api_key = os.getenv("ANTHROPIC_API_KEY")
       if not api_key:
           raise ValueError(
               "Please set ANTHROPIC_API_KEY environment variable or provide api_key"
           )

Vervolgens zetten we de Anthropic‑client op met de vereiste beta‑headers:

# Initialize client with both code execution and files API headers
   self.client = Anthropic(
       api_key=api_key,
       default_headers={
           "anthropic-beta": "code-execution-2025-05-22,files-api-2025-04-14"
       },
   )

Tot slot maken we de outputdirectorystructuur aan:

# Create organized output directories
   self.output_dir = Path("math_solver_output")
   self.images_dir = self.output_dir / "images"
   self.reports_dir = self.output_dir / "reports"

   self.output_dir.mkdir(exist_ok=True)
   self.images_dir.mkdir(exist_ok=True)
   self.reports_dir.mkdir(exist_ok=True)

   print(f"📁 Output directories created:")
   print(f"   • Images: {self.images_dir}")
   print(f"   • Reports: {self.reports_dir}")

Deze initialisatie doet drie belangrijke dingen:

  1. API‑sleutelbeheer: Controleert eerst op de sleutel in omgevingsvariabelen en valt anders terug op een parameter.
  2. Clientsetup: Maakt een Anthropic‑client met beide beta‑headers voor code‑executie en Files API.
  3. Directorystructuur: Maakt geordende mappen voor het opslaan van afbeeldingen en rapporten.

Stap 3: Schrijf de kernfunctie van de solver

De solve_problem()‑methode is het hart van onze applicatie. Deze verstuurt requests naar Claude met streamingondersteuning.

We beginnen met de functiedeclaratie en initiële setup:

def solve_problem(self, question: str) -> Dict[str, Any]:
   """
   Send a math question to Claude and get solution with code execution.
   """
   print(f"\n🤔 Thinking about: {question}")

   try:
       # Use streaming to show real-time progress
       with self.client.messages.stream(
           model="claude-sonnet-4-20250514",
           max_tokens=4096,
Now we configure the message and tool specification:
messages=[
               {
                   "role": "user",
                   "content": f"""Solve this math problem using code execution:

Problem: {question}

Please:
1. Solve the problem with actual Python code
2. Create visualizations using matplotlib if helpful
3. Save any plots as PNG files using plt.savefig()
4. Show your calculations step by step
5. Use descriptive filenames for saved plots

Execute Python code to solve this problem.""",
               }
           ],
           tools=[{"type": "code_execution_20250522", "name": "code_execution"}],
       ) as stream:
The streaming event processing handles real-time updates:
print("\n💭 Claude is working...")

           # Process streaming events and show progress
           for event in stream:
               if event.type == "content_block_start":
                   if hasattr(event.content_block, "type"):
                       if event.content_block.type == "text":
                           print("\n📝 Response:", end=" ", flush=True)
                       elif event.content_block.type == "server_tool_use":
                           print(f"\n🔧 Using tool: {event.content_block.name}")

We verwerken verschillende types streamingevents:

	elif event.type == "content_block_delta":
                   if hasattr(event.delta, "text"):
                       print(event.delta.text, end="", flush=True)

               elif event.type == "content_block_stop":
                   print("", flush=True)  # New line

               elif event.type == "message_delta":
                   if hasattr(event.delta, "stop_reason"):
                       print(f"\n✅ Completed: {event.delta.stop_reason}")

Tot slot retourneren we het resultaat of handelen we errors af:

	# Get the final message
           final_message = stream.get_final_message()

           return {
               "response": final_message,
               "question": question,
               "timestamp": datetime.datetime.now().isoformat(),
           }

   except Exception as e:
       print(f"❌ Error solving problem: {e}")
       return None

Deze functie laat een paar belangrijke concepten zien:

  • Streamingondersteuning: We gebruiken client.messages.stream() in plaats van client.messages.create() om realtime feedback te krijgen terwijl Claude aan het probleem werkt.
  • Eventafhandeling: De streaming‑API stuurt verschillende eventtypes:
    • content_block_start: wanneer Claude begint met tekstschrijven of een tool gebruikt
    • content_block_delta: terwijl content wordt gegenereerd
    • content_block_stop: wanneer een contentblok klaar is
    • message_delta: wanneer het volledige bericht is afgerond
  • Toolspecificatie: We nemen de code‑executietool op in de tools‑array met exact het type "code_execution_20250522".
  • Gestructureerde prompting: Onze prompt instrueert Claude duidelijk om code‑executie te gebruiken en eventuele visualisaties op te slaan.

Stap 4: Los wiskundeproblemen op met streaming code‑executie

Wanneer Claude tijdens code‑executie bestanden aanmaakt (zoals matplotlib‑plots), moeten we hun file‑ID’s extraheren en ze lokaal downloaden.

De methode voor bestandsextractie navigeert door de responsstructuur:

def extract_files_from_response(self, response) -> List[str]:
   """Extract file IDs from Claude's response."""
   file_ids = []

   for item in response.content:
       if item.type == "code_execution_tool_result":
           content_item = item.content
          
           if isinstance(content_item, dict):
               if content_item.get("type") == "code_execution_result":
                   content_list = content_item.get("content", [])

Daarna zoeken we in de content naar file‑ID’s:

  for file_item in content_list:
                       if isinstance(file_item, dict) and "file_id" in file_item:
                           file_ids.append(file_item["file_id"])

   return file_ids

Het downloadproces haalt bestanden op en slaat ze lokaal op:

def download_files(self, file_ids: List[str]) -> List[str]:
   """Download files created by code execution to local storage."""
   downloaded_files = []

   for file_id in file_ids:
       try:
           # Get file metadata and download content
           file_metadata = self.client.beta.files.retrieve_metadata(file_id)
           filename = file_metadata.filename
          
           file_content = self.client.beta.files.download(file_id)
           local_path = self.images_dir / filename
           file_content.write_to_file(str(local_path))

We houden gedownloade bestanden bij en handelen errors af:

downloaded_files.append(str(local_path))
           print(f"✅ Downloaded: {filename}")

       except Exception as e:
           print(f"❌ Error downloading file {file_id}: {e}")

   return downloaded_files
  • Logica voor bestandsextractie: De methode extract_files_from_response() navigeert door de responsstructuur om file‑ID’s te vinden. Code‑executieresultaten zijn genest in een specifiek formaat waarbij bestanden verschijnen in de content‑array.
  • Proces voor bestandsdownload: De download_files()‑methode:
    • Haalt metadata op voor elk bestand (inclusief de oorspronkelijke bestandsnaam)
    • Downloadt de bestandsinhoud via de Files API
    • Slaat bestanden op in onze geordende directorystructuur
    • Retourneert een lijst met lokale bestandspaden voor later gebruik

Resultaten extraheren uit Claude Sonnet 4: code, visuals en rapporten

Laten we nu Claude’s gegenereerde code en outputs hergebruiken en controleren.

Stap 5: Download visuele outputs uit Claude’s antwoorden

Voor onze markdownrapporten willen we de daadwerkelijke Pythoncode opnemen die Claude heeft uitgevoerd:

def extract_code_blocks(self, response) -> List[str]:
   """Extract all code blocks from the response."""
   code_blocks = []

   for item in response.content:
       if item.type == "server_tool_use" and item.name == "code_execution":
           if (
               hasattr(item, "input")
               and isinstance(item.input, dict)
               and "code" in item.input
           ):
               code_blocks.append(item.input["code"])

   return code_blocks

Deze methode zoekt naar server_tool_use‑items met de naam "code_execution" en extraheert de Pythoncode uit het input‑veld. Zo krijgen we de daadwerkelijke code die Claude heeft geschreven en uitgevoerd.

Stap 6: Extraheer Claude’s code voor hergebruik en auditing

Onze rapportgenerator maakt uitgebreide documentatie van elke oplossing.

Eerst extraheren we content en zetten we de rapportstructuur op:

def generate_markdown_report(self, result: Dict[str, Any], downloaded_files: List[str]) -> str:
   """Generate a comprehensive markdown report of the solution."""
   response = result["response"]
   question = result["question"]
   timestamp = result["timestamp"]

   # Extract text content and code blocks
   text_content = []
   code_blocks = self.extract_code_blocks(response)

   for item in response.content:
       if item.type == "text":
           text_content.append(item.text)

Vervolgens genereren we een veilige bestandsnaam met timestamp:

# Generate filename with timestamp
   safe_question = "".join(
       c for c in question[:50] if c.isalnum() or c in (" ", "-", "_")
   ).strip()
   filename = f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}_{safe_question.replace(' ', '_')}.md"
   filepath = self.reports_dir / filename

We bouwen de markdowninhoud met een header en de probleemstelling:

# Create markdown content
   markdown_content = f"""# Math Problem Solution Report

**Generated:** {timestamp}
**Question:** {question}

---

## Problem Statement

{question}

---

## Solution

"""
Add the solution explanation and code blocks:
# Add the main explanation
   for text in text_content:
       markdown_content += f"{text}\n\n"

   # Add code sections
   if code_blocks:
       markdown_content += "---\n\n## Code Used\n\n"
       for i, code in enumerate(code_blocks, 1):
           markdown_content += f"### Code Block {i}\n\n```python\n{code}\n```\n\n"

Neem eventuele gegenereerde visualisaties op:

# Add images section
   if downloaded_files:
       markdown_content += "---\n\n## Generated Visualizations\n\n"
       for file_path in downloaded_files:
           filename = Path(file_path).name
           relative_path = f"../images/{filename}"
           markdown_content += f"![{filename}]({relative_path})\n\n"
Finally, add metadata and save the report:
# Add footer
   markdown_content += f"""---

## Report Details

- **Generated by:** Claude 4 Math Solver
- **Model:** claude-sonnet-4-20250514
- **Timestamp:** {timestamp}
- **Files created:** {len(downloaded_files)} visualization(s)

---

*This report was automatically generated using Claude's code execution capabilities.*
"""

   # Save the report
   with open(filepath, "w", encoding="utf-8") as f:
       f.write(markdown_content)

   return str(filepath)

Deze rapportgenerator maakt een gestructureerd markdowndocument met:

  • Probleemstelling en metadata
  • Uitleg van de oplossing uit Claude’s tekstantwoorden
  • Codeblokken met de daadwerkelijk uitgevoerde Pythoncode
  • Ingebedde visualisaties met relatieve paden
  • Rapportmetadata voor tracking en referentie

De generatie van bestandsnamen zorgt voor veilige, getimestampte namen die niet met bestaande bestanden conflicteren.

De Math Solver interactief draaien

Vervolgens richten we ons op de gebruikersinteractielus, demotools en testen.

Stap 7: Beheer de interactieve sessie

De interactieve sessielus verwerkt gebruikersinput en coördineert al onze componenten.

We beginnen met de sessie‑setup en welkomstboodschap:

def run_interactive_session(self):
   """Run the main interactive session loop."""
   print("🧮 Interactive Math Problem Solver with Claude 4")
   print("=" * 60)
   print("Ask me any math question and I'll solve it step by step!")
   print("I can handle algebra, calculus, statistics, geometry, and more.")
   print("Type 'quit', 'exit', or 'q' to end the session.")
   print("=" * 60)

   session_count = 0

De hoofdlus verwerkt gebruikersinput en afsluitcondities:

while True:
       try:
           # Get user input
           question = input(f"\n📝 Question #{session_count + 1}: ").strip()

           if question.lower() in ["quit", "exit", "q"]:
               print("\n👋 Thanks for using the Math Solver! Goodbye!")
               break

           if not question:
               print("Please enter a question.")
               continue

           session_count += 1

Voor elke geldige vraag doorlopen we de complete workflow:

# Solve the problem
           result = self.solve_problem(question)
           if not result:
               continue

           # Extract and download any files created
           file_ids = self.extract_files_from_response(result["response"])
           downloaded_files = []
           if file_ids:
               print(f"📥 Downloading {len(file_ids)} file(s)...")
               downloaded_files = self.download_files(file_ids)

We ronden af met rapportgeneratie en feedback aan de gebruiker:

# Generate markdown report
           print(f"📝 Generating report...")
           report_path = self.generate_markdown_report(result, downloaded_files)

           print(f"\n✅ Solution complete!")
           print(f"📄 Report saved: {report_path}")
           if downloaded_files:
               print(f"🖼️  Visualizations: {len(downloaded_files)} file(s) saved")

       except KeyboardInterrupt:
           print("\n\n👋 Session interrupted. Goodbye!")
           break
       except Exception as e:
           print(f"❌ An error occurred: {e}")
           print("Please try again with a different question.")

Deze lus demonstreert een complete workflow:

  1. Gebruikersinteractie: Vragen uitvragen en exit‑commando’s afhandelen
  2. Probleemoplossing: Onze solve_problem()‑methode aanroepen
  3. Bestandsverwerking: Eventuele gegenereerde bestanden extraheren en downloaden
  4. Rapportgeneratie: Een uitgebreid markdownrapport maken
  5. Foutherstel: Onderbrekingen en errors netjes afhandelen

Stap 8: Schrijf het entrypoint van de applicatie

Tot slot hebben we een main()‑functie nodig om onze applicatie te initialiseren en te starten:

def main():
   """Main entry point for the application."""
   try:
       solver = MathSolver()
       solver.run_interactive_session()
   except Exception as e:
       print(f"❌ Failed to initialize Math Solver: {e}")
       print("Make sure you have set the ANTHROPIC_API_KEY environment variable.")
       return 1

   return 0


if __name__ == "__main__":
   exit(main())

Dit eenvoudige entrypoint handelt initialisatiefouten af (zoals ontbrekende API‑sleutels) en geeft behulpzame foutmeldingen.

Stap 9: Voeg een demovraggenerator toe

Om gebruikers op weg te helpen, maken we een los script met voorbeeldvragen. Maak demo_problems.py aan.

Eerst definiëren we onze vraagcategorieën:

# demo_problems.py
#!/usr/bin/env python3
"""
Demo problems for the Interactive Math Problem Solver
"""

# Sample problems organized by difficulty and topic
DEMO_PROBLEMS = {
   "Beginner": [
       "What is 15% of 240?",
       "Solve for x: 3x + 7 = 22",
       "Find the area of a circle with radius 5",
       "Convert 45 degrees to radians",
       "Calculate the hypotenuse of a right triangle with legs 3 and 4",
   ],

Voeg sets met intermediate en advanced vragen toe:

"Intermediate": [
       "Solve the quadratic equation: 2x^2 + 5x - 3 = 0",
       "Graph y = x^2 - 4x + 3 and find its vertex",
       "Calculate mean, median, and standard deviation of [12, 15, 18, 22, 25, 28]",
       "Find where f(x) = x^3 - 3x^2 + 2 crosses the x-axis",
       "Solve the system of equations: 2x + 3y = 7, x - y = 1",
   ],
   "Advanced": [
       "Find the derivative of sin(x) * e^x and plot both functions",
       "Calculate the integral of x^2 from 0 to 5",
       "Use Newton's method to find the root of x^3 - 2x - 5 = 0",
       "Perform linear regression on data points and plot the results",
       "Solve the differential equation dy/dx = x*y with initial condition y(0) = 1",
   ],
}

Maak helperfuncties voor willekeurige selectie en weergave:

def get_random_problem(category=None):
   """Get a random problem from a specific category or all categories."""
   import random

   if category and category in DEMO_PROBLEMS:
       return random.choice(DEMO_PROBLEMS[category])
   else:
       # Pick from all problems
       all_problems = []
       for problems in DEMO_PROBLEMS.values():
           all_problems.extend(problems)
       return random.choice(all_problems)

Voeg een functie toe om alle beschikbare vragen te tonen:

def print_demo_problems():
   """Print all demo problems organized by category."""
   print("🧮 Demo Problems for Interactive Math Solver")
   print("=" * 60)
   print("Here are example problems you can try, organized by difficulty:\n")

   for category, problems in DEMO_PROBLEMS.items():
       print(f"### {category}")
       print("-" * (len(category) + 4))
       for i, problem in enumerate(problems, 1):
           print(f"{i:2d}. {problem}")
       print()

   print("💡 Tips:")
   print("   • Copy and paste any question into the math solver")
   print("   • All visualizations and reports will be saved automatically")
   print("\n🚀 Start the solver with: python math_solver.py")


if __name__ == "__main__":
   print_demo_problems()

Dit demoscipt biedt:

  • Gecategoriseerde vragen van beginner tot gevorderd
  • Willekeurige vragenselectie voor testen
  • Gebruiksuitleg voor nieuwe gebruikers

Stap 10: Run en test de applicatie

Laten we nu onze complete applicatie testen! Run de math solver:

python math_solver.py

Probeer wat voorbeeldvragen:

  1. Basiscorrectie: “What is 15% of 240?”
  2. Algebra: “Solve for x: 3x + 7 = 22”
  3. Visualisatie: “Graph y = x² — 4x + 3 and find its vertex”
  4. Geavanceerde wiskunde: “Find the derivative of sin(x) * e^x and plot both functions”

Elke vraag zal:

  • Realtime streamingoutput tonen terwijl Claude werkt
  • Eventuele benodigde visualisaties genereren
  • Een uitgebreid markdownrapport opslaan
  • Plotbestanden downloaden naar je afbeeldingenmap

Je kunt ook het demovragenscript uitvoeren om alle voorbeelden te zien:

python demo_problems.py

Wat we hebben gebouwd met Claude Sonnet 4

Onze wiskunde‑oplosser demonstreert meerdere krachtige features van Claude 4 en de nieuwe API‑mogelijkheden:

  • Code‑executie: Claude kan Pythoncode schrijven en uitvoeren om wiskundige problemen op te lossen, op oplossingen te itereren en complexe berekeningen af te handelen.
  • Bestandscreatie en ‑beheer: De applicatie handelt bestandscreatie, download en organisatie automatisch af met de Files API.
  • Streaminginteractie: Realtime feedback maakt de ervaring responsief en aantrekkelijk.
  • Uitgebreide documentatie: Elke oplossing wordt bewaard in gedetailleerde markdownrapporten met ingesloten code en visualisaties.
  • Gebruiksvriendelijke interface: De terminalinterface is simpel maar effectief voor wiskundeoplossingen.

Dit project laat zien hoe je Claude 4’s nieuwe capaciteiten kunt combineren om geavanceerde applicaties te maken die verder gaan dan simpele chatinteracties. De code‑executietool, gecombineerd met goede bestandsafhandeling en streaming, vormt een krachtig platform voor wiskundige exploratie en analyse.

Je kunt ook leren vergelijkbare agents te bouwen op andere platformen met de cursus Developing AI Systems with the OpenAI API.

Conclusie en vervolgstappen

Het bouwen van deze wiskunde‑oplosser laat zien hoe Claude 4’s nieuwe mogelijkheden transformeren wat mogelijk is met AI‑applicaties.

Onze applicatie behandelt alles van basisberekeningen tot complexe wiskundige visualisaties en laat zien hoe deze API‑features samenwerken voor uitstekende gebruikerservaringen. Vooral de code‑executietool springt eruit als gamechanger: Claude kan itereren op oplossingen en visuele outputs genereren die voorheen aparte tools en complexe integraties vereisten.

Vanaf hier kun je deze wiskunde‑oplosser uitbreiden met webinterfaces, integreren met externe databronnen via MCP’s, of vergelijkbare patronen toepassen om domeinspecifieke assistenten te bouwen voor andere vakgebieden, zoals data‑analyse, wetenschappelijk rekenen of educatieve tools.

FAQs

Wat maakt Claude 4 anders dan eerdere versies?

Claude 4 introduceert native code‑executie, uitgebreid redeneren met toolgebruik, parallelle toolexecutie, verbeterde geheugencapaciteiten en ondersteuning voor meerdere uren continue taakuitvoering. Deze features maken het model bijzonder sterk in software‑engineeringtaken.

Kan Claude 4 echt Pythoncode uitvoeren tijdens gesprekken?

Ja, Claude 4 kan Pythoncode uitvoeren in een beveiligde sandboxomgeving met de nieuwe code‑executietool. Het kan berekeningen doen, visualisaties met matplotlib genereren en itereren op oplossingen op basis van uitvoerresultaten.

Wat zijn de beperkingen van de code‑executieomgeving van Claude?

De sandbox heeft geen internettoegang, beperkte rekenmiddelen en geen toegang tot je lokale bestandssysteem. Populaire libraries zoals numpy, pandas en matplotlib zijn vooraf geïnstalleerd, maar je kunt geen extra packages installeren.

Hoe werkt de nieuwe Files API samen met code‑executie?

Met de Files API kun je documenten één keer uploaden en ze in meerdere conversaties gebruiken. Wanneer Claude tijdens code‑executie bestanden aanmaakt (zoals plots), kun je hun file‑ID’s extraheren en ze lokaal downloaden via de API.

Heb ik speciale API‑toegang nodig voor de code‑executiefeatures van Claude 4?

Je moet de beta‑header "anthropic-beta": "code-execution-2025-05-22" opnemen in je API‑requests en het model claude-sonnet-4-20250514 gebruiken. De code‑executietool wordt opgegeven als "code_execution_20250522" in je tools‑array.


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

Ik ben een contentmaker op het gebied van data science met meer dan 2 jaar ervaring en een van de grootste achterbannen op Medium. Ik schrijf graag uitgebreide artikelen over AI en ML met een vleugje sarcastische stijl, want je moet toch íets doen om ze wat minder saai te maken. Ik heb meer dan 130 artikelen en een DataCamp-cursus gemaakt, en er is nog een nieuwe in de maak. Mijn content is door meer dan 5 miljoen paar ogen gezien, van wie 20k volgers werden op zowel Medium als LinkedIn. 

Onderwerpen
Kunstmatige intelligentie
Python

Leer meer over AI met deze cursussen!

{count, plural, one {Cursus} other {Cursussen}}

Artificial Intelligence begrijpen

{hours} uur
428K
Leer de basisconcepten van kunstmatige intelligentie, zoals machine learning, deep learning, NLP, generatieve AI en meer.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

{count, plural, one {blog} other {blogs}}

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken