Home / Empresas de IA / Como acelerar o reconhecimento personalizado de entidades com Claude Tool use no Amazon Bedrock

Como acelerar o reconhecimento personalizado de entidades com Claude Tool use no Amazon Bedrock

Extrair informações valiosas de grandes volumes de dados não estruturados é um desafio comum para empresas de diversos setores. Métodos tradicionais costumam demandar muitos recursos e modelos rígidos, dificultando adaptações rápidas. Para resolver essas limitações, a AWS apresenta uma solução inovadora: o uso do Claude Tool use (function calling) no Amazon Bedrock, que utiliza modelos de linguagem avançados para realizar reconhecimento dinâmico e adaptável de entidades sem a necessidade de treinamentos extensivos.

\n\n

O que é Claude Tool use e como ele funciona no Amazon Bedrock

\n

Claude Tool use, também conhecido como function calling, é um recurso que amplia as capacidades do modelo Claude ao permitir a chamada e execução de funções externas pré-definidas. Isso possibilita que o modelo acesse ferramentas específicas conforme a necessidade do prompt do usuário, tornando o processo de extração de dados mais flexível e contextual.

\n

Amazon Bedrock é um serviço gerenciado de inteligência artificial generativa que disponibiliza diversos modelos base de líderes do setor, como a Anthropic. Com ele, implementar o Claude Tool use torna-se simples: o usuário define as ferramentas (tools) com seus nomes, esquemas de entrada e descrições; o modelo avalia o prompt e decide se alguma ferramenta deve ser utilizada, escolhendo qual ferramenta chamar e com quais dados.

\n\n

Visão geral da solução para reconhecimento de entidades personalizadas

\n

Este tutorial demonstra a extração de campos personalizados de carteiras de motorista usando Claude Tool use no Amazon Bedrock. A solução serverless processa documentos em tempo real, extraindo informações como nome, data de emissão e endereço, eliminando a necessidade de treinamentos tradicionais de modelos.

\n\n

Arquitetura da solução

\n

    \n

  • Amazon S3: Armazena os documentos de entrada.
  • \n

  • AWS Lambda: Função acionada pelo upload no S3, que processa o arquivo e envia o prompt para o Claude.
  • \n

  • Amazon Bedrock (Claude): Processa o arquivo e extrai as entidades.
  • \n

  • Amazon CloudWatch: Monitora e registra o desempenho do fluxo.
  • \n

\n

Essa arquitetura serverless permite escalabilidade automática e reduz a complexidade de gerenciamento de infraestrutura.

\n\n

Pré-requisitos para implementação

\n

    \n

  • Conta AWS com acesso ao Amazon Bedrock.
  • \n

  • Permissões IAM para Amazon Bedrock, AWS Lambda e Amazon S3.
  • \n

  • Conhecimentos básicos em Python e JSON.
  • \n

  • Acesso ao modelo Claude no Amazon Bedrock.
  • \n

  • Configuração de um perfil de inferência cross-region para Claude.
  • \n

\n\n

Passo a passo para criar a solução

\n\n

1. Configurar o bucket S3

\n

    \n

  • Crie um bucket S3 para armazenar as imagens de entrada, por exemplo, “driver-license-input”.
  • \n

  • Configure as políticas IAM para permitir que Lambda e Bedrock acessem o bucket. Exemplo de política JSON:
  • \n

\n

{\n  "Version": "2012-10-17",\n  "Statement": [\n    {\n      "Effect": "Allow",\n      "Action": "bedrock:InvokeModel",\n      "Resource": ["arn:aws:bedrock:*::foundation-model/*", "arn:aws:bedrock:*:111122223333:inference-profile/*"]\n    },\n    {\n      "Effect": "Allow",\n      "Action": "s3:GetObject",\n      "Resource": "arn:aws:s3:::driver-license-input/*"\n    }\n  ]\n}\n

\n\n

2. Criar a função AWS Lambda

\n

A função Lambda é disparada automaticamente ao fazer upload de uma imagem no bucket S3. Ela lê o arquivo, codifica-o em base64 e envia o conteúdo para o modelo Claude 4.5 Sonnet via Amazon Bedrock usando a API Tool use.

\n

Configurações importantes:

\n

    \n

  • Runtime: Python 3.12
  • \n

  • Timeout: aumente para pelo menos 30 segundos (recomendado 1-2 minutos) para processar imagens maiores.
  • \n

\n

Código principal da função Lambda (lambda_function.py):

\n

import boto3, json\nimport base64\n\ndef lambda_handler(event, context):\n    bedrock = boto3.client("bedrock-runtime")\n    s3 = boto3.client("s3")\n\n    bucket = event["Records"][0]["s3"]["bucket"]["name"]\n    key = event["Records"][0]["s3"]["object"]["key"]\n\n    file = s3.get_object(Bucket=bucket, Key=key)\n    image_data = file["Body"].read()\n    base64_image = base64.b64encode(image_data).decode('utf-8')\n\n    tools = [{\n        "name": "extract_license_fields",\n        "input_schema": {\n            "type": "object",\n            "properties": {\n                "first_name": {"type": "string"},\n                "last_name": {"type": "string"},\n                "issue_date": {"type": "string"},\n                "license_number": {"type": "string"},\n                "address": {\n                    "type": "object",\n                    "properties": {\n                        "street": {"type": "string"},\n                        "city": {"type": "string"},\n                        "state": {"type": "string"},\n                        "zip": {"type": "string"}\n                    }\n                }\n            },\n            "required": ["first_name", "last_name", "issue_date", "license_number", "address"]\n        }\n    }]\n\n    payload = {\n        "anthropic_version": "bedrock-2023-05-31",\n        "max_tokens": 2048,\n        "messages": [{\n            "role": "user",\n            "content": [\n                {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": base64_image}},\n                {"type": "text", "text": "Extract the driver's license fields from this image."}\n            ]\n        }],\n        "tools": tools\n    }\n\n    try:\n        response = bedrock.invoke_model(\n            modelId="global.anthropic.claude-sonnet-4-5-20250929-v1:0",\n            body=json.dumps(payload)\n        )\n        result = json.loads(response["body"].read())\n\n        print("Resposta bruta:", json.dumps(result, indent=2))\n\n        if "content" in result:\n            for content in result["content"]:\n                if content.get("type") == "tool_calls":\n                    extracted = json.loads(content["tool_calls"][0]["function"]["arguments"])\n                    print("Dados extraídos:", json.dumps(extracted, indent=2))\n\n        return {\n            "statusCode": 200,\n            "body": json.dumps({"message": "Processamento concluído", "raw_response": result}, indent=2)\n        }\n    except Exception as e:\n        print(f"Erro ocorrido: {str(e)}")\n        return {\n            "statusCode": 500,\n            "body": json.dumps({"error": str(e), "type": str(type(e))})\n        }\n

\n

Após colar o código, clique em Deploy para salvar as alterações.

\n\n

3. Configurar notificação de eventos no S3

\n

    \n

  • Acesse o console do Amazon S3 e selecione seu bucket.
  • \n

  • Na aba Properties, localize Event notifications e crie uma nova notificação.
  • \n

  • Configure para disparar a função Lambda no evento PUT (upload de arquivo).
  • \n

\n\n

Considerações sobre formatos, limites e melhores práticas

\n

    \n

  • Formatos suportados: JPEG, PNG, WebP e GIF (frame único). O exemplo atual suporta JPEG, mas pode ser adaptado para outros formatos ajustando o campo media_type.
  • \n

  • Tamanho máximo da imagem: 20 MB.
  • \n

  • Resolução recomendada: 300 DPI ou superior, dimensões máximas de 4096×4096 pixels.
  • \n

  • Dicas para melhorar a precisão: recorte a imagem para eliminar ruídos, ajuste contraste e brilho, alinhe horizontalmente o texto, prefira fundo branco com texto escuro.
  • \n

\n\n

Monitoramento e depuração

\n

Use o Amazon CloudWatch para visualizar logs da função Lambda. Verifique o conteúdo da resposta do Claude para identificar chamadas de ferramentas e dados extraídos. Sempre registre a resposta bruta para facilitar a depuração e trate exceções para capturar eventuais erros.

\n\n

Boas práticas de segurança e desempenho

\n

    \n

  • Implemente criptografia em repouso para os buckets S3.
  • \n

  • Utilize chaves do AWS KMS para dados sensíveis.
  • \n

  • Aplique políticas IAM com o princípio do menor privilégio.
  • \n

  • Considere usar endpoints VPC para acesso privado.
  • \n

  • Ajuste memória e timeout da função Lambda conforme o tamanho e complexidade dos documentos.
  • \n

  • Implemente processamento em lote para múltiplos documentos, se necessário.
  • \n

\n\n

Limpeza após testes

\n

    \n

  • Exclua buckets S3 e seus conteúdos.
  • \n

  • Remova funções Lambda criadas.
  • \n

  • Apague roles e políticas IAM associadas.
  • \n

  • Revogue acessos ao Bedrock se não forem mais necessários.
  • \n

\n\n

Links úteis para aprofundamento

\n

\n\n

Com essa solução, é possível acelerar e simplificar a extração de dados personalizados de documentos variados, aproveitando a capacidade dos grandes modelos de linguagem da Anthropic via Amazon Bedrock. Ao automatizar esse processo com arquitetura serverless, sua empresa ganha em eficiência, escalabilidade e redução de custos operacionais.

Marcado:

Deixe um Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *