Full Stack AI AWS Bedrock na prática: o código e os comandos que realmente importam
Full Stack AI AWS Bedrock : o essencial em um artigo — código real, diagramas e etapas concretas, extratos de um curso de 41 lições.
Sem teoria interminável aqui: abra o terminal e pratique. Aqui está o essencial de Full Stack AI AWS Bedrock, extraído diretamente de um curso completo de 41 lições — com código real que você pode copiar e colar agora.
- Criar uma conta AWS e descobrir o Bedrock
- Introdução à IA generativa e AWS Bedrock
- API Bedrock e SDK Python Boto3
- Engenharia de Prompt para Bedrock
- Backend FastAPI com Bedrock
Instalar Boto3 e configurar as credenciais
Objetivos pedagógicos
O que é Boto3?
Boto3 é o SDK oficial da Amazon Web Services para Python. Ele permite interagir com todos os serviços AWS (S3, DynamoDB, Lambda, Bedrock, etc.) diretamente a partir de código Python.
Boto3 – Cliente de baixo nível
Acesso direto às APIs AWS. Cada método corresponde exatamente a uma operação da API REST. Você manipula dicionários Python.
Boto3 – Resource de alto nível
Abstração orientada a objetos. Mais intuitiva para alguns serviços (S3, DynamoDB). Para o Bedrock, usamos principalmente o cliente.
Etapa 1 – Instalar Python 3.8+
O Boto3 requer Python 3.8 ou superior. Verifique primeiro se o Python já está instalado:
python --version
Se a versão exibida for 3.8+, passe para a próxima etapa. Caso contrário, instale o Python conforme seu sistema:
Windows
Baixe o instalador oficial em https://www.python.org/downloads/. Marque obrigatoriamente a opção « Add Python to PATH » durante a instalação.
# Verificação após a instalação python --version pip --version
macOS
# Via Homebrew (recomendado) brew install python@3.11 # Verificação python3 --version pip3 --version
Linux (Ubuntu / Debian)
sudo apt update sudo apt install python3 python3-pip python3-venv -y # Verificação python3 --version pip3 --version
python3 e pip3 em vez de python e pip, pois python pode apontar para Python 2.x em alguns sistemas.Etapa 2 – Criar um ambiente virtual
Um ambiente virtual isola as dependências do seu projeto. Isso evita conflitos entre diferentes projetos Python na sua máquina.
Criar e ativar o venv
Primeira chamada ao Bedrock via console
Objetivos pedagógicos
1 – Acessar o Amazon Bedrock
Etapa 1: Conectar-se ao console AWS
Abra seu navegador e acesse:
https://console.aws.amazon.com
Faça login com suas credenciais AWS. Se ainda não tiver conta, crie uma (o Free Tier AWS dá acesso a muitos serviços gratuitamente).
Etapa 2: Escolher a região correta
Verifique a região no canto superior direito do console:
+----------------------------------------------------------+ | AWS Console [N. Virginia v] | | ^^^^^^^^^^^^ | | Barra de pesquisa : [ Amazon Bedrock ] | | | +----------------------------------------------------------+ Se você vir outra região, clique no menu suspenso e selecione « US East (N. Virginia) ».
Etapa 3: Encontrar o Amazon Bedrock
Na barra de pesquisa no topo do console, digite « Bedrock » e clique em Amazon Bedrock nos resultados:
+----------------------------------------------------------+ | Pesquisa : [ Bedrock ] | | | | Resultados : | | +------------------------------------------------------+| | | Amazon Bedrock || | | Build with foundation models || | +------------------------------------------------------+| +----------------------------------------------------------+
Você chega ao painel do Bedrock (Bedrock Dashboard).
2 – Ativar o acesso aos modelos
Por padrão, nenhum modelo está ativado. Você deve solicitar explicitamente o acesso antes de poder usá-los.
Etapa 1: Ir para Model Access
No menu lateral esquerdo do Bedrock, clique em « Model access » (bem embaixo):
+----------------------------+------------------------------+ | Amazon Bedrock | | | | Bedrock Dashboard | | Playgrounds | | | Chat | Bem-vindo ao Amazon | | Text | Bedrock. Acesse modelos | | Image | foundation de ponta | | | via uma única API. | | Orchestration | | | Agents | | | Knowledge bases | | | | | | Foundation models | | | Base models | | | Custom models | | | | | | Bedrock configurations | | | > Model access <-- | | +----------------------------+------------------------------+
Etapa 2: Solicitar o acesso
Clique no botão « Manage model access » (no canto superior direito).
Você verá a lista de todos os modelos disponíveis. Marque os seguintes modelos para este curso:
+----------------------------------------------------------+ | Manage model access | | | | Provider Model Access Status | | -------------------------------------------------------+| | [x] Anthropic Claude 3 Haiku Available || | [x] Anthropic Claude 3.5 Sonnet Available || | [ ] Anthropic Claude 3 Opus Available || | [x] Amazon Titan Text Express Available || | [x] Meta Llama 3 8B Instruct Available || | [x] Mistral AI Mistral 7B Instruct Available || | [x] Mistral AI Mixtral 8x7B Instruct Available || | | | [ Save changes ] | +----------------------------------------------------------+
Clique em « Save changes ». O acesso geralmente é ativado em poucos segundos.
Criar uma API FastAPI + Bedrock
Full Stack AI com AWS Bedrock • Backend FastAPI com Bedrock
/chat funcional testável via Swagger UI, curl e PowerShell.O que você vai aprender
1. Instalação das dependências
Certifique-se de que seu ambiente virtual está ativado, então instale as bibliotecas:
# Activer l'environnement virtuel (Windows PowerShell) .\venv\Scripts\Activate.ps1 # Installer les bibliothèques principales pip install fastapi uvicorn boto3 pydantic python-dotenv python-multipart
Verifique se tudo foi instalado corretamente:
pip list | findstr -i "fastapi uvicorn boto3"
Você deve ver as três bibliotecas com seus números de versão.
2. Os modelos Pydantic
O Pydantic permite definir a forma exata dos dados que nossa API aceita e retorna. É como um formulário com campos obrigatórios: se os dados não corresponderem, a API recusa automaticamente a requisição com uma mensagem de erro clara.
# backend/models/schemas.py
from pydantic import BaseModel, Field
from typing import Optional, List
class Message(BaseModel):
"""Représente um message dans la conversation."""
role: str = Field(
...,
description="Rôle : 'user' ou 'assistant'",
examples=["user"]
)
content: str = Field(
...,
description="Contenu du message",
examples=["Explique-moi les boucles Python"]
)
class ChatRequest(BaseModel):
"""Requête envoyée par le frontend pour chatter avec l'IA."""
message: str = Field(
...,
min_length=1,
max_length=10000,
description="Message de l'utilisateur"
)
history: Optional[List[Message]] = Field(
default=[],
description="Historique de la conversation"
)
model_id: Optional[str] = Field(
default=None,
description="ID du modèle Bedrock"
)
temperature: Optional[float] = Field(
default=0.7,
ge=0.0,
le=1.0,
description="Créativité du modèle (0 = précis, 1 = créatif)"
)
max_tokens: Optional[int] = Field(
default=4096,
ge=1,
le=8192,
description="Nombre maximum de tokens dans la réponse"
)
class ChatResponse(BaseModel):
"""Réponse retournée par l'API après appel à Bedrock."""
response: str = Field(
...,
description="Réponse générée par l'IA"
)
model_id: str = Field(
...,
description="ID du modèle utilisé"
)
input_tokens: int = Field(
default=0,
description="Tokens consommés par le prompt"
)
output_tokens: int = Field(
default=0,
description="Tokens générés dans la réponse"
)
class HealthResponse(BaseModel):
"""Réponse du endpoint de santé."""
status: str
message: strSe o frontend enviar um campo temperature com valor 5.0 (fora do intervalo 0-1), o Pydantic retorna:
{
"detail": [
{
"loc": ["body", "temperature"],
"msg": "Input should be less than or equal to 1",
"type": "less_than_equal"
}
]
}3. O serviço Bedrock
O serviço Bedrock encapsula toda a lógica de comunicação com a AWS. É aqui que a « magia » acontece: sua mensagem de texto é transformada em requisição AWS, enviada ao Claude e a resposta é retornada.
# backend/services/bedrock_service.py
import json
import boto3
from config import AWS_REGION, BEDROCK_MODEL_ID, MAX_TOKENS, TEMPERATURE
def get_bedrock_client():
"""Crée et retourne un client Bedrock Runtime."""
return boto3.client(
service_name="bedrock-runtime",
region_name=AWS_REGION
)
def build_messages(message: str, history: list = None) -> list:
"""Construit la liste de messages pour l'API Bedrock."""
messages = []
if history:
for msg in history:
messages.append({
"role": msg.role,
"content": [{"type": "text", "text": msg.content}]
})
messages.append({
"role": "user",
"content": [{"type": "text", "text": message}]
})
return messages
def invoke_bedrock(
message: str,
history: list = None,
model_id: str = None,
temperature: float = None,
max_tokens: int = None
) -> dict:
"""
Appelle AWS Bedrock avec le message et retourne la réponse.
Args:
message: Le message de l'utilisateur
history: L'historique de la conversation
model_id: L'identifiant du modèle Bedrock
temperature: La créativité (0.0 à 1.0)
max_tokens: Le nombre max de tokens en sortie
Returns:
dict avec la réponse, le modèle utilisé et les tokens
"""
client = get_bedrock_client()
model = model_id or BEDROCK_MODEL_ID
temp = temperature if temperature is not None else TEMPERATURE
tokens = max_tokens or MAX_TOKENS
messages = build_messages(message, history)
body = json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": tokens,
"temperature": temp,
"messages": messages
})
response = client.invoke_model(
modelId=model,
contentType="application/json",
accept="application/json",
body=body
)
response_body = json.loads(response["body"].read())
return {
"response": response_body["content"][0]["text"],
"model_id": model,
"input_tokens": response_body.get("usage", {}).get(
"input_tokens", 0
),
"output_tokens": response_body.get("usage", {}).get(
"output_tokens", 0
),
}Detalhes do parâmetro body
| Parâmetro | Tipo | Descrição |
|---|---|---|
anthropic_version |
string | Versão da API Anthropic usada pelo Bedrock |
max_tokens |
int | Limita o tamanho da resposta (1 token ≈ 0.75 palavra) |
temperature |
float | 0.0 = respostas precisas, 1.0 = respostas criativas |
messages |
list | A conversa completa (histórico + nova mensagem) |
4. O arquivo main.py completo
Este é o ponto de entrada da aplicação. Ele reúne todos os componentes: configuração, CORS, rotas e tratamento de erros.
# backend/main.py
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from dotenv import load_dotenv
from config import CORS_ORIGINS
from models.schemas import (
ChatRequest,
ChatResponse,
HealthResponse,
)
from services.bedrock_service import invoke_bedrock
load_dotenv()
app = FastAPI(
title="Full Stack AI - Backend Bedrock",
description="API para interagir com AWS Bedrock (Claude)",
version="1.0.0",
)
# --- Middleware CORS ---
app.add_middleware(
CORSMiddleware,
allow_origins=CORS_ORIGINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# --- Endpoints ---
@app.get("/health", response_model=HealthResponse)
def health_check():
"""Vérifie que le serveur est opérationnel."""
return HealthResponse(
status="ok",
message="Le serveur fonctionne correctement"
)
@app.post("/chat", response_model=ChatResponse)
def chat(request: ChatRequest):
"""
Envoie un message à AWS Bedrock et retourne la réponse de l'IA.
- **message** : le texte envoyé par l'utilisateur
- **history** : l'historique de conversation (optionnel)
- **model_id** : le modèle Bedrock à utiliser (optionnel)
- **temperature** : la créativité de 0.0 à 1.0 (optionnel)
- **max_tokens** : nombre max de tokens en sortie (optionnel)
"""
try:
result = invoke_bedrock(
message=request.message,
history=request.history,
model_id=request.model_id,
temperature=request.temperature,
max_tokens=request.max_tokens,
)
return ChatResponse(**result)
except Exception as e:
raise HTTPException(
status_code=500,
detail=f"Erreur lors de l'appel à Bedrock : {str(e)}"
)
@app.get("/models")
def list_models():
"""Retourne la liste des modèles disponibles."""
return {
"models": [
{
"id": "anthropic.claude-3-sonnet-20240229-v1:0",
"name": "Claude 3 Sonnet",
"description": "Bon équilibre performance/coût"
},
{
"id": "anthropic.claude-3-haiku-20240307-v1:0",
"name": "Claude 3 Haiku",
"description": "Le plus rapide et économique"
},
{
"id": "anthropic.claude-3-5-sonnet-20240620-v1:0",
"name": "Claude 3.5 Sonnet",
"description": "Le plus performant"
},
]
}Este artigo cobre os trechos mais úteis — o curso completo Full Stack AI AWS Bedrock (12 capítulos, 41 lições, exercícios corrigidos e projeto final) leva você até o fim.
./acceder-au-cours-complet curso gratuito : Maîtriser Claude CodeFAQ
Quanto tempo para aprender Full Stack AI AWS Bedrock?
Precisa de pré-requisitos?
Por onde começar concretamente?
📬 Quer receber este tipo de guia toda semana? Inscreva-se gratuitamente — código real, zero enrolação.