Amazon Bedrock Flows 코드 샘플 실행 - Amazon Bedrock

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Bedrock Flows 코드 샘플 실행

다음 코드 샘플에서는 다음과 같은 사전 조건을 충족했다고 가정합니다.

  1. Amazon Bedrock 작업에 대한 권한을 갖도록 역할이 설정되어 있습니다. 이렇게 설정되어 있지 않은 경우 Amazon Bedrock 시작 섹션을 참조하세요.

  2. AWS API를 사용하도록 자격 증명을 설정합니다. 이렇게 설정되어 있지 않은 경우 API 시작하기 섹션을 참조하세요.

  3. 서비스 역할을 생성하여 사용자를 대신하여 흐름 관련 작업을 수행합니다. 이렇게 설정되어 있지 않은 경우 Amazon Bedrock에서 Amazon Bedrock Flows에 대한 서비스 역할 생성 섹션을 참조하세요.

흐름을 생성하려면 Agents for Amazon Bedrock 빌드 타임 엔드포인트를 사용하여 CreateFlow 요청을 전송합니다. 예제 코드는 단원을 참조하십시오. Amazon Bedrock Flows 코드 샘플 실행

필수 필드는 다음과 같습니다.

필드 기본 설명
name 흐름의 이름입니다.
executionRoleArn 흐름을 만들고 관리할 수 있는 권한이 있는 서비스 역할의 ARN입니다.

다음 필드는 선택 사항입니다.

필드 사용 사례
definition 흐름을 구성하는 nodesconnections를 포함합니다.
설명 흐름을 설명합니다.
tags 태그를 흐름에 연결합니다. 자세한 내용은 Amazon Bedrock 리소스 태그 지정 섹션을 참조하세요.
customerEncryptionKeyArn KMS 키로 리소스를 암호화합니다. 자세한 내용은 Amazon Bedrock Flows 리소스 암호화 단원을 참조하십시오.
clientToken API 요청이 한 번만 완료되도록 합니다. 자세한 내용은 Ensuring idempotency를 참조하세요.

definition 필드는 선택 사항이지만 흐름이 작동하려면 필수입니다. 먼저 정의 없이 흐름을 만들도록 선택한 다음 나중에 흐름을 업데이트할 수 있습니다.

nodes 목록의 각 노드에 대해 type 필드에 노드 유형을 지정하고 config 필드에 노드의 해당 구성을 제공합니다. 다양한 노드 유형의 API 구조에 대한 자세한 내용은 흐름의 노드 유형 섹션을 참조하세요.

Amazon Bedrock Flows에 대한 일부 코드 샘플을 시도하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

Python
  1. 다음 노드가 있는 Agents for Amazon Bedrock 빌드 타임 엔드포인트에서 CreateFlow 요청을 사용하여 흐름을 생성합니다.

    • 입력 노드

    • 두 가지 변수(genrenumber)를 사용하여 음악 재생 목록을 만드는 프롬프트가 인라인으로 정의된 프롬프트 노드

    • 모델의 완성된 응답을 반환하는 출력 노드

    다음 코드 조각을 실행하여를 로드하고 AWS SDK for Python (Boto3), Amazon Bedrock Agents 클라이언트를 생성하고, 노드로 흐름을 생성합니다(executionRoleArn필드를 흐름에 대해 생성한 서비스 역할의 ARN으로 바꿉니다).

    # Import Python SDK and create client import boto3 client = boto3.client(service_name='bedrock-agent') # Replace with the service role that you created. For more information, see https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html FLOWS_SERVICE_ROLE = "arn:aws:iam::123456789012:role/MyFlowsRole" # Define each node # The input node validates that the content of the InvokeFlow request is a JSON object. input_node = { "type": "Input", "name": "FlowInput", "outputs": [ { "name": "document", "type": "Object" } ] } # This prompt node defines an inline prompt that creates a music playlist using two variables. # 1. {{genre}} - The genre of music to create a playlist for # 2. {{number}} - The number of songs to include in the playlist # It validates that the input is a JSON object that minimally contains the fields "genre" and "number", which it will map to the prompt variables. # The output must be named "modelCompletion" and be of the type "String". prompt_node = { "type": "Prompt", "name": "MakePlaylist", "configuration": { "prompt": { "sourceConfiguration": { "inline": { "modelId": "amazon.nova-lite-v1:0", "templateType": "TEXT", "inferenceConfiguration": { "text": { "temperature": 0.8 } }, "templateConfiguration": { "text": { "text": "Make me a {{genre}} playlist consisting of the following number of songs: {{number}}." } } } } } }, "inputs": [ { "name": "genre", "type": "String", "expression": "$.data.genre" }, { "name": "number", "type": "Number", "expression": "$.data.number" } ], "outputs": [ { "name": "modelCompletion", "type": "String" } ] } # The output node validates that the output from the last node is a string and returns it as is. The name must be "document". output_node = { "type": "Output", "name": "FlowOutput", "inputs": [ { "name": "document", "type": "String", "expression": "$.data" } ] } # Create connections between the nodes connections = [] # First, create connections between the output of the flow input node and each input of the prompt node for input in prompt_node["inputs"]: connections.append( { "name": "_".join([input_node["name"], prompt_node["name"], input["name"]]), "source": input_node["name"], "target": prompt_node["name"], "type": "Data", "configuration": { "data": { "sourceOutput": input_node["outputs"][0]["name"], "targetInput": input["name"] } } } ) # Then, create a connection between the output of the prompt node and the input of the flow output node connections.append( { "name": "_".join([prompt_node["name"], output_node["name"]]), "source": prompt_node["name"], "target": output_node["name"], "type": "Data", "configuration": { "data": { "sourceOutput": prompt_node["outputs"][0]["name"], "targetInput": output_node["inputs"][0]["name"] } } } ) # Create the flow from the nodes and connections response = client.create_flow( name="FlowCreatePlaylist", description="A flow that creates a playlist given a genre and number of songs to include in the playlist.", executionRoleArn=FLOWS_SERVICE_ROLE, definition={ "nodes": [input_node, prompt_node, output_node], "connections": connections } ) flow_id = response.get("id")
  2. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트로 ListFlows 요청을 수행하여 방금 생성한 흐름을 포함하여 계정의 흐름을 나열합니다. https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bra-bt

    client.list_flows()
  3. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트GetFlow 요청을 수행하여 방금 생성한 흐름에 대한 정보를 가져옵니다.

    client.get_flow(flowIdentifier=flow_id)
  4. 규격 초안의 최신 변경 사항이 적용되고 버전이 준비되도록 흐름을 준비합니다. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트PrepareFlow를 요청합니다.

    client.prepare_flow(flowIdentifier=flow_id)
  5. 흐름의 규격 초안을 버전 관리하여 흐름의 정적 스냅샷을 생성한 후 다음 작업을 통해 흐름에 대한 정보를 검색합니다.

    1. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트CreateFlowVersion을 요청하여 버전을 생성합니다.

      response = client.create_flow_version(flowIdentifier=flow_id) flow_version = response.get("version")
    2. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트ListFlowVersions 요청을 수행하여 흐름의 모든 버전을 나열합니다.

      client.list_flow_versions(flowIdentifier=flow_id)
    3. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트GetFlowVersion을 요청하여 버전에 대한 정보를 가져옵니다.

      client.get_flow_version(flowIdentifier=flow_id, flowVersion=flow_version)
  6. 생성한 흐름의 버전을 가리키는 별칭을 생성한 다음 다음 다음 작업을 통해 해당 별칭에 대한 정보를 검색합니다.

    1. 별칭을 생성하고 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트CreateFlowAlias 요청을 수행하여 방금 생성한 버전을 가리킵니다.

      response = client.create_flow_alias( flowIdentifier=flow_id, name="latest", description="Alias pointing to the latest version of the flow.", routingConfiguration=[ { "flowVersion": flow_version } ] ) flow_alias_id = response.get("id")
    2. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트로 ListFlowAliass를 요청하여 흐름의 모든 별칭을 나열합니다. https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bra-bt

      client.list_flow_aliases(flowIdentifier=flow_id)
    3. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트GetFlowAlias 요청을 수행하여 방금 생성한 별칭에 대한 정보를 가져옵니다.

      client.get_flow_alias(flowIdentifier=flow_id, aliasIdentifier=flow_alias_id)
  7. 다음 코드 스니펫을 실행하여 Amazon Bedrock Agents Runtime 클라이언트를 만들고 흐름을 간접적으로 호출합니다. 요청은 흐름의 프롬프트에 변수를 채우고 모델의 응답을 반환하여 Agents for Amazon Bedrock 런타임 엔드포인트InvokeFlow 요청을 수행합니다.

    client_runtime = boto3.client('bedrock-agent-runtime') response = client_runtime.invoke_flow( flowIdentifier=flow_id, flowAliasIdentifier=flow_alias_id, inputs=[ { "content": { "document": { "genre": "pop", "number": 3 } }, "nodeName": "FlowInput", "nodeOutputName": "document" } ] ) result = {} for event in response.get("responseStream"): result.update(event) if result['flowCompletionEvent']['completionReason'] == 'SUCCESS': print("Flow invocation was successful! The output of the flow is as follows:\n") print(result['flowOutputEvent']['content']['document']) else: print("The flow invocation completed because of the following reason:", result['flowCompletionEvent']['completionReason'])

    응답은 3개의 노래가 포함된 팝 음악 재생 목록을 반환해야 합니다.

  8. 다음 작업으로 생성한 별칭, 버전 및 흐름을 삭제합니다.

    1. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트로 DeleteFlowAlias를 요청하여 별칭을 삭제합니다. https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bra-bt

      client.delete_flow_alias(flowIdentifier=flow_id, aliasIdentifier=flow_alias_id)
    2. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트DeleteFlowVersion을 요청하여 버전을 삭제합니다.

      client.delete_flow_version(flowIdentifier=flow_id, flowVersion=flow_version)
    3. 다음 코드 조각을 실행하여 Agents for Amazon Bedrock 빌드 타임 엔드포인트DeleteFlow를 요청하여 흐름을 삭제합니다.

      client.delete_flow(flowIdentifier=flow_id)