Phase 00 - Lesson 04
APIs e Chaves
Toda API de IA funciona da mesma forma: envie uma requisição, receba uma resposta. Os detalhes mudam, o padrão não.
Tipo: Build Linguagens: Python, TypeScript Pré-requisitos: Fase 0, Lição 01 Tempo: ~30 minutos
Objetivos de Aprendizagem
- Armazenar chaves de API com segurança usando variáveis de ambiente e arquivos
.env - Fazer uma chamada de API de LLM usando tanto o SDK Python da Anthropic quanto HTTP puro
- Comparar os formatos de requisição/resposta baseados em SDK e em HTTP puro para depuração
- Identificar e tratar erros comuns de API, incluindo autenticação e limites de taxa
O Problema
A partir da Fase 11, você vai chamar APIs de LLM (Anthropic, OpenAI, Google). Nas Fases 13-16 você vai construir agentes que usam essas APIs em loops. Você precisa saber como as chaves de API funcionam, como armazena-las com segurança e como fazer sua primeira chamada de API.
O Conceito
sequenceDiagram
participant C as Your Code
participant S as API Server
C->>S: HTTP Request (with API key)
S->>C: HTTP Response (JSON)
Toda chamada de API tem:
- Um endpoint (URL)
- Uma chave de API (autenticação)
- Um corpo de requisição (o que você quer)
- Um corpo de resposta (o que você recebe de volta)
Build It
Passo 1: Armazene as chaves de API com segurança
Nunca coloque chaves de API no código. Use variáveis de ambiente.
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
Ou use um arquivo .env (adicione-o ao .gitignore):
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
Passo 2: Primeira chamada de API (Python)
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=256,
messages=[{"role": "user", "content": "What is a neural network in one sentence?"}]
)
print(response.content[0].text)
Passo 3: Primeira chamada de API (TypeScript)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const response = await client.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 256,
messages: [{ role: "user", content: "What is a neural network in one sentence?" }],
});
console.log(response.content[0].text);
Passo 4: HTTP puro (sem SDK)
import os
import urllib.request
import json
url = "https://api.anthropic.com/v1/messages"
headers = {
"Content-Type": "application/json",
"x-api-key": os.environ["ANTHROPIC_API_KEY"],
"anthropic-version": "2023-06-01",
}
body = json.dumps({
"model": "claude-sonnet-4-20250514",
"max_tokens: 256,
"messages": [{"role": "user", "content": "What is a neural network in one sentence?"}],
}).encode()
req = urllib.request.Request(url, data=body, headers=headers, method="POST")
with urllib.request.urlopen(req) as resp:
result = json.loads(resp.read())
print(result["content"][0]["text"])
É isso o que os SDKs fazem por baixo dos panos. Entender a chamada HTTP pura ajuda na hora de depurar.
Use It
Para este curso:
| API | Quando você precisa | Plano gratuito |
|---|---|---|
| Anthropic (Claude) | Fases 11-16 (agentes, ferramentas) | US$5 de crédito no cadastro |
| OpenAI | Fase 11 (comparação) | US$5 de crédito no cadastro |
| Hugging Face | Fases 4-10 (modelos, datasets) | Gratuito |
Você não precisa de todas agora. Configure-as quando a lição exigir.
Ship It
Esta lição produz:
outputs/prompt-api-troubleshooter.md- diagnostica erros comuns de API
Exercícios
- Obtenha uma chave de API da Anthropic e faça sua primeira chamada de API
- Experimente a versão HTTP pura e compare o formato da resposta com a versão do SDK
- Use intencionalmente uma chave de API errada e leia a mensagem de erro
Termos-chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Chave de API | "Senha da API" | Uma string única que identifica sua conta e autoriza requisições |
| Limite de taxa | "Estão me limitando" | Máximo de requisições por minuto/hora para evitar abuso e garantir uso justo |
| Token | "Uma palavra" (no contexto de API) | Uma unidade de cobrança: tokens de entrada e de saída são contados e cobrados separadamente |
| Streaming | "Respostas em tempo real" | Receber a resposta palavra por palavra em vez de esperar pela resposta completa |