O blog da AWS
Recomendações com explicações contextuais usando Amazon Personalize e Amazon Bedrock
Por Rafael Werneck, Arquiteto de Prototipação Sênior na AWS Brasil e Rafael Ribeiro Martins, Gerente de Programas Sênior na AWS Brasil.
Plataformas de e-commerce costumam usar sistemas de recomendação para sugerir produtos relevantes ao comprador. A maioria, porém, exibe as sugestões sem explicar o motivo, o que limita o valor que essas recomendações entregam. Nesta postagem, mostramos como superar as recomendações tradicionais: o sistema gera uma explicação contextual para cada sugestão, em linguagem natural, com base nas descrições dos produtos envolvidos.
Para isso, combinamos dois serviços gerenciados da AWS: o Amazon Personalize, que identifica produtos relevantes para o comprador com base em padrões de compra, e o Amazon Bedrock, que gera o texto explicativo para cada recomendação. Vamos apresentar os detalhes da arquitetura proposta, quais serviços estão envolvidos e como implementar essa funcionalidade em um sistema de e-commerce existente.
Ao final desta publicação, você aprenderá como configurar um sistema de recomendação com o Amazon Personalize, como usar o Amazon Bedrock para gerar explicações contextuais em linguagem natural, e como integrar esses dois serviços em uma arquitetura sem servidor.
O problema
Imagine um comprador visualizando uma câmera mirrorless (câmera digital de lentes intercambiáveis) em uma loja online. O sistema recomenda um cartão de memória SD, mas exibe apenas o nome e o preço do produto. Para o comprador, fica a dúvida: por que esse cartão SD especificamente? Vale a pena adicioná-lo ao carrinho?
Agora considere a mesma recomendação acompanhada da seguinte explicação:
“Câmeras mirrorless gravam vídeos em alta resolução e produzem arquivos grandes. Um cartão SD de alta velocidade garante que a gravação não seja interrompida e que as fotos sejam salvas rapidamente.”
Explicações detalhadas são mais informativas e relevantes do que qualquer texto genérico. Isso transforma uma recomendação em um argumento prático para o comprador. E gerar explicações desse tipo de forma manual não é viável em catálogos com milhares de produtos.
A combinação de Amazon Personalize e Amazon Bedrock resolve esse problema: o Amazon Personalize identifica quais produtos recomendar, e o Amazon Bedrock gera a explicação contextual com base nas descrições dos produtos.
Serviços utilizados
- Amazon Personalize: serviço gerenciado de machine learning para recomendações personalizadas, sem exigir experiência em ML.
- Amazon Bedrock: serviço gerenciado que oferece acesso a modelos de base de diferentes provedores por meio de API.
- Amazon S3: serviço gerenciado de armazenamento de objetos.
Como funciona
O fluxo é o seguinte:
- O sistema de e-commerce envia o produto que o comprador está visualizando e o identificador do comprador.
- O Amazon Personalize retorna produtos recomendados, incluindo as descrições de cada um.
- Para cada produto recomendado, o Amazon Bedrock gera a explicação contextual com base nas descrições dos dois produtos.
- O sistema exibe as recomendações ao comprador.
O diagrama a seguir ilustra esse fluxo:

Em produção, esse fluxo pode ser implementado em uma função AWS Lambda (serviço de computação serverless que executa código sem precisar gerenciar servidores) e exposto como uma API REST usando o Amazon API Gateway (serviço gerenciado para criação e publicação de APIs).
O diagrama a seguir mostra uma possível arquitetura para essa solução:

Nas próximas seções, vamos detalhar cada etapa: como preparar os dados, como criar o recommender no Amazon Personalize e como chamar o Amazon Bedrock para gerar as explicações.
Preparando os dados
O primeiro passo é configurar o sistema de recomendação usando o Amazon Personalize. O Amazon Personalize organiza os dados em um dataset group e usa três conjuntos de dados para treinar o modelo:
- Interações: histórico de compras (quem comprou, o quê e quando)
- Itens: catálogo de produtos (ID, preço, categoria e descrição, entre outros campos)
- Usuários: perfil dos compradores (ID, tipo de comprador)
Os dados são carregados no Amazon Personalize usando arquivos CSV armazenados no Amazon S3. O campo PRODUCT_DESCRIPTION do dataset de itens é o que alimenta a geração de explicações: o Amazon Bedrock usa as descrições do produto visualizado e do produto recomendado para gerar um texto que explica a relação entre eles. Para mais detalhes sobre como preparar e importar os dados, consulte o Guia do desenvolvedor do Amazon Personalize.
Criando o recommender
Com os dados carregados, o próximo passo é criar um recommender. O Amazon Personalize oferece recommenders pré-configurados para o domínio de e-commerce, sem que você precise definir algoritmos ou ajustar hiperparâmetros. Nesta publicação, usamos o recommender Frequently Bought Together, que recomenda produtos frequentemente comprados junto com um item de referência. Você pode criar o recommender pelo console da AWS ou pela AWS CLI. A seguir, um exemplo usando a CLI, em que $DATASET_GROUP_ARN é o ARN do dataset group criado anteriormente:
aws personalize create-recommender \
--name frequently-bought-together \
--dataset-group-arn $DATASET_GROUP_ARN \
--recipe-arn arn:aws:personalize:::recipe/aws-ecomm-frequently-bought-together \
--recommender-config '{"enableMetadataWithRecommendations": true}'
O parâmetro enableMetadataWithRecommendations faz com que o Amazon Personalize retorne os metadados dos produtos recomendados (incluindo a descrição) diretamente na resposta. Isso dispensa um banco de dados separado para buscar as descrições.
O treinamento pode levar alguns minutos. Após a conclusão, o recommender fica ativo e começa a servir recomendações imediatamente. Para mais detalhes sobre os recommenders disponíveis e suas configurações, consulte a documentação do Amazon Personalize.
Gerando as explicações com Amazon Bedrock
Com o recommender ativo, o próximo passo é usar um modelo de IA generativa, com o Amazon Bedrock, para gerar a explicação contextual de cada recomendação. O modelo recebe um prompt com a descrição do produto visualizado e a descrição do produto recomendado, e gera um texto explicando a relação entre os dois. Veja a seguir o prompt utilizado, com {product_description} e {recommended_description} representando as descrições que serão preenchidas em cada chamada:
Você é um assistente de compras. Dado um produto que o comprador está visualizando e um produto
recomendado, explique de forma breve e natural por que o produto recomendado complementa o produto
que o comprador está visualizando. Limite a resposta a 1 ou 2 frases.
Produto visualizado: {product_description}
Produto recomendado: {recommended_description}
Explicação:
A seguir, um exemplo de como chamar o Amazon Bedrock para gerar a explicação. A constante PROMPT_TEMPLATE contém o prompt mostrado anteriormente:
def generate_explanation(product_description: str, recommended_description: str) -> str:
prompt = PROMPT_TEMPLATE.format(
product_description=product_description,
recommended_description=recommended_description,
)
result = bedrock.invoke_model(
modelId="us.amazon.nova-micro-v1:0",
body=json.dumps({
"messages": [{"role": "user", "content": [{"text": prompt}]}],
"inferenceConfig": {"maxTokens": 150},
}),
)
return json.loads(result["body"].read())["output"]["message"]["content"][0]["text"].strip()
A seguir, um exemplo de como chamar o Amazon Personalize para obter as recomendações e coordenar a geração das explicações. RECOMMENDER_ARN é o ARN do recommender criado anteriormente:
def get_recommendations_with_explanations(item_id: str, item_description: str, user_id: str) -> list:
response = personalize_runtime.get_recommendations(
recommenderArn=RECOMMENDER_ARN,
itemId=item_id,
userId=user_id,
numResults=3,
metadataColumns={"ITEMS": ["PRODUCT_DESCRIPTION"]},
)
recommendations = []
for item in response["itemList"]:
explanation = generate_explanation(
product_description=item_description,
recommended_description=item["metadata"]["PRODUCT_DESCRIPTION"],
)
recommendations.append({"item_id": item["itemId"], "explanation": explanation})
return recommendations
Um exemplo de retorno da função, considerando uma chamada com a câmera mirrorless como produto visualizado:
[
{
"item_id": "B08N5WRWNW",
"explanation": "Cartões SD de alta velocidade são essenciais para câmeras mirrorless — eles garantem que arquivos de vídeo em 4K sejam gravados sem interrupções e que as fotos em rajada sejam salvas rapidamente."
},
{
"item_id": "B07FZ8S74R",
"explanation": "Uma bolsa para câmera protege o equipamento durante o transporte e organiza acessórios como lentes e carregadores em um único lugar."
},
{
"item_id": "B09G3HRMVB",
"explanation": "Baterias reserva são indispensáveis para sessões longas — câmeras mirrorless tendem a consumir mais energia do que DSLRs, especialmente ao gravar vídeo."
}
]
Neste exemplo, o modelo utilizado é o Amazon Nova Micro (us.amazon.nova-v1:0), o modelo de texto mais rápido e econômico da família Amazon Nova. O Amazon Bedrock oferece acesso a modelos de diferentes provedores (como Anthropic Claude e Meta Llama), com diferentes características de custo, velocidade e qualidade. Para textos curtos como explicações de produtos, modelos mais leves tendem a ser suficientes; modelos mais capazes podem produzir explicações mais elaboradas, mas com maior custo e latência. Para mais informações sobre os modelos disponíveis, consulte a documentação do Amazon Bedrock.
As chamadas ao Amazon Bedrock para cada produto recomendado são independentes entre si e podem ser paralelizadas para reduzir a latência total da requisição.
Mantendo as recomendações atualizadas
O Amazon Personalize retreina os modelos automaticamente a cada 7 dias, sem exigir intervenção manual e sem downtime. Para manter as recomendações atualizadas, basta importar periodicamente novos dados de compras, produtos e usuários por meio de jobs de importação em lote.
Para o recommender Frequently Bought Together, novos itens adicionados ao catálogo ficam disponíveis para recomendação em até 2 horas após a importação, mesmo antes do próximo retreinamento completo. Para mais detalhes, consulte Como os novos dados influenciam as recomendações em tempo real.
Considerações de segurança
Ao implementar a solução proposta, garanta que as permissões IAM sigam o princípio do menor privilégio, concedendo a cada serviço apenas o acesso que ele realmente precisa. Os dados armazenados no S3 devem usar criptografia em repouso. Para boas práticas específicas de cada serviço, consulte as documentações de segurança do Amazon Personalize e do Amazon Bedrock.
Conclusão
A combinação de Amazon Personalize e Amazon Bedrock permite expandir as recomendações tradicionais e oferecer ao comprador um contexto que justifica cada sugestão. O Amazon Personalize é responsável pela relevância, identificando produtos com base em padrões reais de compra. O Amazon Bedrock cuida da comunicação, traduzindo essa relevância em linguagem natural, com base nas descrições reais dos produtos. O resultado é uma experiência de compra mais informativa, que ajuda o comprador a tomar decisões com mais confiança.
Você pode aplicar a mesma abordagem a outros domínios em que recomendações se beneficiam de contexto, como streaming de mídia, plataformas educacionais e serviços financeiros, bastando adaptar as descrições dos itens e o prompt utilizado.
Removendo os recursos
O recommender do Amazon Personalize gera custos enquanto estiver ativo. Se você criou os recursos apenas para seguir este post e não pretende continuar usando, lembre-se de excluir o recommender, o dataset group e os arquivos no S3. O Amazon Bedrock e o AWS Lambda cobram por uso, então não geram custos quando ociosos. Para entender a ordem correta de exclusão dos recursos do Amazon Personalize, consulte a documentação de limpeza. Para mais detalhes sobre custos do Amazon Personalize, consulte a página de preços.
Próximos passos
O Amazon Personalize oferece outros recursos para expandir e refinar o sistema de recomendação:
- Outros algoritmos: além do Frequently Bought Together, o Amazon Personalize oferece outros recommenders para e-commerce, como Best Sellers e Recommended for You, e suporte a casos de uso personalizados com algoritmos configuráveis.
- Filtros: use filtros para excluir produtos fora de estoque, de categorias irrelevantes, já comprados pelo usuário, entre outras funcionalidades.
- Eventos em tempo real: integre o Event Tracker para que compras e interações recentes influenciem as recomendações imediatamente, sem aguardar o próximo retreinamento.
Para o Amazon Bedrock, experimente diferentes modelos para encontrar o equilíbrio entre custo e qualidade das explicações geradas.
Autores
![]() |
Rafael Werneck é um Arquiteto de Prototipação Sênior na AWS Brasil. Anteriormente, trabalhou como Software Development Engineer na Amazon.com.br e no Amazon RDS Performance Insights. |
![]() |
Rafael Ribeiro Martins é um Sênior Technical Program Manager na AWS Brasil. Ele ajuda clientes a vislumbrar a arte do possível na AWS, trabalhando com eles em engajamentos inovadores de prototipação. Com mais de 10 anos de experiência em gerenciamento de projetos para programas técnicos, ele atualmente foca em gerenciamento de projetos relacionados a tecnologias emergentes. |

