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"\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:
- Interacción con el usuario: Pregunta y gestiona los comandos de salida
- Resolución de problemas: Llama a nuestro método
solve_problem() - Procesamiento de archivos: Extrae y descarga los archivos generados
- Generación de informes: Crear un informe completo de rebajas
- 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:
- Cálculo básico: "¿Qué es el 15% de 240?"
- Álgebra: "Resuelve x: 3x + 7 = 22”
- Visualización: "Grafica y = x² - 4x + 3 y encuentra su vértice"
- 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.
- Si eres desarrollador y quieres certificar tus conocimientos de ingeniería de IA, considerael programa de Ingeniero de IA Asociado para programadores, que hace hincapié en implementaciones a nivel de producción como ésta.
- Los científicos de datos interesados en hacer operativo el LLM pueden seguir el programa de Ingeniero de IA Asociado para científicos de datos, que tiende un puente entre el análisis y el despliegue de la IA.
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.


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.
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:
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:
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
toolse incluye la cabecera beta necesaria: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:
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, yscipy, 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:
Una vez subido, haz referencia al archivo en tus llamadas a la API utilizando el tipo de contenido
container_upload:Cuando Claude crea archivos durante la ejecución del código (como gráficos o datos procesados), puedes extraerlos y descargarlos:
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:
Crea un archivo
requirements.txtcon las dependencias necesarias:Instala las dependencias:
Establece tu clave de la API de Anthropic como variable de entorno:
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:
Ahora vamos a definir la estructura de nuestra clase principal:
Por último, añadimos la gestión de la sesión y el punto de entrada:
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:
A continuación, configuramos el cliente Anthropic con las cabeceras beta necesarias:
Por último, creamos la estructura de directorios de salida:
Esta inicialización hace tres cosas importantes:
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:
Gestionamos distintos tipos de eventos de streaming:
Por último, devolvemos el resultado o gestionamos los errores:
Esta función demuestra varios conceptos importantes:
client.messages.stream()en lugar declient.messages.create()para obtener información en tiempo real mientras Claude resuelve el problema.content_block_start: Cuando Claude empieza a escribir un texto o a utilizar una herramientacontent_block_delta: A medida que se generan contenidoscontent_block_stop: Cuando termina un bloque de contenidomessage_delta: Cuando el mensaje esté completotoolscon el tipo exacto"code_execution_20250522".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:
Luego buscamos los ID de archivo en el contenido:
El proceso de descarga recupera los archivos y los guarda localmente:
Hacemos un seguimiento de los archivos descargados y gestionamos los errores:
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 arreglocontent.download_files():