Amazon Bedrock Prompt フローコードサンプルを実行する - Amazon Bedrock

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Bedrock Prompt フローコードサンプルを実行する

注記

Amazon Bedrock プロンプトフローはプレビュー中であり、変更される可能性があります。

次のコードサンプルは、次の前提条件を満たしていることを前提としています。

  1. Amazon Bedrock アクションへのアクセス許可を持つロールを設定します。まだない場合は、「」を参照してくださいAmazon Bedrock の開始方法

  2. を使用するように認証情報を設定します AWS API。まだない場合は、「」を参照してくださいAWS API の開始方法

  3. サービスロールを作成して、ユーザーに代わってプロンプトフロー関連のアクションを実行します。まだない場合は、「」を参照してくださいAmazon Bedrock で Amazon Bedrock プロンプトフローのサービスロールを作成する

Amazon Bedrock プロンプトフローのコードサンプルを試すには、選択した方法に対応するタブを選択し、ステップに従います。

Python
  1. 次のノードを持つ Agents for Amazon Bedrock ビルドタイムエンドポイントを使用して、CreateFlowリクエスト (リクエストとレスポンスの形式とフィールドの詳細についてはリンクを参照) を使用してプロンプトフローを作成します。

    • 入力ノード。

    • 2 つの変数 (genre と ) を使用して音楽プレイリストを作成するプロンプトがインラインで定義されているプロンプトノードnumber

    • モデルの完了を返す出力ノード。

    次のコードスニペットを実行して をロードし 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/MyPromptFlowsRole" # 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.titan-text-express-v1", "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. エージェント for Amazon Bedrock ビルドタイムエンドポイント を使用してListFlowsリクエストを行うには、次のコードスニペットを実行して (リクエストとレスポンスの形式とフィールドの詳細のリンクを参照)、作成したプロンプトフローを含め、アカウントのプロンプトフローを一覧表示します。

    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. エージェント 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="FLOW123456", 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リクエストを行うには、次のコードスニペットを実行してプロンプトフローのすべてのエイリアスを一覧表示します (リクエストとレスポンスの形式とフィールドの詳細についてはリンクを参照)。

      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("Prompt flow invocation was successful! The output of the prompt flow is as follows:\n") print(result['flowOutputEvent']['content']['document']) else: print("The prompt flow invocation completed because of the following reason:", result['flowCompletionEvent']['completionReason'])

    レスポンスは、3 つの曲を含むポップミュージックのプレイリストを返す必要があります。

  8. 次のアクションを使用して作成したエイリアス、バージョン、プロンプトフローを削除します。

    1. 次のコードスニペットを実行してエイリアスを削除し、Agents for Amazon Bedrock ビルドタイムエンドポイント を使用してDeleteFlowAliasリクエストを行います (リクエストとレスポンスの形式とフィールドの詳細については、リンクを参照)。

      client.delete_flow_alias(flowIdentifier=flow_id, aliasIdentifier=flow_alias_id)
    2. エージェント 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)