Tutorialpython-iaTier 4 · DesenvolvidoFeature· Fácil· PT30M

Como Usar a API do Claude (Anthropic) com Python

Como usar a API do Claude da Anthropic em Python: autenticação, chamadas ao Claude 3.7, contagem de tokens, streaming e boas práticas para produção.

11 de maio de 2026· Atualizado em 24 de maio de 2026por Análises SWEN.AI
Como Usar a API do Claude (Anthropic) com Python

Como Usar a API do Claude (Anthropic): Guia Completo Para Desenvolvedores

A API da Anthropic dá acesso ao Claude — um dos modelos de linguagem mais capazes do mercado — diretamente no seu código. Neste guia você vai aprender desde a configuração inicial até padrões avançados de uso, com exemplos práticos em Python.

---

Por Que Usar a API do Claude?

O Claude se destaca em algumas áreas específicas que fazem a API ser especialmente valiosa:

  • Janela de contexto massiva: 200.000 tokens — ideal para processar documentos longos, codebases inteiros, ou múltiplos arquivos
  • Seguir instruções complexas: System prompts com muitas regras são seguidos com alta fidelidade
  • Computer Use: O Claude 3.5 Sonnet pode interagir com interfaces gráficas reais
  • Código de alta qualidade: Frequentemente supera outros modelos em geração e revisão de código
  • Menos alucinações: Treinado para dizer "não sei" em vez de inventar

---

Configuração Inicial

1. Obter Chave de API

Acesse console.anthropic.com, crie uma conta e gere uma API key. Guarde com segurança — não commitamos em código.

2. Instalar o SDK Python

pip install anthropic python-dotenv

3. Configurar Variáveis de Ambiente

# .env
ANTHROPIC_API_KEY=sk-ant-api03-...

---

Primeira Chamada à API

import anthropic
from dotenv import load_dotenv

load_dotenv()

client = anthropic.Anthropic()  # lê ANTHROPIC_API_KEY automaticamente

message = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Explique o que é uma API REST em 3 linhas."}
    ]
)

print(message.content[0].text)

Output esperado:

Uma API REST é um conjunto de regras para comunicação entre sistemas via HTTP.
Ela usa métodos padrão (GET, POST, PUT, DELETE) para realizar operações em recursos
identificados por URLs, retornando dados geralmente em formato JSON.

---

Modelos Disponíveis e Quando Usar Cada Um

Modelo Uso Recomendado Custo (input/output)
claude-3-5-sonnet-20241022 Equilíbrio perfeito velocidade/qualidade $3 / $15 por 1M tokens
claude-3-7-sonnet-20250219 Máxima qualidade, raciocínio estendido $3 / $15 por 1M tokens
claude-3-5-haiku-20241022 Tarefas simples, baixo custo, alta velocidade $0.80 / $4 por 1M tokens
claude-opus-4-5 Tarefas de máxima complexidade $15 / $75 por 1M tokens

Regra prática: Use Haiku para classificação, extração simples, e tarefas em volume. Use Sonnet para a maioria das tarefas. Use Opus apenas quando Sonnet falha.

---

System Prompts: Configurando o Comportamento do Claude

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=2048,
    system="""Você é um assistente especializado em análise jurídica brasileira.
    
    Regras:
    - Sempre cite o artigo de lei quando relevar
    - Responda em linguagem acessível ao leigo
    - Se não tiver certeza, diga explicitamente
    - Nunca dê conselho jurídico definitivo — apenas informativo
    - Foque no direito brasileiro (CLT, CC, CF/88)""",
    messages=[
        {"role": "user", "content": "Tenho 12 dias de férias não tiradas. Posso receber em dinheiro?"}
    ]
)

print(message.content[0].text)

---

Conversas Multi-Turn (Histórico de Mensagens)

def chat_com_historico():
    client = anthropic.Anthropic()
    historico = []
    
    while True:
        usuario = input("Você: ")
        if usuario.lower() in ["sair", "exit"]:
            break
        
        historico.append({"role": "user", "content": usuario})
        
        response = client.messages.create(
            model="claude-3-5-sonnet-20241022",
            max_tokens=1024,
            system="Você é um assistente prestativo. Lembre-se do contexto da conversa.",
            messages=historico
        )
        
        assistant_text = response.content[0].text
        historico.append({"role": "assistant", "content": assistant_text})
        
        print(f"Claude: {assistant_text}\n")

chat_com_historico()

---

Streaming de Respostas

Para interfaces que exibem texto progressivamente (como o ChatGPT faz):

import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Escreva um poema sobre programação"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

print()  # nova linha ao final

---

Processamento de Imagens

O Claude 3.5 Sonnet aceita imagens como input:

import anthropic
import base64

def analisar_imagem(caminho_imagem: str, pergunta: str) -> str:
    with open(caminho_imagem, "rb") as f:
        imagem_base64 = base64.standard_b64encode(f.read()).decode("utf-8")
    
    # Detectar tipo de imagem
    extensao = caminho_imagem.split(".")[-1].lower()
    media_types = {"jpg": "image/jpeg", "jpeg": "image/jpeg", 
                   "png": "image/png", "gif": "image/gif", "webp": "image/webp"}
    media_type = media_types.get(extensao, "image/jpeg")
    
    client = anthropic.Anthropic()
    
    message = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image",
                        "source": {
                            "type": "base64",
                            "media_type": media_type,
                            "data": imagem_base64,
                        },
                    },
                    {"type": "text", "text": pergunta}
                ],
            }
        ],
    )
    
    return message.content[0].text

# Uso:
descricao = analisar_imagem("screenshot.png", "Descreva o que está nesta imagem")
print(descricao)

---

Tool Use (Chamadas de Função)

O Claude pode chamar funções externas, similar ao function calling da OpenAI:

import anthropic
import json

# Definir as ferramentas disponíveis
tools = [
    {
        "name": "buscar_clima",
        "description": "Busca informações do clima atual para uma cidade",
        "input_schema": {
            "type": "object",
            "properties": {
                "cidade": {
                    "type": "string",
                    "description": "Nome da cidade para buscar o clima"
                },
                "unidade": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"],
                    "description": "Unidade de temperatura"
                }
            },
            "required": ["cidade"]
        }
    }
]

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "Qual o clima em São Paulo agora?"}]
)

# Verificar se o Claude quer usar uma ferramenta
if response.stop_reason == "tool_use":
    for block in response.content:
        if block.type == "tool_use":
            print(f"Claude quer chamar: {block.name}")
            print(f"Com parâmetros: {block.input}")
            # Aqui você chamaria a API real de clima
            # e retornaria o resultado para o Claude

---

Tratamento de Erros

import anthropic
from anthropic import APIConnectionError, RateLimitError, APIStatusError

def chamada_segura(mensagem: str) -> str:
    client = anthropic.Anthropic()
    
    try:
        response = client.messages.create(
            model="claude-3-5-sonnet-20241022",
            max_tokens=1024,
            messages=[{"role": "user", "content": mensagem}]
        )
        return response.content[0].text
        
    except RateLimitError:
        print("Limite de taxa atingido. Aguarde e tente novamente.")
        raise
    except APIConnectionError:
        print("Erro de conexão. Verifique sua internet.")
        raise
    except APIStatusError as e:
        print(f"Erro da API: {e.status_code} - {e.message}")
        raise

texto = chamada_segura("Olá, como você está?")
print(texto)

---

Calculando Custos

def calcular_custo(response: anthropic.types.Message) -> float:
    """Calcula custo em USD para Claude 3.5 Sonnet"""
    preco_input = 3.00 / 1_000_000   # $3 por 1M tokens
    preco_output = 15.00 / 1_000_000  # $15 por 1M tokens
    
    custo = (response.usage.input_tokens * preco_input + 
             response.usage.output_tokens * preco_output)
    
    print(f"Tokens: {response.usage.input_tokens} in, {response.usage.output_tokens} out")
    print(f"Custo estimado: ${custo:.6f} USD")
    
    return custo

---

Perguntas Frequentes

Como obter chave da API Anthropic?

Acesse console.anthropic.com, crie conta, vá em "API Keys" e gere uma nova chave. O crédito inicial gratuito é $5.

Qual a diferença entre a API e o Claude.ai?

Claude.ai é a interface web para usuários finais. A API é para desenvolvedores integrarem Claude em seus aplicativos, com mais controle e custo por token.

Há um plano gratuito para a API?

Não há plano gratuito, mas novos usuários recebem $5 de crédito. O custo é baixo — $5 permitem processar ~1.6M tokens de entrada com o Sonnet.

Como processar múltiplos documentos em paralelo?

Use asyncio e aiohttp com o cliente assíncrono da Anthropic para processar em paralelo:

import asyncio
import anthropic

async def processar(client, texto):
    return await client.messages.create(...)

async def main():
    client = anthropic.AsyncAnthropic()
    tarefas = [processar(client, t) for t in textos]
    resultados = await asyncio.gather(*tarefas)

Salve seu progresso de aprendizado

Crie sua conta gratuita no SWEN.AI para acompanhar as aulas concluídas

Salvar meu progresso

Tutoriais relacionados

📚 Guias Completos no CF Gauss

CF Gauss por Luis Roquette — especialista em IA para empresas brasileiras