Acelerando a Extração de Entidades Customizadas com o Claude Tool Use no Amazon Bedrock

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

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/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *