Desafio de Extração de Informações em Dados Não Estruturados
As organizações enfrentam um desafio comum em diversos setores: como extrair informações valiosas de grandes volumes de dados não estruturados de forma eficiente. Abordagens tradicionais frequentemente envolvem processos que consomem muitos recursos e utilizam modelos rígidos e inflexíveis. A AWS apresenta uma solução inovadora através do Claude Tool Use disponível no Amazon Bedrock, que aproveita o poder dos modelos de linguagem de grande escala para realizar extração de entidades dinâmica e adaptável, sem requerer configuração extensiva ou treinamento prévio.
O que é Claude Tool Use (Function Calling)?
O Claude Tool Use, também conhecido como function calling, é uma capacidade poderosa que permite expandir as habilidades do Claude estabelecendo e invocando funções ou ferramentas externas. Este recurso viabiliza fornecer ao Claude uma coleção de ferramentas pré-estabelecidas que ele pode acessar e empregar conforme necessário, potencializando sua funcionalidade.
O funcionamento é direto: usuários definem um conjunto de ferramentas com seus nomes, esquemas de entrada e descrições. Quando recebe um prompt do usuário que pode requerer o uso de uma ou mais ferramentas, o Claude avalia a solicitação e determina se alguma ferramenta seria útil. Se aplicável, o modelo seleciona qual ferramenta utilizar e com quais parâmetros de entrada.
Arquitetura da Solução
A solução apresentada demonstra como extrair campos customizados de carteiras de motorista utilizando o Claude Tool Use no Amazon Bedrock. Trata-se de uma solução serverless que processa documentos em tempo real, extraindo informações como nomes, datas e endereços sem necessidade de treinamento tradicional de modelos.
A arquitetura utiliza vários serviços AWS para criar um pipeline integrado e eficiente:
- Usuários fazem upload de documentos no Amazon S3 para processamento
- Um evento de PUT do S3 dispara uma função do AWS Lambda
- O Lambda processa o documento e envia para o Amazon Bedrock
- O Bedrock invoca o Claude para extração de entidades
- Os resultados são registrados no Amazon CloudWatch para monitoramento
Componentes Principais
- Amazon S3: Armazena os documentos de entrada
- AWS Lambda: Dispara no upload de arquivo, envia prompts e dados ao Claude, armazena resultados
- Amazon Bedrock (Claude): Processa a entrada e extrai as entidades
- Amazon CloudWatch: Monitora e registra o desempenho do workflow
Pré-requisitos
- Conta AWS com acesso ao Amazon Bedrock
- Permissões de Gestão de Identidade e Acesso (IAM) para acessar Amazon Bedrock, AWS Lambda e Amazon S3
- Conhecimento básico de Python e JSON
- Acesso ao modelo Claude no Amazon Bedrock
- Configuração de perfil de inferência entre regiões para modelos Claude
Guia de Implementação Passo a Passo
Preparação do Ambiente (10 minutos)
Crie um bucket S3 de origem para a entrada (por exemplo, driver-license-input). Configure as funções e permissões de IAM conforme necessário. Um exemplo de política de permissões:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:*::foundation-model/*",
"arn:aws:bedrock:*:111122223333:inference-profile/*"
},
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
}
]
}
Criação da Função Lambda (30 minutos)
A função Lambda é disparada automaticamente quando uma nova imagem é enviada para o seu bucket S3. Ela lê a imagem, codifica em base64 e a envia para o Claude 4.5 Sonnet via Amazon Bedrock usando a API de Tool Use.
A função define uma ferramenta chamada extract_license_fields para fins de demonstração. No entanto, você pode definir nomes de ferramentas e esquemas baseados em seu caso de uso específico — por exemplo, extração de dados de cartões de seguro, crachás de identificação ou formulários comerciais. O Claude seleciona dinamicamente se invoca sua ferramenta baseado na relevância do prompt e estrutura da entrada.
Estamos usando "tool_choice": "auto" para deixar o Claude decidir quando invocar a função. Em casos de produção, você pode querer definir explicitamente "tool_choice": { "type": "tool", "name": "seu_nome_de_ferramenta" } para comportamento determinístico.
Acesse o console do AWS Lambda, escolha Create function, selecione Author from scratch, configure o runtime para Python 3.12 e crie a função.
Configuração do Timeout do Lambda
Na configuração da sua função Lambda, acesse a aba General Configuration e edite o timeout, aumentando do padrão de 3 segundos para no mínimo 30 segundos. Recomenda-se configurar para 1-2 minutos para imagens maiores. Este ajuste é crucial pois o processamento de imagens através do Claude pode levar mais tempo que o timeout padrão do Lambda, especialmente para imagens de alta resolução ou ao processar múltiplos campos.
Código da Função Lambda
Cole o seguinte código no arquivo lambda_function.py:
import boto3, json
import base64
def lambda_handler(event, context):
bedrock = boto3.client("bedrock-runtime")
s3 = boto3.client("s3")
bucket = event["Records"][0]["s3"]["bucket"]["name"]
key = event["Records"][0]["s3"]["object"]["key"]
file = s3.get_object(Bucket=bucket, Key=key)
# Convert image to base64
image_data = file["Body"].read()
base64_image = base64.b64encode(image_data).decode('utf-8')
# Define tool schema
tools = [{
"name": "extract_license_fields",
"input_schema": {
"type": "object",
"properties": {
"first_name": { "type": "string" },
"last_name": { "type": "string" },
"issue_date": { "type": "string" },
"license_number": { "type": "string" },
"address": {
"type": "object",
"properties": {
"street": { "type": "string" },
"city": { "type": "string" },
"state": { "type": "string" },
"zip": { "type": "string" }
}
}
},
"required": ["first_name", "last_name", "issue_date", "license_number", "address"]
}
}]
payload = {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 2048,
"messages": [{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": base64_image
}
},
{
"type": "text",
"text": "Extract the driver's license fields from this image."
}
]
}],
"tools": tools
}
try:
response = bedrock.invoke_model(
modelId="global.anthropic.claude-sonnet-4-5-20250929-v1:0",
body=json.dumps(payload)
)
result = json.loads(response["body"].read())
# Print every step for debugging
print("1. Raw Response:", json.dumps(result, indent=2))
if "content" in result:
print("2. Content found in response")
for content in result["content"]:
print("3. Content item:", json.dumps(content, indent=2))
if isinstance(content, dict):
print("4. Content type:", content.get("type"))
if content.get("type") == "text":
print("5. Text content:", content.get("text"))
if content.get("type") == "tool_calls":
print("6. Tool calls found")
extracted = json.loads(content["tool_calls"][0]["function"]["arguments"])
print("7. Extracted data:", json.dumps(extracted, indent=2))
return {
"statusCode": 200,
"body": json.dumps({
"message": "Process completed",
"raw_response": result
}, indent=2)
}
except Exception as e:
print(f"Error occurred: {str(e)}")
return {
"statusCode": 500,
"body": json.dumps({
"error": str(e),
"type": str(type(e))
})
}
Deployment da Função Lambda
Após colar o código, escolha o botão Deploy no lado esquerdo do editor de código e aguarde a mensagem de confirmação. Sempre lembre-se de fazer deploy do seu código após realizar alterações, garantindo que o código mais recente seja salvo e executado quando a função Lambda for disparada.
Trabalhando com Esquemas de Tool Use do Claude
O Amazon Bedrock com Claude 4.5 Sonnet suporta function calling usando Tool Use, onde você define ferramentas exigíveis com esquemas JSON claros. Uma entrada de ferramenta válida deve incluir:
- name: Identificador da sua ferramenta (ex: extract_license_fields)
- input_schema: Esquema JSON que define campos obrigatórios, tipos e estrutura
Você pode definir múltiplas ferramentas no array de ferramentas. O Claude seleciona uma (ou nenhuma) dependendo do valor de tool_choice e o quão bem o prompt corresponde a um esquema específico. Use "tool_choice": "auto" para deixar o Claude decidir. Use um nome de ferramenta explícito para forçar invocação: "tool_choice": { "type": "tool", "name": "extract_license_fields" }.
Note que o campo tool_choice é opcional. Se omitido, o Claude padrão para “auto”.
Configuração de Notificação de Evento do S3 (5 minutos)
Abra o console do Amazon S3, selecione seu bucket, acesse a aba Properties, role para baixo até Event notifications, clique em Create event notification. Digite um nome para a notificação (por exemplo, “LambdaTrigger”), selecione PUT sob Event types, escolha Lambda function como Destination, selecione sua função Lambda no dropdown e salve as alterações.
Testes e Validação
Formatos Suportados
O Claude 4.5 suporta entradas de imagem nos formatos JPEG, PNG, WebP e GIF de frame único. Esta implementação atualmente suporta apenas imagens .jpeg, mas você pode estender o suporte para outros formatos modificando o campo media_type na função Lambda para corresponder ao tipo MIME do arquivo enviado.
Limites de Tamanho e Resolução
- Tamanho máximo de imagem: 20 MB
- Resolução recomendada: 300 DPI ou superior
- Dimensões máximas: 4096 x 4096 pixels
Imagens maiores que isso podem falhar no processamento ou produzir resultados imprecisos.
Dicas de Pré-processamento para Melhor Precisão
- Recorte a imagem próxima do documento para remover ruído e seções irrelevantes
- Ajuste contraste e brilho para garantir que o texto seja claramente legível
- Desincline documentos digitalizados e garanta que o texto esteja alinhado horizontalmente
- Evite screenshots de baixa resolução ou imagens com artefatos de compressão pesada
- Prefira fundos brancos e texto escuro para máxima clareza de OCR
Upload de Imagem de Teste
Abra seu bucket S3, faça upload de uma imagem de carteira de motorista (formatos suportados: .jpeg, .jpg). Garanta que a imagem esteja clara e legível para melhores resultados.
Monitoramento com CloudWatch
Acesse o console do Amazon CloudWatch, clique em Log groups na navegação esquerda, procure pelo nome da sua função Lambda, clique no stream de log mais recente (ordenado por timestamp) e visualize os resultados da execução.
Otimização e Boas Práticas
Otimização de Desempenho
- Configure as definições de memória e timeout do Lambda apropriadamente
- Implemente processamento em lote para múltiplos documentos
- Use notificações de evento do S3 para processamento automático
- Adicione métricas do CloudWatch para monitoramento contínuo
Boas Práticas de Segurança
- Implemente criptografia em repouso para buckets S3
- Use chaves do Serviço de Gerenciamento de Chaves da AWS (KMS) para dados sensíveis
- Aplique políticas de IAM com privilégio mínimo
- Habilite endpoints de nuvem privada virtual para acesso de rede privada
Tratamento de Erros e Monitoramento
A saída do Claude é estruturada como uma lista de blocos de conteúdo, que podem incluir respostas de texto, tool_calls ou outros tipos de dados. Para depuração: sempre registre a resposta bruta do Claude, verifique se tool_calls está presente na resposta, e use um bloco try-except em torno da chamada de função para capturar erros como payloads malformados ou timeouts de modelo.
Limpeza
Após completar seus testes, delete o bucket S3 e seu conteúdo, remova as funções Lambda, delete as funções e políticas de IAM, e desabilite o acesso ao Bedrock se não mais necessário.
Conclusão
O Claude Tool Use no Amazon Bedrock oferece uma solução poderosa para extração de entidades customizadas, minimizando a necessidade de modelos complexos de aprendizado de máquina. Esta arquitetura serverless viabiliza processamento escalável e econômico de documentos com configuração e manutenção mínimas. Ao aproveitar o poder de modelos de linguagem de grande escala através do Amazon Bedrock, as organizações podem desbloquear novos níveis de eficiência, insight e inovação no tratamento de dados não estruturados.
Próximos Passos
Recomenda-se explorar esta solução implementando o código de amostra em seu ambiente e customizando-o para seus casos de uso específicos. Participe das discussões sobre soluções de extração de entidades na comunidade do AWS re:Post, onde você pode compartilhar experiências e aprender com outros desenvolvedores.
Para insights técnicos mais profundos, explore a documentação abrangente sobre Amazon Bedrock, AWS Lambda e Amazon S3. Considere aprimorar sua implementação integrando-a com Amazon Textract para recursos adicionais de processamento de documentos ou Amazon Comprehend para análise de texto avançada.
Para manter-se atualizado sobre soluções similares, inscreva-se no Blog de Aprendizado de Máquina da AWS e explore mais exemplos no repositório de Amostras da AWS no GitHub. Se você está começando com serviços de aprendizado de máquina da AWS, confira a Universidade de Aprendizado de Máquina da AWS ou explore a Biblioteca de Soluções da AWS. Para soluções empresariais e suporte, entre em contato através de sua equipe de conta da AWS.
Fonte
Accelerating custom entity recognition with Claude tool use in Amazon Bedrock (https://aws.amazon.com/blogs/machine-learning/accelerating-custom-entity-recognition-with-claude-tool-use-in-amazon-bedrock/)
Leave a Reply