Pular para o conteúdo principal

Soneto de Claude 4: Um guia prático para desenvolvedores

Explore os recursos de desenvolvedor do Claude Sonnet 4 - execução de código, API de arquivos e uso de ferramentas - criando um agente de resolução de problemas matemáticos baseado em Python.
Atualizado 26 de mai. de 2025  · 11 min lido

Com o lançamento do Claude Sonnet 4, os desenvolvedores agora têm acesso a novos recursos avançados, incluindo execução de código nativo, uma API de arquivos flexível e uso dinâmico de ferramentas. Esses recursos abrem possibilidades interessantes para a criação de aplicativos com tecnologia de IA que vão além das simples interações de texto.

Neste tutorial, mostrarei a você esses novos recursos, criando um agente baseado em Python que pode resolver problemas matemáticos avançados diretamente do seu terminal. Você aprenderá a usar a recém-introduzida ferramenta de execução de código nativo e a API de arquivos.

No final, você terá um agente em funcionamento com a tecnologia do Claude Sonnet 4 para analisar problemas, escrever e executar código Python e renderizar imagens como as apresentadas abaixo.

Exemplos de gráficos gerados pela ferramenta de execução de código nativo do Claude 4 Sonnet

Confira o repositório do GitHub para este projeto e vejatodo o código para criar o aplicativo.

Se você está apenas começando sua jornada de desenvolvimento com LLMs como o Claude, este roteiro para desenvolvedores de IA descreveas ferramentas, as habilidades e as trilhas de aprendizagem essenciais para começar.

O que há de novo na API antrópica

Antes de entrarmos no tutorial, vamos dar uma olhada em todos os novos recursos lançados recentemente e disponíveis na API do Anthropic. Sinta-se à vontade para pular a página se você já estiver ciente delas.

Acho que todo o anúncio do Claude 4 pode serresumido nesta única imagem:

Uma imagem que mostra a liderança dos modelos Claude 4 no SWE-bench Verified, uma referência de desempenho em tarefas reais de engenharia de software.

Os modelos Claude 4 (Opus e Sonnet 4) venceram a concorrência em tarefas de engenharia de software verificadas por uma margem significativa. O Anthropic conseguiu essa façanha introduzindo algumas mudanças importantes na forma como os modelos se comportam:

  1. Tempos de execução longos: Ambos os modelos suportam várias horas de execução contínua de tarefas para resolver problemas com milhares de etapas.
  2. Pensamento ampliado com o uso de ferramentas: Ambos os modelos agora podem usar ferramentas como a pesquisa na Web durante o raciocínio estendido, permitindo que o Claude alterne entre o raciocínio e o uso de ferramentas para melhorar as respostas.
  3. Execução de ferramentas paralelas: Os modelos agora podem usar várias ferramentas simultaneamente, em vez de sequencialmente.
  4. Instruções mais precisas após: A capacidade de direção aprimorada oferece aos usuários maior controle sobre as implementações e sobre como o Claude responde às instruções.
  5. Recursos de memória aprimorados: Quando recebem acesso a arquivos locais, os modelos podem extrair e salvar fatos importantes para manter a continuidade e criar conhecimento tácito ao longo do tempo.
  6. Redução do comportamento do atalho: Em comparação com as versões anteriores, ambos os modelos têm 65% menos probabilidade de usar atalhos ou brechas para concluir tarefas (consulte a publicação completa do anúncio para obter mais detalhes).

Além disso, como parte do anúncio da família de modelos Claude 4, a Anthropic adicionou quatro novos recursos para a criação de agentes de IA no site: a ferramenta de execução de código, a API Files, o conector MCP e o cache de prompt estendido. Essas ferramentas mudam a forma como os desenvolvedores podem criar aplicativos de IA.

Ferramenta de execução de código: Execute o código Python com segurança

A ferramenta de execução de código permite que o Claude execute o código Python em um ambiente seguro de sandbox. Em vez de apenas escrever sugestões de código, o Claude agora pode executar o código, analisar os resultados e iterar nas soluções.

Para usar a ferramenta de execução de código, adicione-a à sua matriz tools e inclua o cabeçalho beta necessário:

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

Quando o Claude executa o código, a resposta contém o código gerado e os resultados da execução. Veja como você pode analisar os diferentes 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']}")

Limitações do sandbox: O ambiente de execução de código tem várias restrições de segurança incorporadas. O Claude é executado em um contêiner isolado, sem acesso à Internet, com recursos computacionais limitados (1 GB de RAM, 5 GB de espaço em disco e 1 CPU) e não pode acessar o sistema de arquivos local. O ambiente vem pré-instalado com bibliotecas populares como numpy, pandas, matplotlib e scipy, mas você não pode instalar pacotes adicionais durante a execução.

Arquivos API: Contexto de arquivo persistente para tarefas complexas

A API Files permite que você carregue documentos uma vez e faça referência a eles em várias conversas. Isso elimina a necessidade de incluir documentos grandes em cada solicitação de API.

Primeiro, carregue seu arquivo nos servidores do 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

Após o upload, faça referência ao arquivo em suas chamadas de API usando o tipo de conteúdo 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"
   }]
)

Quando o Claude cria arquivos durante a execução do código (como gráficos ou dados processados), você pode extraí-los e baixá-los:

# 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: Conecte o Claude a qualquer fluxo de trabalho

O conector MCP oferece suporte ao protocolo de contexto de modelo diretamente para a API. Os MCPs permitem que o Claude se conecte a serviços externos, como bancos de dados, APIs e ferramentas de produtividade, sem código de integração personalizado.

Anteriormente, a conexão com os servidores MCP exigia a criação de uma infraestrutura de cliente. Agora, você pode simplesmente fornecer um URL de servidor MCP remoto na sua solicitação de API, e o Claude descobre automaticamente as ferramentas disponíveis, gerencia as conexões e lida com a autenticação.

Isso abre o acesso a um ecossistema crescente de servidores MCP de empresas como Zapier e Asana, permitindo que você crie agentes que possam ler seu calendário, atualizar ferramentas de gerenciamento de projetos ou integrar-se a centenas de outros serviços.

Primeiros passos com Claude Sonnet 4: Visão geral e configuração do projeto

Agora que entendemos os novos recursos da API, vamos criar nosso solucionador de problemas matemáticos interativo. Ele combinará os recursos de execução de código do Claude com o manuseio de arquivos para criar um assistente matemático completo.

Nosso aplicativo aceitará perguntas matemáticas em linguagem natural, executará código Python para resolvê-las, gerará visualizações e salvará relatórios abrangentes.

Para obter uma abordagem estruturada para criar projetos como esse, confira o programa Developing AI Applications (Desenvolvendo aplicativos de IA).

> Observação: Como dividiremos blocos de código longos com explicações, a indentação do código pode não ser totalmente precisa nos trechos. Por esse motivo, recomendamos que você abra o repositório do GitHub para esse projeto em uma guia separada enquanto o acompanha.

Etapa 0: Configure o ambiente do projeto Claude Sonnet 4

Antes de escrever qualquer código, vamos configurar nosso ambiente de desenvolvimento e dependências.

Crie um novo diretório para o seu projeto e configure os arquivos necessários:

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

Crie um arquivo requirements.txt com as dependências necessárias:

anthropic>=0.42.0

Instale as dependências:

pip install -r requirements.txt

Defina sua chave de API do Anthropic como uma variável de ambiente:

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

Etapa 1: Projetar a estrutura do aplicativo

Vamos começar criando a estrutura básica da nossa classe MathSolver. Essa classe tratará de toda a funcionalidade principal: Comunicação de API, gerenciamento de arquivos e interação com o usuário.

Primeiro, vamos configurar as importações e a estrutura 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

Agora vamos definir nossa estrutura de classe 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 fim, adicionamos o gerenciamento de sessão e o ponto 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

Essa estrutura nos dá um roteiro claro: inicialização, solução de problemas, manipulação de arquivos, geração de relatórios e interação com o usuário. Cada método tem uma responsabilidade específica em nosso pipeline de resolução de problemas matemáticos.

Criando um solucionador matemático com a execução de código do Claude Sonnet 4

Agora, vamos implementar a funcionalidade principal usando a ferramenta de execução de código do Claude e respostas de streaming.

Etapa 2: Inicializar o Claude com cabeçalhos de API seguros

Vamos implementar o método __init__() para lidar com a configuração do cliente da API e a criação do diretório.

Primeiro, lidamos com o gerenciamento de chaves de 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"
           )

Em seguida, configuramos o cliente Anthropic com os cabeçalhos beta necessários:

# 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 fim, criamos a estrutura do diretório de saída:

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

Essa inicialização faz três coisas importantes:

  1. Gerenciamento de chaves de API: Verifica primeiro a chave nas variáveis de ambiente e, em seguida, volta para um parâmetro.
  2. Configuração do cliente: Cria um cliente Anthropic com cabeçalhos beta para execução de código e API de arquivos.
  3. Estrutura do diretório: Cria pastas organizadas para armazenar imagens e relatórios.

Etapa 3: Escreva a função principal do solucionador

O método solve_problem() é o coração do nosso aplicativo. Ele envia solicitações ao Claude com suporte a streaming.

Vamos começar com a assinatura da função e a configuração 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}")

Lidamos com diferentes 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 fim, retornamos o resultado ou tratamos os erros:

	# 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

Essa função demonstra vários conceitos importantes:

  • Suporte a streaming: Usamos o site client.messages.stream() em vez do client.messages.create() para obter feedback em tempo real à medida que Claude resolve o problema.
  • Tratamento de eventos: A API de streaming envia diferentes tipos de eventos:
    • content_block_start: Quando Claude começa a escrever um texto ou a usar uma ferramenta
    • content_block_delta: Como o conteúdo está sendo gerado
    • content_block_stop: Quando um bloco de conteúdo é concluído
    • message_delta: Quando a mensagem inteira estiver concluída
  • Especificação da ferramenta: Incluímos a ferramenta de execução de código na matriz tools com o tipo exato "code_execution_20250522".
  • Solicitação estruturada: Nosso prompt instrui claramente o Claude a usar a execução de código e salvar todas as visualizações.

Etapa 4: Resolva problemas matemáticos com a execução de código em fluxo contínuo

Quando o Claude cria arquivos durante a execução do código (como os gráficos do matplotlib), precisamos extrair os IDs dos arquivos e baixá-los localmente.

O método de extração de arquivos navega pela estrutura de resposta:

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

Em seguida, procuramos IDs de arquivos no conteúdo:

  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

O processo de download recupera os arquivos e os salva 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))

Nós programamos os arquivos baixados e tratamos os erros:

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 extração de arquivos: O método extract_files_from_response() navega pela estrutura de resposta para localizar IDs de arquivos. Os resultados da execução do código são aninhados em um formato específico em que os arquivos aparecem na matriz content.
  • Processo de download de arquivos: O método download_files():
    • Obtém metadados para cada arquivo (incluindo o nome do arquivo original)
    • Faz o download do conteúdo do arquivo usando a API Files
    • Salva arquivos em nossa estrutura de diretórios organizada
    • Retorna uma lista de caminhos de arquivos locais para uso posterior

Desenvolver aplicativos de IA

Aprenda a criar aplicativos de IA usando a API OpenAI.
Comece a treinar gratuitamente

Extração de resultados do Soneto de Claude 4: Código, recursos visuais e relatórios

Agora, vamos reutilizar e auditar o código e os resultados gerados pelo Claude.

Etapa 5: Baixe os resultados visuais das respostas do Claude

Para nossos relatórios de markdown, queremos incluir o código Python real que o Claude executou:

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

Esse método procura os itens server_tool_use com o nome "code_execution" e extrai o código Python do campo input. Isso nos dá o código real que Claude escreveu e executou.

Etapa 6: Extraia o código do Claude para reutilização e auditoria

Nosso gerador de relatórios cria uma documentação abrangente de cada solução.

Primeiro, extraímos o conteúdo e configuramos a estrutura do relatório:

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)

Em seguida, geramos um nome de arquivo seguro com um registro de data e hora:

# 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

Criamos o conteúdo do markdown com um cabeçalho e uma declaração de 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"

Inclua todas as visualizações geradas:

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

Esse gerador de relatórios cria um documento markdown estruturado contendo:

  • Declaração do problema e metadados
  • Explicação da solução a partir das respostas do texto de Claude
  • Blocos de código que mostram o código Python real executado
  • Visualizações incorporadas usando caminhos relativos
  • Metadados de relatório para rastreamento e referência

A geração de nome de arquivo cria nomes de arquivo seguros, com registro de data e hora, que não entrarão em conflito com os arquivos existentes.

Executando o Math Solver de forma interativa

Em seguida, vamos nos concentrar no loop de interação com o usuário, nas ferramentas de demonstração e nos testes.

Etapa 7: Gerenciar a sessão interativa

O loop de sessão interativa lida com a entrada do usuário e coordena todos os nossos componentes.

Começamos com a configuração da sessão e a mensagem de boas-vindas:

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

O loop principal lida com a entrada do usuário e as condições de saída:

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 pergunta válida, processamos o fluxo de trabalho 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)

Concluímos com a geração de relatórios e feedback do usuário:

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

Esse loop demonstra um fluxo de trabalho completo:

  1. Interação com o usuário: Solicitar perguntas e lidar com comandos de saída
  2. Resolução de problemas: Chame nosso método solve_problem()
  3. Processamento de arquivos: Extraia e faça o download de todos os arquivos gerados
  4. Geração de relatórios: Criar um relatório abrangente de remarcação para baixo
  5. Tratamento de erros: Lidar graciosamente com interrupções e erros

Etapa 8: Escreva o ponto de entrada do aplicativo

Por fim, precisamos de uma função main() para inicializar e iniciar nosso aplicativo:

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

Esse ponto de entrada simples lida com erros de inicialização (como chaves de API ausentes) e fornece mensagens de erro úteis.

Etapa 9: Adicionar um gerador de problemas de demonstração

Para ajudar os usuários a começar, vamos criar um script separado com exemplos de problemas. Criar demo_problems.py.

Primeiro, definimos nossas categorias 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",
   ],

Adicione conjuntos de problemas intermediários e avançados:

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

Crie funções auxiliares para seleção e exibição aleatórias:

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)

Adicione uma função para exibir todos os problemas disponíveis:

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

Esse script de demonstração fornece:

  • Problemas categorizados dos níveis iniciante ao avançado
  • Seleção aleatória de problemas para teste
  • Orientação de uso Para novos usuários

Etapa 10: Execute e teste o aplicativo

Agora vamos testar nosso aplicativo completo! Execute o solucionador matemático:

python math_solver.py

Experimente alguns exemplos de perguntas:

  1. Cálculo básico: "O que é 15% de 240?"
  2. Algebra: "Resolva para x: 3x + 7 = 22”
  3. Visualização: "Faça o gráfico de y = x² - 4x + 3 e encontre seu vértice"
  4. Matemática avançada: "Encontre a derivada de sin(x) * e^x e faça o gráfico de ambas as funções"

Cada pergunta será:

  • Mostrar a saída de streaming em tempo real enquanto o Claude trabalha
  • Gerar as visualizações necessárias
  • Salvar um relatório abrangente de remarcação para baixo
  • Faça o download dos arquivos de plotagem para o diretório de imagens

Você também pode executar o script de problemas de demonstração para ver todos os exemplos disponíveis:

python demo_problems.py

O que construímos com Claude Sonnet 4

Nosso solucionador de problemas matemáticos demonstra vários recursos avançados do Claude 4 e os novos recursos da API:

  • Execução de código: O Claude pode escrever e executar código Python para resolver problemas matemáticos, iterar soluções e lidar com cálculos complexos.
  • Geração e gerenciamento de arquivos: O aplicativo lida automaticamente com a criação, o download e a organização de arquivos usando a API Files.
  • Interação de streaming: O feedback em tempo real faz com que a experiência pareça ágil e envolvente.
  • Documentação abrangente: Cada solução é preservada em relatórios detalhados de markdown com código incorporado e visualizações.
  • Interface amigável: A interface baseada em terminal é simples, mas eficaz para a solução de problemas matemáticos.

Este projeto mostra como os novos recursos do Claude 4 podem ser combinados para criar aplicativos sofisticados que vão além das simples interações de bate-papo. A ferramenta de execução de código, combinada com o manuseio e o fluxo de arquivos adequados, cria uma plataforma avançada para exploração e análise matemática.

Você também pode aprender a criar agentes semelhantes usando outras plataformas fazendo o curso Developing AI Systems with the OpenAI API.

Conclusão e etapas futuras

A criação desse solucionador de problemas matemáticos demonstrou como os novos recursos do Claude 4 transformam o que é possível com os aplicativos de IA.

Nosso aplicativo lida com tudo, desde cálculos básicos até visualizações matemáticas complexas, mostrando como esses recursos da API trabalham juntos para criar excelentes experiências de usuário. A ferramenta de execução de código destaca-se particularmente como um divisor de águas, permitindo que a Claude itere em soluções e gere resultados visuais que, no passado, exigiriam ferramentas separadas e integrações complexas.

A partir daí, você pode estender esse solucionador matemático com interfaces da Web, integrá-lo a fontes de dados externas por meio de MCPs ou aplicar padrões semelhantes para criar assistentes específicos de domínio para outros campos, como análise de dados, computação científica ou ferramentas educacionais.

Desenvolver aplicativos de IA

Aprenda a criar aplicativos de IA usando a API OpenAI.

Perguntas frequentes

O que torna o Claude 4 diferente das versões anteriores?

O Claude 4 apresenta a execução de código nativo, raciocínio ampliado com o uso de ferramentas, execução de ferramentas paralelas, recursos de memória aprimorados e suporte para várias horas de execução contínua de tarefas. Esses recursos o tornam particularmente forte em tarefas de engenharia de software.

O Claude 4 pode realmente executar código Python durante as conversas?

Sim, o Claude 4 pode executar código Python em um ambiente de sandbox seguro usando a nova ferramenta de execução de código. Ele pode executar cálculos, gerar visualizações com matplotlib e iterar em soluções com base nos resultados da execução.

Quais são as limitações do ambiente de execução de código do Claude?

A sandbox não tem acesso à Internet, tem recursos computacionais limitados e não pode acessar seu sistema de arquivos local. Ele vem com bibliotecas populares como numpy, pandas e matplotlib pré-instaladas, mas você não pode instalar pacotes adicionais.

Como a nova API Files funciona com a execução de código?

A API Files permite que você carregue documentos uma vez e os consulte em todas as conversas. Quando o Claude cria arquivos durante a execução do código (como gráficos), você pode extrair os IDs dos arquivos e baixá-los localmente usando a API.

Preciso de acesso especial à API para usar os recursos de execução de código do Claude 4?

Você precisa incluir o cabeçalho beta "anthropic-beta": "code-execution-2025-05-22" em suas solicitações de API e usar o modelo claude-sonnet-4-20250514. A ferramenta de execução de código é especificada como "code_execution_20250522" em sua matriz tools.


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

Sou um criador de conteúdo de ciência de dados com mais de 2 anos de experiência e um dos maiores seguidores no Medium. Gosto de escrever artigos detalhados sobre IA e ML com um estilo um pouco sarcástico, porque você precisa fazer algo para torná-los um pouco menos monótonos. Produzi mais de 130 artigos e um curso DataCamp, e estou preparando outro. Meu conteúdo foi visto por mais de 5 milhões de pessoas, das quais 20 mil se tornaram seguidores no Medium e no LinkedIn. 

Tópicos

Saiba mais sobre IA com estes 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 detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado
An avian AI exits its cage

blog

12 Alternativas de código aberto ao GPT-4

GPT-4 alternativas de código aberto que podem oferecer desempenho semelhante e exigem menos recursos computacionais para serem executadas. Esses projetos vêm com instruções, fontes de código, pesos de modelos, conjuntos de dados e interface de usuário do chatbot.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Primeiros passos com o Claude 3 e a API do Claude 3

Saiba mais sobre os modelos Claude 3, benchmarks de desempenho detalhados e como acessá-los. Além disso, descubra a nova API Python do Claude 3 para geração de texto, acesso a recursos de visão e streaming.
Abid Ali Awan's photo

Abid Ali Awan

Tutorial

Como criar aplicativos LLM com o tutorial LangChain

Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Moez Ali's photo

Moez Ali

12 min

Tutorial

Tutorial de análise de sentimentos com NLTK para iniciantes

Tutorial de análise de sentimentos com NLTK (Natural Language Toolkit) em Python. Aprenda a criar e desenvolver análises de sentimentos usando Python. Siga etapas específicas para realizar a mineração e análise de textos e fazer o processamento de linguagem natural.
Moez Ali's photo

Moez Ali

13 min

Tutorial

Criando agentes LangChain para automatizar tarefas em Python

Um tutorial abrangente sobre a criação de agentes LangChain com várias ferramentas para automatizar tarefas em Python usando LLMs e modelos de bate-papo usando OpenAI.
Bex Tuychiev's photo

Bex Tuychiev

14 min

Tutorial

Guia para iniciantes no uso da API do ChatGPT

Este guia o orienta sobre os conceitos básicos da API ChatGPT, demonstrando seu potencial no processamento de linguagem natural e na comunicação orientada por IA.
Moez Ali's photo

Moez Ali

11 min

Ver maisVer mais