Tutorial: Comece a usar o Amazon A2I API - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial: Comece a usar o Amazon A2I API

Este tutorial explica as API operações que você pode usar para começar a usar o Amazon A2I.

Para usar um Jupyter Notebook para executar essas operações, selecione um Jupyter Notebook Casos de uso e exemplos usando o Amazon A2I e use-o Use a instância do SageMaker notebook com o Amazon A2I Jupyter Notebook para aprender a usá-lo em uma instância do notebook. SageMaker

Para saber mais sobre as API operações que você pode usar com a Amazon A2I, consulte. Usar APIs no Amazon Augmented AI

Crie uma equipe de trabalho privada

Você pode criar uma equipe de trabalho privada e se adicionar como trabalhador para poder visualizar o Amazon A2I.

Se você não estiver familiarizado com o Amazon Cognito, recomendamos que você use o SageMaker console para criar uma força de trabalho privada e se adicionar como trabalhador particular. Para obter instruções, consulte Etapa 1: Criar uma equipe de trabalho.

Se você estiver familiarizado com o Amazon Cognito, você pode usar as instruções a seguir para criar uma equipe de trabalho privada usando o. SageMaker API Depois de criar uma equipe de trabalho, anote a equipe de trabalho ARN (WorkteamArn).

Para saber mais sobre a força de trabalho privada e outras configurações disponíveis, consulte Força de trabalho privada.

Criando uma força de trabalho privada

Se você não criou uma força de trabalho privada, pode fazer isso usando um grupo de usuários do Amazon Cognito. Verifique se você se adicionou a esse grupo de usuários. Você pode criar uma equipe de trabalho privada usando o AWS SDK for Python (Boto3) create_workforcefunção. Para outros idiomas específicosSDKs, consulte a lista em. CreateWorkforce

response = client.create_workforce( CognitoConfig={ "UserPool": "Pool_ID", "ClientId": "app-client-id" }, WorkforceName="workforce-name" )
Crie uma equipe de trabalho privada

Depois de criar uma força de trabalho privada no AWS Região Para configurar e iniciar seu ciclo humano, você pode criar uma equipe de trabalho privada usando o AWS SDK for Python (Boto3) create_workteamfunção. Para outros idiomas específicosSDKs, consulte a lista em. CreateWorkteam

response = client.create_workteam( WorkteamName="work-team-name", WorkforceName= "workforce-name", MemberDefinitions=[ { "CognitoMemberDefinition": { "UserPool": "<aws-region>_ID", "UserGroup": "user-group", "ClientId": "app-client-id" }, } ] )

Acesse sua equipe de trabalho da ARN seguinte forma:

workteamArn = response["WorkteamArn"]
Liste equipes de trabalho privadas em sua conta

Se você já criou uma equipe de trabalho privada, você pode listar todas as equipes de trabalho em uma determinada AWS Região em sua conta usando o AWS SDK for Python (Boto3) list_workteamsfunção. Para outros idiomas específicosSDKs, consulte a lista em. ListWorkteams

response = client.list_workteams()

Se você tiver várias equipes de trabalho em sua conta, talvez queira usar MaxResults , SortBy e NameContains filtrar seus resultados.

Criar um fluxo de trabalho de análise humana

Você pode criar um fluxo de trabalho de revisão humana usando a operação Amazon A2ICreateFlowDefinition. Antes de criar seu fluxo de trabalho de revisão humana, você precisa criar uma UI de tarefa humana. Você pode fazer isso com a operação CreateHumanTaskUi.

Se você estiver usando o Amazon A2I com as integrações Amazon Textract ou Amazon Rekognition, você pode especificar as condições de ativação usando um. JSON

Crie uma interface de usuário de tarefas humanas

Se você estiver criando um fluxo de trabalho de revisão humana para ser usado com as integrações do Amazon Textract ou do Amazon Rekognition, precisará usar e modificar o modelo de tarefa de trabalhador predefinido. Para todas as integrações personalizadas, você pode usar seu próprio modelo de tarefa de trabalhador personalizado. Use a tabela a seguir para aprender como criar uma interface de usuário de tarefa humana usando um modelo de tarefa de trabalho para as duas integrações integradas. Substitua o modelo pelo seu para personalizar essa solicitação.

Amazon Textract – Key-value pair extraction

Para saber mais sobre este modelo, consulte Exemplo de modelo personalizado do Amazon Textract.

template = r""" <script src="https://assets.crowd.aws/crowd-html-elements.js"></script> {% capture s3_uri %}http://s3.amazonaws.com/{{ task.input.aiServiceRequest.document.s3Object.bucket }}/{{ task.input.aiServiceRequest.document.s3Object.name }}{% endcapture %} <crowd-form> <crowd-textract-analyze-document src="{{ s3_uri | grant_read_access }}" initial-value="{{ task.input.selectedAiServiceResponse.blocks }}" header="Review the key-value pairs listed on the right and correct them if they don"t match the following document." no-key-edit="" no-geometry-edit="" keys="{{ task.input.humanLoopContext.importantFormKeys }}" block-types='["KEY_VALUE_SET"]'> <short-instructions header="Instructions"> <p>Click on a key-value block to highlight the corresponding key-value pair in the document. </p><p><br></p> <p>If it is a valid key-value pair, review the content for the value. If the content is incorrect, correct it. </p><p><br></p> <p>The text of the value is incorrect, correct it.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/correct-value-text.png"> </p><p><br></p> <p>A wrong value is identified, correct it.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/correct-value.png"> </p><p><br></p> <p>If it is not a valid key-value relationship, choose No.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/not-a-key-value-pair.png"> </p><p><br></p> <p>If you can’t find the key in the document, choose Key not found.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/key-is-not-found.png"> </p><p><br></p> <p>If the content of a field is empty, choose Value is blank.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/value-is-blank.png"> </p><p><br></p> <p><strong>Examples</strong></p> <p>Key and value are often displayed next or below to each other. </p><p><br></p> <p>Key and value displayed in one line.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/sample-key-value-pair-1.png"> </p><p><br></p> <p>Key and value displayed in two lines.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/sample-key-value-pair-2.png"> </p><p><br></p> <p>If the content of the value has multiple lines, enter all the text without line break. Include all value text even if it extends beyond the highlight box.</p> <p><img src="https://assets.crowd.aws/images/a2i-console/multiple-lines.png"></p> </short-instructions> <full-instructions header="Instructions"></full-instructions> </crowd-textract-analyze-document> </crowd-form> """
Amazon Rekognition – Image moderation

Para saber mais sobre este modelo, consulte Exemplo de modelo personalizado do Amazon Rekognition.

template = r""" <script src="https://assets.crowd.aws/crowd-html-elements.js"></script> {% capture s3_uri %}http://s3.amazonaws.com/{{ task.input.aiServiceRequest.image.s3Object.bucket }}/{{ task.input.aiServiceRequest.image.s3Object.name }}{% endcapture %} <crowd-form> <crowd-rekognition-detect-moderation-labels categories='[ {% for label in task.input.selectedAiServiceResponse.moderationLabels %} { name: "{{ label.name }}", parentName: "{{ label.parentName }}", }, {% endfor %} ]' src="{{ s3_uri | grant_read_access }}" header="Review the image and choose all applicable categories." > <short-instructions header="Instructions"> <style> .instructions { white-space: pre-wrap; } </style> <p class="instructions">Review the image and choose all applicable categories. If no categories apply, choose None. <b>Nudity</b> Visuals depicting nude male or female person or persons <b>Partial Nudity</b> Visuals depicting covered up nudity, for example using hands or pose <b>Revealing Clothes</b> Visuals depicting revealing clothes and poses <b>Physical Violence</b> Visuals depicting violent physical assault, such as kicking or punching <b>Weapon Violence</b> Visuals depicting violence using weapons like firearms or blades, such as shooting <b>Weapons</b> Visuals depicting weapons like firearms and blades </short-instructions> <full-instructions header="Instructions"></full-instructions> </crowd-rekognition-detect-moderation-labels> </crowd-form>"""
Custom Integration

Veja a seguir um exemplo de modelo que pode ser usado em uma integração personalizada. Esse modelo é usado neste caderno, demonstrando uma integração personalizada com o Amazon Comprehend.

template = r""" <script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <crowd-form> <crowd-classifier name="sentiment" categories='["Positive", "Negative", "Neutral", "Mixed"]' initial-value="{{ task.input.initialValue }}" header="What sentiment does this text convey?" > <classification-target> {{ task.input.taskObject }} </classification-target> <full-instructions header="Sentiment Analysis Instructions"> <p><strong>Positive</strong> sentiment include: joy, excitement, delight</p> <p><strong>Negative</strong> sentiment include: anger, sarcasm, anxiety</p> <p><strong>Neutral</strong>: neither positive or negative, such as stating a fact</p> <p><strong>Mixed</strong>: when the sentiment is mixed</p> </full-instructions> <short-instructions> Choose the primary sentiment that is expressed by the text. </short-instructions> </crowd-classifier> </crowd-form> """

Usando o modelo especificado acima, você pode criar um modelo usando o AWS SDK for Python (Boto3) create_human_task_uifunção. Para outros idiomas específicosSDKs, consulte a lista em. CreateHumanTaskUi

response = client.create_human_task_ui( HumanTaskUiName="human-task-ui-name", UiTemplate={ "Content": template } )

Esse elemento de resposta contém a interface de usuário da tarefa humanaARN. Salve isso da seguinte forma:

humanTaskUiArn = response["HumanTaskUiArn"]

Crie JSON para especificar as condições de ativação

Para as integrações integradas do Amazon Textract e do Amazon Rekognition, você pode salvar as condições de ativação em um objeto e usá-las em sua solicitação. JSON CreateFlowDefinition

Em seguida, selecione uma guia para ver exemplos de condições de ativação que você pode usar para essas integrações integradas. Para obter informações adicionais sobre as opções de condição de ativação, consulte Esquema JSON para condições de ativação de loop humano no Amazon Augmented AI.

Amazon Textract – Key-value pair extraction

Este exemplo especifica condições para chaves específicas (como Mail address) no documento. Se a confiança do Amazon Textract estiver fora dos limites definidos aqui, o documento será enviado a uma pessoa para análise, com as chaves específicas que iniciaram o ciclo humano enviadas ao trabalhador.

import json humanLoopActivationConditions = json.dumps( { "Conditions": [ { "Or": [ { "ConditionType": "ImportantFormKeyConfidenceCheck", "ConditionParameters": { "ImportantFormKey": "Mail address", "ImportantFormKeyAliases": ["Mail Address:","Mail address:", "Mailing Add:","Mailing Addresses"], "KeyValueBlockConfidenceLessThan": 100, "WordBlockConfidenceLessThan": 100 } }, { "ConditionType": "MissingImportantFormKey", "ConditionParameters": { "ImportantFormKey": "Mail address", "ImportantFormKeyAliases": ["Mail Address:","Mail address:","Mailing Add:","Mailing Addresses"] } }, { "ConditionType": "ImportantFormKeyConfidenceCheck", "ConditionParameters": { "ImportantFormKey": "Phone Number", "ImportantFormKeyAliases": ["Phone number:", "Phone No.:", "Number:"], "KeyValueBlockConfidenceLessThan": 100, "WordBlockConfidenceLessThan": 100 } }, { "ConditionType": "ImportantFormKeyConfidenceCheck", "ConditionParameters": { "ImportantFormKey": "*", "KeyValueBlockConfidenceLessThan": 100, "WordBlockConfidenceLessThan": 100 } }, { "ConditionType": "ImportantFormKeyConfidenceCheck", "ConditionParameters": { "ImportantFormKey": "*", "KeyValueBlockConfidenceGreaterThan": 0, "WordBlockConfidenceGreaterThan": 0 } } ] } ] } )
Amazon Rekognition – Image moderation

As condições de ativação do loop humano usadas aqui são adaptadas à moderação de conteúdo do Amazon Rekognition; elas se baseiam nos limites de confiança dos rótulos e dos rótulos de moderação Suggestive e Female Swimwear Or Underwear.

import json humanLoopActivationConditions = json.dumps( { "Conditions": [ { "Or": [ { "ConditionType": "ModerationLabelConfidenceCheck", "ConditionParameters": { "ModerationLabelName": "Suggestive", "ConfidenceLessThan": 98 } }, { "ConditionType": "ModerationLabelConfidenceCheck", "ConditionParameters": { "ModerationLabelName": "Female Swimwear Or Underwear", "ConfidenceGreaterThan": 98 } } ] } ] } )

Criar um fluxo de trabalho de análise humana

Esta seção fornece um exemplo do CreateFlowDefinition AWS SDK for Python (Boto3) solicitação usando os recursos criados nas seções anteriores. Para outros idiomas específicosSDKs, consulte a lista em. CreateFlowDefinition Use as guias na tabela a seguir para ver as solicitações para criar um fluxo de trabalho de revisão humana para as integrações integradas do Amazon Textract e do Amazon Rekognition.

Amazon Textract – Key-value pair extraction

Se você usar a integração integrada com o Amazon Textract, deverá especificar "AWS/Textract/AnalyzeDocument/Forms/V1" para "AwsManagedHumanLoopRequestSource" em HumanLoopRequestSource.

response = client.create_flow_definition( FlowDefinitionName="human-review-workflow-name", HumanLoopRequestSource={ "AwsManagedHumanLoopRequestSource": "AWS/Textract/AnalyzeDocument/Forms/V1" }, HumanLoopActivationConfig={ "HumanLoopActivationConditionsConfig": { "HumanLoopActivationConditions": humanLoopActivationConditions } }, HumanLoopConfig={ "WorkteamArn": workteamArn, "HumanTaskUiArn": humanTaskUiArn, "TaskTitle": "Document entry review", "TaskDescription": "Review the document and instructions. Complete the task", "TaskCount": 1, "TaskAvailabilityLifetimeInSeconds": 43200, "TaskTimeLimitInSeconds": 3600, "TaskKeywords": [ "document review", ], }, OutputConfig={ "S3OutputPath": "s3://amzn-s3-demo-bucket/prefix/", }, RoleArn="arn:aws:iam::<account-number>:role/<role-name>", Tags=[ { "Key": "string", "Value": "string" }, ] )
Amazon Rekognition – Image moderation

Se você usar a integração integrada com o Amazon Rekognition deverá especificar "AWS/Rekognition/DetectModerationLabels/Image/V3" para "AwsManagedHumanLoopRequestSource" em HumanLoopRequestSource.

response = client.create_flow_definition( FlowDefinitionName="human-review-workflow-name", HumanLoopRequestSource={ "AwsManagedHumanLoopRequestSource": "AWS/Rekognition/DetectModerationLabels/Image/V3" }, HumanLoopActivationConfig={ "HumanLoopActivationConditionsConfig": { "HumanLoopActivationConditions": humanLoopActivationConditions } }, HumanLoopConfig={ "WorkteamArn": workteamArn, "HumanTaskUiArn": humanTaskUiArn, "TaskTitle": "Image content moderation", "TaskDescription": "Review the image and instructions. Complete the task", "TaskCount": 1, "TaskAvailabilityLifetimeInSeconds": 43200, "TaskTimeLimitInSeconds": 3600, "TaskKeywords": [ "content moderation", ], }, OutputConfig={ "S3OutputPath": "s3://amzn-s3-demo-bucket/prefix/", }, RoleArn="arn:aws:iam::<account-number>:role/<role-name>", Tags=[ { "Key": "string", "Value": "string" }, ] )
Custom Integration

Se você usa uma integração personalizada, exclua os seguintes parâmetros: HumanLoopRequestSource, HumanLoopActivationConfig.

response = client.create_flow_definition( FlowDefinitionName="human-review-workflow-name", HumanLoopConfig={ "WorkteamArn": workteamArn, "HumanTaskUiArn": humanTaskUiArn, "TaskTitle": "Image content moderation", "TaskDescription": "Review the image and instructions. Complete the task", "TaskCount": 1, "TaskAvailabilityLifetimeInSeconds": 43200, "TaskTimeLimitInSeconds": 3600, "TaskKeywords": [ "content moderation", ], }, OutputConfig={ "S3OutputPath": "s3://amzn-s3-demo-bucket/prefix/", }, RoleArn="arn:aws:iam::<account-number>:role/<role-name>", Tags=[ { "Key": "string", "Value": "string" }, ] )

Depois de criar um fluxo de trabalho de revisão humana, você pode recuperar a definição do fluxo a ARN partir da resposta:

humanReviewWorkflowArn = response["FlowDefinitionArn"]

Criar um loop humano

A API operação que você usa para iniciar um loop humano depende da integração Amazon A2I que você usa.

  • Se você usa a integração integrada do Amazon Textract, você usa a AnalyzeDocumentoperação.

  • Se você usa a integração integrada do Amazon Rekognition, você usa a operação. DetectModerationLabels

  • Se você usa uma integração personalizada, usa a StartHumanLoopoperação.

Selecione seu tipo de tarefa na tabela a seguir para ver exemplos de solicitações para o Amazon Textract e o Amazon Rekognition usando o AWS SDK for Python (Boto3).

Amazon Textract – Key-value pair extraction

O exemplo a seguir usa o AWS SDK for Python (Boto3) para ligar analyze_document para us-west-2. Substitua o texto vermelho em itálico por seus recursos. Inclua o parâmetro DataAttributes se você estiver usando a força de trabalho do Amazon Mechanical Turk. Para obter mais informações, consulte a documentação analyze_document no AWS SDK for Python (Boto) APIReferência.

response = client.analyze_document( Document={"S3Object": {"Bucket": "amzn-s3-demo-bucket", "Name": "document-name.pdf"}, HumanLoopConfig={ "FlowDefinitionArn":"arn:aws:sagemaker:us-west-2:111122223333:flow-definition/flow-definition-name", "HumanLoopName":"human-loop-name", "DataAttributes" : {ContentClassifiers:["FreeOfPersonallyIdentifiableInformation"|"FreeOfAdultContent"]} } FeatureTypes=["FORMS"] )

Os loops humanos só são criados se a confiança do Amazon Textract na tarefa de análise de documentos atender às condições de ativação que você especificou em seu fluxo de trabalho de revisão humana. Você pode verificar o elemento response para determinar se um loop humano foi criado. Para ver tudo incluído nessa resposta, consulte HumanLoopActivationOutput.

if "HumanLoopArn" in analyzeDocumentResponse["HumanLoopActivationOutput"]: # A human loop has been started! print(f"A human loop has been started with ARN: {analyzeDocumentResponse["HumanLoopActivationOutput"]["HumanLoopArn"]}"
Amazon Rekognition – Image moderation

O exemplo a seguir usa o AWS SDK for Python (Boto3) para ligar detect_moderation_labels para us-west-2. Substitua o texto vermelho em itálico por seus recursos. Inclua o parâmetro DataAttributes se você estiver usando a força de trabalho do Amazon Mechanical Turk. Para obter mais informações, consulte a documentação detect_moderation_labels no AWS SDK for Python (Boto) APIReferência.

response = client.detect_moderation_labels( Image={"S3Object":{"Bucket": "amzn-s3-demo-bucket", "Name": "image-name.png"}}, HumanLoopConfig={ "FlowDefinitionArn":"arn:aws:sagemaker:us-west-2:111122223333:flow-definition/flow-definition-name", "HumanLoopName":"human-loop-name", "DataAttributes":{ContentClassifiers:["FreeOfPersonallyIdentifiableInformation"|"FreeOfAdultContent"]} } )

Os loops humanos só são criados se a confiança do Amazon Rekognition em uma tarefa de moderação de imagens atender às condições de ativação que você especificou em seu fluxo de trabalho de revisão humana. Você pode verificar o elemento response para determinar se um loop humano foi criado. Para ver tudo incluído nessa resposta, consulte HumanLoopActivationOutput.

if "HumanLoopArn" in response["HumanLoopActivationOutput"]: # A human loop has been started! print(f"A human loop has been started with ARN: {response["HumanLoopActivationOutput"]["HumanLoopArn"]}")
Custom Integration

O exemplo a seguir usa o AWS SDK for Python (Boto3) para ligar start_human_loop para us-west-2. Substitua o texto vermelho em itálico por seus recursos. Inclua o parâmetro DataAttributes se você estiver usando a força de trabalho do Amazon Mechanical Turk. Para obter mais informações, consulte a documentação start_human_loop no AWS SDK for Python (Boto) APIReferência.

response = client.start_human_loop( HumanLoopName= "human-loop-name", FlowDefinitionArn= "arn:aws:sagemaker:us-west-2:111122223333:flow-definition/flow-definition-name", HumanLoopInput={"InputContent": inputContentJson}, DataAttributes={"ContentClassifiers":["FreeOfPersonallyIdentifiableInformation"|"FreeOfAdultContent"]} )

Este exemplo armazena o conteúdo de entrada na variável inputContentJson. Suponha que o conteúdo de entrada contenha dois elementos: uma sinopse de texto e um sentimento (comoPositive, ouNeutral)Negative, e esteja formatado da seguinte forma:

inputContent = { "initialValue": sentiment, "taskObject": blurb }

As teclas initialValue e taskObject devem corresponder às chaves usadas nos elementos líquidos do modelo de tarefa do trabalhador. Consulte o modelo personalizado Crie uma interface de usuário de tarefas humanas para ver um exemplo.

Para criar um inputContentJson, faça o seguinte:

import json inputContentJson = json.dumps(inputContent)

Um loop humano começa toda vez que você chama start_human_loop. Para verificar o status do seu loop humano, use describe_human_loop:

human_loop_info = a2i.describe_human_loop(HumanLoopName="human_loop_name") print(f"HumanLoop Status: {resp["HumanLoopStatus"]}") print(f"HumanLoop Output Destination: {resp["HumanLoopOutput"]}")