Saltar al contenido principal

Soneto 4 de Claude: Guía práctica para programadores

Explora las funciones para programadores de Claude Sonnet 4 -ejecución de código, API de archivos y uso de herramientas- construyendo un agente de resolución matemática basado en Python.
Actualizado 26 may 2025  · 11 min de lectura

Con el lanzamiento de Claude Sonnet 4, los programadores tienen ahora acceso a nuevas y potentes funciones, como la ejecución de código nativo, una API de Archivos flexible y el uso de herramientas dinámicas. Estas funciones abren interesantes posibilidades para crear aplicaciones basadas en IA que vayan más allá de las simples interacciones de texto.

En este tutorial, te guiaré a través de estas nuevas funciones construyendo un agente basado en Python que pueda resolver problemas matemáticos avanzados directamente desde tu terminal. Aprenderás a utilizar ta recién introducida herramienta de ejecución de código nativo y la API de archivos.

Al final, tendrás un agente que funcionará con Claude Sonnet 4 para analizar problemas, escribir y ejecutar código Python y mostrar imágenes como las que se muestran a continuación.

Gráficos de muestra generados por la herramienta de ejecución de código nativo de Claude 4 Sonnet

Echa un vistazo al repositorio GitHub de este proyecto para vertodo el código para construir la aplicación.

Si estás empezando a construir con LLMs como Claude, esta hoja de ruta para programadores de IA describelas herramientas, habilidades e itinerarios de aprendizaje esenciales para empezar.

Novedades de la API Antrópica

Antes de entrar en el tutorial, veamos todas las nuevas funciones recientemente publicadas y disponibles a través de la API Antrópica. Si ya los conoces, puedes saltártelos.

Creo que todo el anuncio de Claude 4 puederesumirse en esta imagen:

Una imagen que muestra a los modelos Claude 4 a la cabeza en SWE-bench Verified, una prueba de rendimiento en tareas reales de ingeniería de software.

Los modelos Claude 4 (Opus y Sonnet 4) superan a la competencia en tareas verificadas de ingeniería de software por un margen significativo. Anthropic consiguió esta hazaña introduciendo algunos cambios importantes en el comportamiento de los modelos:

  1. Tiempos de ejecución largos: Ambos modelos soportan varias horas de ejecución continua de tareas para resolver problemas con miles de pasos.
  2. Pensamiento ampliado con uso de herramientas: Ambos modelos pueden ahora utilizar herramientas como la búsqueda en Internet durante el pensamiento extendido, lo que permite a Claude alternar entre el razonamiento y el uso de herramientas para mejorar las respuestas.
  3. Ejecución paralela de herramientas: Ahora los modelos pueden utilizar varias herramientas simultáneamente, en lugar de secuencialmente.
  4. Instrucción más precisa siguiendo: La direccionabilidad mejorada proporciona a los usuarios un mayor control sobre las implementaciones y sobre cómo responde Claude a las instrucciones.
  5. Capacidades de memoria mejoradas: Cuando se les da acceso a archivos locales, los modelos pueden extraer y guardar hechos clave para mantener la continuidad y construir conocimiento tácito a lo largo del tiempo.
  6. Comportamiento reducido del acceso directo: En comparación con las versiones anteriores, ambos modelos son un 65% menos propensos a utilizar atajos o lagunas para completar tareas (para más detalles, consulta el post completo del anuncio).

Además, como parte del anuncio de la familia de modelos Claude 4, Anthropic ha añadido cuatro nuevas funciones para que construyen agentes de IA: la herramienta de ejecución de código, la API de archivos, el conector MCP y el almacenamiento en caché de avisos ampliado. Estas herramientas cambian la forma en que los programadores pueden crear aplicaciones de IA.

Herramienta de ejecución de código: Ejecuta código Python de forma segura

La herramienta de ejecución de código permite a Claude ejecutar código Python en un entorno sandbox seguro. En lugar de limitarse a escribir sugerencias de código, Claude puede ahora ejecutar código, analizar los resultados e iterar sobre las soluciones.

Para utilizar la herramienta de ejecución de código, añádela a tu arreglo tools e incluye la cabecera beta necesaria:

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"
   }]
)

Cuando Claude ejecuta código, la respuesta contiene tanto el código generado como los resultados de su ejecución. He aquí cómo analizar los distintos componentes:

# 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']}")

Limitaciones del Sandbox: El entorno de ejecución del código tiene varias restricciones de seguridad incorporadas. Claude se ejecuta en un contenedor aislado sin acceso a Internet, con recursos informáticos limitados (1 GB de RAM, 5 GB de espacio en disco y 1 CPU), y no puede acceder a tu sistema de archivos local. El entorno viene preinstalado con bibliotecas populares como numpy, pandas, matplotlib, y scipy, pero no puedes instalar paquetes adicionales durante la ejecución.

Archivos API: Contexto de archivo persistente para tareas complejas

La API de archivos permite a subir documentos una vez y hacer referencia a ellos en varias conversaciones. Esto elimina la necesidad de incluir grandes documentos en cada solicitud de API.

Primero, sube tu archivo a los servidores de 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

Una vez subido, haz referencia al archivo en tus llamadas a la API utilizando el tipo de contenido container_upload:

# 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"
   }]
)

Cuando Claude crea archivos durante la ejecución del código (como gráficos o datos procesados), puedes extraerlos y descargarlos:

# 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")

Conector MCP: Conecta a Claude a cualquier flujo de trabajo

El conector MCP lleva la compatibilidad con el Protocolo de Contexto de Modelo directamente a la API. Los MCP permiten a Claude conectarse a servicios externos como bases de datos, API y herramientas de productividad sin código de integración personalizado.

Antes, para conectarse a los servidores MCP era necesario crear una infraestructura de cliente. Ahora, sólo tienes que proporcionar la URL de un servidor MCP remoto en tu solicitud de API, y Claude descubrirá automáticamente las herramientas disponibles, gestionará las conexiones y se encargará de la autenticación.

Esto abre el acceso a un creciente ecosistema de servidores MCP de empresas como Zapier y Asana, permitiéndote crear agentes que puedan leer tu calendario, actualizar herramientas de gestión de proyectos o integrarse con cientos de otros servicios.

Introducción al Soneto Claude 4: Visión general y configuración del proyecto

Ahora que ya conocemos las nuevas funciones de la API, vamos a construir nuestro solucionador interactivo de problemas matemáticos. Combinará las capacidades de ejecución de código de Claude con el manejo de archivos para crear un asistente matemático completo.

Nuestra aplicación aceptará preguntas matemáticas en lenguaje natural, ejecutará código Python para resolverlas, generará visualizaciones y guardará informes completos.

Para un enfoque estructurado de la creación de proyectos como éste, consulta el tema Desarrollo de aplicaciones de IA.

> Nota: Dado que dividiremos los bloques de código largos con explicaciones, es posible que la sangría del código no sea del todo exacta en los fragmentos. Por este motivo, te recomendamos que abras el repositorio de GitHub de este proyecto en una pestaña aparte mientras sigues el proceso.

Paso 0: Configura el entorno de tu proyecto Claude Sonnet 4

Antes de escribir ningún código, vamos a configurar nuestro entorno de desarrollo y las dependencias.

Crea un nuevo directorio para tu proyecto y configura los archivos necesarios:

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

Crea un archivo requirements.txt con las dependencias necesarias:

anthropic>=0.42.0

Instala las dependencias:

pip install -r requirements.txt

Establece tu clave de la API de Anthropic como variable de entorno:

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

Paso 1: Diseña la estructura de la aplicación

Empecemos creando la estructura básica de nuestra clase MathSolver. Esta clase se encargará de toda la funcionalidad principal: Comunicación API, gestión de archivos e interacción con el usuario.

En primer lugar, vamos a establecer las importaciones y la estructura básica:

#!/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

Ahora vamos a definir la estructura de nuestra clase principal:

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

Por último, añadimos la gestión de la sesión y el punto de entrada:

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

Esta estructura nos proporciona una hoja de ruta clara: inicialización, resolución de problemas, manejo de archivos, generación de informes e interacción con el usuario. Cada método tiene una responsabilidad específica en nuestra cadena de resolución de problemas matemáticos.

Construir un solucionador matemático con Claude Sonnet 4 Ejecución del código

Ahora, vamos a implementar la funcionalidad básica utilizando la herramienta de ejecución de código de Claude y las respuestas en streaming.

Paso 2: Inicializar Claude con cabeceras API seguras

Implementemos el método __init__() para gestionar la configuración del cliente API y la creación del directorio.

En primer lugar, nos encargamos de la gestión de las claves API:

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"
           )

A continuación, configuramos el cliente Anthropic con las cabeceras beta necesarias:

# 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"
       },
   )

Por último, creamos la estructura de directorios de salida:

# 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}")

Esta inicialización hace tres cosas importantes:

  1. Gestión de claves API: Comprueba primero la clave en las variables de entorno y luego recurre a un parámetro.
  2. Configuración del cliente: Crea un cliente Anthropic con cabeceras beta para la ejecución de código y archivos API.
  3. Estructura del directorio: Crea carpetas organizadas para almacenar imágenes e informes.

Paso 3: Escribe la función principal del solucionador

El método solve_problem() es el corazón de nuestra aplicación. Envía peticiones a Claude con soporte de streaming.

Empecemos por la firma de la función y la configuración inicial:

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}")

Gestionamos distintos tipos de eventos de streaming:

	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}")

Por último, devolvemos el resultado o gestionamos los errores:

	# 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

Esta función demuestra varios conceptos importantes:

  • Compatible con streaming: Utilizamos client.messages.stream() en lugar de client.messages.create() para obtener información en tiempo real mientras Claude resuelve el problema.
  • Gestión de eventos: La API de streaming envía diferentes tipos de eventos:
    • content_block_start: Cuando Claude empieza a escribir un texto o a utilizar una herramienta
    • content_block_delta: A medida que se generan contenidos
    • content_block_stop: Cuando termina un bloque de contenido
    • message_delta: Cuando el mensaje esté completo
  • Especificación de la herramienta: Incluimos la herramienta de ejecución de código en el arreglo tools con el tipo exacto "code_execution_20250522".
  • Estimulación estructurada: Nuestro aviso indica claramente a Claude que utilice la ejecución de código y guarde las visualizaciones.

Paso 4: Resuelve problemas matemáticos con la ejecución de código en streaming

Cuando Claude crea archivos durante la ejecución del código (como los gráficos de matplotlib), tenemos que extraer sus ID de archivo y descargarlos localmente.

El método de extracción de archivos navega por la estructura de respuesta:

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", [])

Luego buscamos los ID de archivo en el contenido:

  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

El proceso de descarga recupera los archivos y los guarda localmente:

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))

Hacemos un seguimiento de los archivos descargados y gestionamos los errores:

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
  • Lógica de extracción de archivos: El método extract_files_from_response() navega por la estructura de la respuesta para encontrar los identificadores de los archivos. Los resultados de la ejecución del código se anidan en un formato específico en el que los archivos aparecen en el arreglo content.
  • Proceso de descarga de archivos: El método download_files():
    • Obtiene los metadatos de cada archivo (incluido el nombre original del archivo)
    • Descarga el contenido del archivo utilizando la API de archivos
    • Guarda los archivos en nuestra estructura de directorios organizada
    • Devuelve una lista de rutas de archivos locales para su uso posterior

Desarrollar aplicaciones de IA

Aprende a crear aplicaciones de IA utilizando la API OpenAI.
Empieza a hacer Upskilling gratis

Extracción de resultados del Soneto Claude 4: Código, visuales e informes

Ahora, reutilicemos y auditemos el código y los resultados generados por Claude.

Paso 5: Descargar resultados visuales de las respuestas de Claude

Para nuestros informes markdown, queremos incluir el código Python real que Claude ejecutó:

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

Este método busca los elementos de server_tool_use con el nombre "code_execution" y extrae el código Python del campo input. Esto nos da el código real que Claude escribió y ejecutó.

Paso 6: Extraer el código de Claude para reutilizarlo y auditarlo

Nuestro generador de informes crea una documentación exhaustiva de cada solución.

Primero, extraemos el contenido y configuramos la estructura del informe:

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)

A continuación, generamos un nombre de archivo seguro con una marca de tiempo:

# 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

Construimos el contenido markdown con un encabezamiento y un enunciado del problema:

# 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"

Incluye las visualizaciones generadas:

# 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)

Este generador de informes crea un documento Markdown estructurado que contiene:

  • Planteamiento del problema y metadatos
  • Explicación de la solución a partir de las respuestas del texto de Claude
  • Bloques de código que muestran el código Python real ejecutado
  • Visualizaciones incrustadas utilizando rutas relativas
  • Informa de los metadatos para seguimiento y referencia

La generación de nombres de archivo crea nombres de archivo seguros, con fecha y hora, que no entrarán en conflicto con los archivos existentes.

Ejecutar el Solucionador Matemático Interactivamente

A continuación, centrémonos en el bucle de interacción con el usuario, las herramientas de demostración y las pruebas.

Paso 7: Gestionar la sesión interactiva

El bucle de la sesión interactiva gestiona las entradas del usuario y coordina todos nuestros componentes.

Comenzamos con la configuración de la sesión y el mensaje de bienvenida:

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

El bucle principal gestiona la entrada del usuario y las condiciones de salida:

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

Para cada pregunta válida, procesamos el flujo de trabajo completo:

# 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)

Terminamos con la generación de informes y los comentarios de los usuarios:

# 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.")

Este bucle muestra un flujo de trabajo completo:

  1. Interacción con el usuario: Pregunta y gestiona los comandos de salida
  2. Resolución de problemas: Llama a nuestro método solve_problem()
  3. Procesamiento de archivos: Extrae y descarga los archivos generados
  4. Generación de informes: Crear un informe completo de rebajas
  5. Tratamiento de errores: Maneja con elegancia las interrupciones y los errores

Paso 8: Escribe el punto de entrada de la aplicación

Por último, necesitamos una función main() para inicializar e iniciar nuestra aplicación:

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())

Este sencillo punto de entrada gestiona los errores de inicialización (como la falta de claves API) y proporciona útiles mensajes de error.

Paso 9: Añadir un generador de problemas de demostración

Para ayudar a los usuarios a empezar, vamos a crear un script independiente con problemas de ejemplo. Crea demo_problems.py.

En primer lugar, definimos nuestras categorías de problemas:

# 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",
   ],

Añade conjuntos de problemas intermedios y avanzados:

"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",
   ],
}

Crea funciones de ayuda para la selección aleatoria y la visualización:

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)

Añade una función para mostrar todos los problemas disponibles:

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()

Este script de demostración proporciona:

  • Problemas categorizados de nivel principiante a avanzado
  • Selección aleatoria de problemas para la prueba
  • Guía de uso para nuevos usuarios

Paso 10: Ejecuta y prueba la aplicación

¡Ahora vamos a probar nuestra aplicación completa! Ejecuta el solucionador matemático:

python math_solver.py

Prueba con algunas preguntas de ejemplo:

  1. Cálculo básico: "¿Qué es el 15% de 240?"
  2. Álgebra: "Resuelve x: 3x + 7 = 22”
  3. Visualización: "Grafica y = x² - 4x + 3 y encuentra su vértice"
  4. Matemáticas avanzadas: "Halla la derivada de sen(x) * e^x y grafica ambas funciones"

Cada pregunta:

  • Muestra la salida de streaming en tiempo real mientras Claude trabaja
  • Genera las visualizaciones necesarias
  • Guardar un informe completo de rebajas
  • Descargar archivos de gráficos a tu directorio de imágenes

También puedes ejecutar el script de demostración de problemas para ver todos los ejemplos disponibles:

python demo_problems.py

Lo que hemos construido con Claude Soneto 4

Nuestro solucionador de problemas matemáticos demuestra varias potentes funciones de Claude 4 y las nuevas capacidades de la API:

  • Ejecución del código: Claude puede escribir y ejecutar código Python para resolver problemas matemáticos, iterar sobre soluciones y manejar cálculos complejos.
  • Generación y gestión de ficheros: La aplicación gestiona automáticamente la creación, descarga y organización de archivos utilizando la API de Archivos.
  • Interacción de streaming: Los comentarios en tiempo real hacen que la experiencia sea receptiva y atractiva.
  • Documentación completa: Cada solución se conserva en informes markdown detallados con código incrustado y visualizaciones.
  • Interfaz fácil de usar: La interfaz basada en el terminal es sencilla pero eficaz para la resolución de problemas matemáticos.

Este proyecto muestra cómo se pueden combinar las nuevas capacidades de Claude 4 para crear aplicaciones sofisticadas más allá de las simples interacciones de chat. La herramienta de ejecución de código, combinada con un manejo adecuado de archivos y streaming, crea una potente plataforma para la exploración y el análisis matemático.

También puedes aprender a construir agentes similares utilizando otras plataformas siguiendo el curso sobre Desarrollo de sistemas de IA con la API OpenAI.

Conclusión y próximos pasos

La construcción de este solucionador de problemas matemáticos ha demostrado cómo las nuevas capacidades de Claude 4 transforman lo que es posible con las aplicaciones de IA.

Nuestra aplicación lo maneja todo, desde cálculos básicos hasta complejas visualizaciones matemáticas, mostrando cómo estas funciones de la API trabajan juntas para crear grandes experiencias de usuario. La herramienta de ejecución de código destaca especialmente como un cambio de juego, ya que permite a Claude iterar sobre soluciones y generar resultados visuales que en el pasado habrían requerido herramientas separadas y complejas integraciones.

A partir de aquí, puedes ampliar este solucionador matemático con interfaces web, integrarlo con fuentes de datos externas mediante MCP, o aplicar patrones similares para construir asistentes específicos de dominio para otros campos, como el análisis de datos, la informática científica o las herramientas educativas.

Desarrollar aplicaciones de IA

Aprende a crear aplicaciones de IA utilizando la API OpenAI.

Preguntas frecuentes

¿Qué diferencia a Claude 4 de las versiones anteriores?

Claude 4 introduce la ejecución de código nativo, el pensamiento ampliado con el uso de herramientas, la ejecución paralela de herramientas, capacidades de memoria mejoradas y soporte para varias horas de ejecución continua de tareas. Estas características lo hacen especialmente fuerte en tareas de ingeniería de software.

¿Puede Claude 4 ejecutar código Python durante las conversaciones?

Sí, Claude 4 puede ejecutar código Python en un entorno sandbox seguro utilizando la nueva herramienta de ejecución de código. Puede ejecutar cálculos, generar visualizaciones con matplotlib e iterar sobre soluciones basadas en los resultados de la ejecución.

¿Cuáles son las limitaciones del entorno de ejecución de código de Claude?

La caja de arena no tiene acceso a Internet, dispone de recursos informáticos limitados y no puede acceder a tu sistema de archivos local. Viene con bibliotecas populares como numpy, pandas y matplotlib preinstaladas, pero no puedes instalar paquetes adicionales.

¿Cómo funciona la nueva API de Archivos con la ejecución de código?

La API de Archivos te permite subir documentos una vez y hacer referencia a ellos en todas las conversaciones. Cuando Claude crea archivos durante la ejecución del código (como los gráficos), puedes extraer sus ID de archivo y descargarlos localmente utilizando la API.

¿Necesito un acceso especial a la API para utilizar las funciones de ejecución de código de Claude 4?

Tienes que incluir la cabecera beta "anthropic-beta": "code-execution-2025-05-22" en tus peticiones a la API y utilizar el modelo claude-sonnet-4-20250514. La herramienta de ejecución de código se especifica como "code_execution_20250522" en tu arreglo tools.


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

Soy un creador de contenidos de ciencia de datos con más de 2 años de experiencia y uno de los mayores seguidores en Medium. Me gusta escribir artículos detallados sobre IA y ML con un estilo un poco sarcastıc, porque hay que hacer algo para que sean un poco menos aburridos. He publicado más de 130 artículos y un curso DataCamp, y estoy preparando otro. Mi contenido ha sido visto por más de 5 millones de ojos, 20.000 de los cuales se convirtieron en seguidores tanto en Medium como en LinkedIn. 

Temas

Aprende más sobre IA con estos cursos

Programa

Developing AI Applications

0 min
Learn to create AI-powered applications with the latest AI developer tools, including the OpenAI API, Hugging Face, and LangChain.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado
An avian AI exits its cage

blog

12 alternativas de código abierto a GPT-4

Alternativas de código abierto a GPT-4 que pueden ofrecer un rendimiento similar y requieren menos recursos informáticos para funcionar. Estos proyectos vienen con instrucciones, fuentes de código, pesos del modelo, conjuntos de datos e IU de chatbot.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Primeros pasos con Claude 3 y la API de Claude 3

Conozca los modelos Claude 3, las pruebas de rendimiento detalladas y cómo acceder a ellas. Además, descubra la nueva API Python de Claude 3 para generar texto, acceder a funciones de visión y streaming.
Abid Ali Awan's photo

Abid Ali Awan

Tutorial

Tutorial de Generación de nubes de palabras en Python

Aprende a realizar Análisis exploratorios de datos para el Procesamiento del lenguaje natural utilizando WordCloud en Python.
Duong Vu's photo

Duong Vu

11 min

Tutorial

Guía para principiantes de la API de OpenAI: Tutorial práctico y prácticas recomendadas

Este tutorial te presenta la API de OpenAI, sus casos de uso, un enfoque práctico para utilizar la API y todas las prácticas recomendadas que debes seguir.
Arunn Thevapalan's photo

Arunn Thevapalan

13 min

Tutorial

Tutorial de DeepSeek-Coder-V2: Ejemplos, instalación, puntos de referencia

DeepSeek-Coder-V2 es un modelo de lenguaje de código de código abierto que rivaliza con el rendimiento de GPT-4, Gemini 1.5 Pro, Claude 3 Opus, Llama 3 70B o Codestral.
Dimitri Didmanidze's photo

Dimitri Didmanidze

8 min

Tutorial

Tutorial del Optimizador Adam: Intuición e implementación en Python

Comprender y aplicar el optimizador Adam en Python. Aprende la intuición, las matemáticas y las aplicaciones prácticas del aprendizaje automático con PyTorch
Bex Tuychiev's photo

Bex Tuychiev

14 min

Ver másVer más