

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

# チュートリアル: シンプルな Amazon Bedrock エージェントの構築
<a name="agent-tutorial"></a>

このチュートリアルでは、AWS マネジメントコンソールを使用してシンプルな Amazon Bedrock エージェントを作成して設定する方法について説明します。Lambda 関数を呼び出して、現在の日時に関するユーザークエリに応答できるエージェントを作成する方法について説明します。

このチュートリアルでは、次の作業を行います。

1. Lambda 関数を作成する — エージェントから呼び出されると、現在の日時を返す Python 関数を構築します。

1. Amazon Bedrock エージェントを作成する — Amazon Bedrock コンソールでエージェントを設定し、日時クエリを処理する指示を設定します。

1. エージェントをテストする — 組み込みのテストインターフェイスを使用して、エージェントが日時リクエストに適切に応答できることを検証します。

1. エイリアスを使用してエージェントをデプロイする — エージェントのバージョンを作成し、エイリアスでデプロイして使用できるようにします。

1. Python コードからエージェントを呼び出す — AWS SDK for Python (Boto) を使用して、プログラムでエージェントを操作する方法について説明します。

1. リソースをクリーンアップする — 不要な料金が発生しないように、このチュートリアルで作成した AWS リソースを削除します。

このチュートリアルを完了すると、日時情報を求める自然言語リクエストを理解し、Lambda 関数から正確なデータを返すことができる Amazon Bedrock エージェントが完成します。

このチュートリアルは、AWS ドキュメント [GitHub リポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/python/example_code/bedrock-agent/scenario_get_started_with_agents.py)のエージェントコード例に基づいています。

**Topics**
+ [前提条件](agent-tutorial-prereq.md)
+ [ステップ 1: Lambda 関数を作成する](agent-tutorial-step1.md)
+ [ステップ 2: Amazon Bedrock エージェントを作成する](agent-tutorial-step2.md)
+ [ステップ 3: エージェントをテストする](agent-tutorial-step3.md)
+ [ステップ 4: エイリアスを使用してエージェントをデプロイする](agent-tutorial-step4.md)
+ [ステップ 5: Python コードからエージェントを呼び出す](agent-tutorial-step5.md)
+ [ステップ 6: リソースをクリーンアップする](agent-tutorial-step6.md)
+ [その他のリソース](agent-tutorial-resources.md)

# 前提条件
<a name="agent-tutorial-prereq"></a>

このチュートリアルを開始する前に、以下の要件を満たしていることを確認してください。
+ 次のマネージドポリシーが設定された AWS アカウント
  + [AmazonBedrockFullAccess](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonBedrockFullAccess)
  + [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/lambda/latest/dg/security-iam-awsmanpol.html#lambda-security-iam-awsmanpol-AWSLambda_FullAccess)
  + [IAMFullAccess](aws-managed-policy/latest/reference/IAMFullAccess.html)
**重要**  
これらのアクセス許可により、このチュートリアルやその他の関連しないタスクを実行できます。本番環境では、ユーザーがアプリケーションを実行するために必要なアクセス許可のみを割り当てます。
+ IAM ロールとアクセス許可に関する基本的な知識 ([IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html))
+ AWS Lambda 関数に関する知識 ([Lambda デベロッパーガイド](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html))

# ステップ 1: Lambda 関数を作成する
<a name="agent-tutorial-step1"></a>

まず、エージェントがアクションを実行するために呼び出す Lambda 関数を作成します。この手順では、呼び出されると現在の日時を返す Python Lambda 関数を作成します。関数に基本的なアクセス許可を設定して、Amazon Bedrock エージェントからのリクエストを処理するために必要なコードを追加し、関数をデプロイしてエージェントに接続できるようにします。

詳細については、「*AWS Lambda デベロッパーガイド*」の「[最初の Lambda 関数を作成する](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)」を参照してください。

**Lambda 関数を作成する**

1. AWS マネジメントコンソールにサインインして、[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) で Lambda 関数コンソールを開きます。

1. [**関数の作成**] を選択してください。

1. **[一から作成]** を選択します。

1. [**基本的な情報**] セクションで、以下の操作を行います。
   + **[関数名]** に、関数の名前を入力します (`DateTimeFunction` など)。関数の名前を書き留めます。「[ステップ 2: Amazon Bedrock エージェントを作成する](agent-tutorial-step2.md)」のステップ 15 で必要になります。
   + **[ランタイム]** では、**[Python 3.9]** (または必要なバージョン) を選択します。
   + **[アーキテクチャ]** は、そのままにします。
   + **[アクセス許可]** では、**[デフォルトの実行ロールの変更]** を選択して、**[基本的な Lambda のアクセス権限で新しいロールを作成]** を選択します。

1. [**関数の作成**] を選択してください。

1. **[関数の概要]** の **[関数 ARN]** に表示されている関数の Amazon リソースネーム (ARN) を書き留めておきます。これは、「[ステップ 2: Amazon Bedrock エージェントを作成する](agent-tutorial-step2.md)」のステップ 24 で必要になります。

1. **[コード]** タブで、既存のコードを以下と置き換えます。

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   import datetime
   import json
   
   
   def lambda_handler(event, context):
       now = datetime.datetime.now()
   
       response = {"date": now.strftime("%Y-%m-%d"), "time": now.strftime("%H:%M:%S")}
   
       response_body = {"application/json": {"body": json.dumps(response)}}
   
       action_response = {
           "actionGroup": event["actionGroup"],
           "apiPath": event["apiPath"],
           "httpMethod": event["httpMethod"],
           "httpStatusCode": 200,
           "responseBody": response_body,
       }
   
       session_attributes = event["sessionAttributes"]
       prompt_session_attributes = event["promptSessionAttributes"]
   
       return {
           "messageVersion": "1.0",
           "response": action_response,
           "sessionAttributes": session_attributes,
           "promptSessionAttributes": prompt_session_attributes,
       }
   ```

1. 関数コードをデプロイするには、**[デプロイ]**] をクリックします。

1. **[設定]** タブを選択します。

1. **[許可]** を選択してください。

1. **[リソースベースのポリシーステートメント]** で、**[アクセス許可を追加]** をクリックします。

1. **[ポリシーステートメントを編集]** で、以下を実行します。

   1. **[AWS サービス]** をクリックします。

   1. **[サービス]** で、**[その他]** を選択します。

   1. **[ステートメント ID]** に、一意の識別子を入力します (`AllowBedrockInvocation` など)。

   1. **[プリンシパル]** に、「`bedrock.amazonaws.com`」と入力します。

   1. **[ソース ARN]** に、「`arn:aws:bedrock:region:AWS account ID:agent/*`」と入力します。

      `region` は、`us-east-1` など、現在使用している AWS リージョンに置き換えます。`AWS account ID` は、使用する AWS アカウント ID に置き換えます。

   1. **[アクション]** で、`lambda:InvokeFunction` を選択します。

1. **[保存]** を選択します。

# ステップ 2: Amazon Bedrock エージェントを作成する
<a name="agent-tutorial-step2"></a>

次に、Amazon Bedrock エージェントを作成します。この手順では、Amazon Bedrock コンソールでエージェントをセットアップし、基盤モデルを使用してエージェントを設定してから、日付と時刻の情報を返すわかりやすいチャットボットとしてエージェントの動作を定義する指示を入力します。また、エージェントが呼び出せる API エンドポイント (具体的には、現在の日付と時刻を取得するためのエンドポイント) を定義する OpenAPI スキーマを使用してアクショングループを作成します。さらに、エージェントの IAM ロールにインラインポリシーを追加して、Lambda 関数の呼び出しを許可します。エージェントは、ユーザーと Lambda 関数の間のインターフェイスとして機能し、自然言語リクエストを解釈して、日付と時刻の情報を取得する構造化された関数呼び出しに変換します。

詳細については、「[エージェントを手動で作成および設定する](agents-create.md)」を参照してください。

**Amazon Bedrock エージェントを作成する**

1. Amazon Bedrock コンソールを使用するアクセス許可を持つ IAM ID AWS マネジメントコンソールを使用して にサインインします。Amazon Bedrock コンソール ([https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock)) を開きます。

1. Amazon Bedrock [エージェント](agents-supported.md)をサポートする AWS[リージョン](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/select-region.html)にいることを確認します。

1. ナビゲーションペインの **[ビルダーツール]** で **[エージェント]** を選択します。

1. [**エージェントの作成**] を選択します。

1. **[名前]** に、エージェントの名前を入力します (例: `MyBedrockAgent`)。

1. (オプション) **[説明]** に説明を入力します。

1. **[作成]** を選択します。**[エージェントビルダー]** ペインが開きます。

1. **[エージェントの詳細]** セクションで、次の操作を行います。
   + **[エージェントリソースロール]** で、**[新しいサービスロールを作成して使用]** を選択します。
   + **[モデルを選択]** で、Claude 3 Haiku などのモデルを選択します。
   + **[エージェント向けの指示]** セクションに、以下の指示を入力します。

     ```
     You are a friendly chat bot. You have access to a function called that returns
     information about the current date and time. When responding with date or time,
     please make sure to add the timezone UTC.
     ```

1. **[保存]** を選択します。

1. **[アクショングループ]** タブを選択します。

1. **[アクショングループ]** で、**[追加]** を選択します。

1. **[アクショングループ名を入力]** に、アクショングループの名前を入力します (例: `TimeActions`)。

1. (オプション) **[説明]** に、アクショングループの説明を入力します。

1. **[アクショングループタイプ]** で、**[API スキーマで定義]** を選択します。

1. **[アクショングループの呼び出し]** で、**[既存の Lambda 関数を選択してください]** を選択します。

1. **[Lambda 関数を選択]** で、「[ステップ 1: Lambda 関数を作成する](agent-tutorial-step1.md)」で作成した Lambda 関数の名前を選択します。

1. **[アクショングループスキーマ]** で、**[インラインスキーマエディタで定義]** を選択します。

1. **[インラインオープン API スキーマ]** テキストボックスで、既存のスキーマを次の OpenAPI YAML スキーマに置き換えます。

   ```
   openapi: 3.0.0
   info:
     title: Time API
     version: 1.0.0
     description: API to get the current date and time.
   paths:
     /get-current-date-and-time:
       get:
         summary: Gets the current date and time.
         description: Gets the current date and time.
         operationId: getDateAndTime
         responses:
           '200':
             description: Gets the current date and time.
             content:
               'application/json':
                 schema:
                   type: object
                   properties:
                     date:
                       type: string
                       description: The current date
                     time:
                       type: string
                       description: The current time
   ```

1. アクショングループ設定を確認し、**[作成]** を選択します。

1. **[保存]** を選択して変更を保存します。

1. **[準備]** を選択してエージェントを準備します。

1. **[保存して終了]** を選択して変更を保存し、エージェントビルダーを終了します。

1. **[エージェントの概要]** セクションの **[アクセス許可]** で、IAM サービスロールを選択します。これにより、IAM コンソールでロールが開きます。

1. IAM コンソールで、**[アクセス許可]** タブを選択します。

1. **[アクセス許可の追加]**、**[インラインポリシーの作成]** の順に選択します。

1. **[JSON]** タブを選択し、以下のポリシーを貼り付けます。`Resource` が Lambda 関数の Amazon リソースネーム (ARN) であることを確認します。ARN は「[ステップ 1: Lambda 関数を作成する](agent-tutorial-step1.md)」のステップ 6 で書き留めています。

1. [**次へ**] を選択します。

1. ポリシーの名前（例: `BedrockAgentLambdaInvoke`）を入力します。

1. [**Create policy**] (ポリシーの作成) を選択します。

# ステップ 3: エージェントをテストする
<a name="agent-tutorial-step3"></a>

この手順では、Amazon Bedrock コンソールの組み込みテストインターフェイスを使用して、エージェントの作業中のドラフトをテストします。現在の日時を尋ねる自然言語クエリを送信し、エージェントがこれらのリクエストを処理し、Lambda 関数を呼び出して、フォーマットしたレスポンスを返す方法を確認します。このテストステップでは、エージェントがユーザーの意図を正確に理解し、Lambda 関数を適切に呼び出して、ユーザーフレンドリーな方法で情報を表示することを確認できます。

詳細については、「[エージェントの動作テストとトラブルシューティング](agents-test.md)」を参照してください。

**エージェントをテストするには**

1. 「[ステップ 2: Amazon Bedrock エージェントを作成する](agent-tutorial-step2.md)」で作成したエージェントを Amazon Bedrock コンソールで開きます。

1. **[テスト]** をクリックして、**[テスト]** パネルを開きます。

1. **[エイリアス]** ドロップダウンで、エイリアス「**TestAlias: Working draft**」を選択します。

1. チャットインターフェイスで、以下などの、エージェントのアクションの 1 つをトリガーするプロンプトを入力します。
   + **What time is it?**
   + **Can you tell me today's date?**

1. エージェントはプロンプトを処理し、必要に応じて Lambda 関数を呼び出してレスポンスを返します。

1. (オプション) **[トレースを表示]** をクリックすると、モデルに送信したプロンプトの[トレース](trace-events.md)のステップを表示できます。トレースには、モデルが Lambda 関数を呼び出して日時を取得するタイミングを決定する際に使用する根拠が表示されます。

# ステップ 4: エイリアスを使用してエージェントをデプロイする
<a name="agent-tutorial-step4"></a>

エージェントの設定後、利用できるように、エイリアスを使用してデプロイする必要があります。この手順では、エージェントのエイリアスとバージョンを作成して、エージェントのデプロイを準備します。エイリアスは該当バージョンを指しているため、基盤となる実装を更新する機能を維持しながら、安定したエンドポイントを介してエージェントを呼び出すことができます。

詳細については、「[アプリケーションに Amazon Bedrock エージェントをデプロイして使用する](agents-deploy.md)」を参照してください。

**エイリアスを使用してエージェントをデプロイする**

1. 「[ステップ 2: Amazon Bedrock エージェントを作成する](agent-tutorial-step2.md)」で作成したエージェントを Amazon Bedrock コンソールで開きます。

1. **[エイリアスを作成]** をクリックします。

1. **[エイリアス名]**に、エイリアスの名前を入力します。例: **DateTimeAliasAgentAlias**。

1. (オプション) **[説明]** に説明を入力します。

1. **[バージョンを関連付ける]** で、**[新しいバージョンを作成してこのエイリアスに関連付ける]** をオンにします。

1. **[エイリアスを作成]** を選択します。

1. 「[ステップ 3: エージェントをテストする](agent-tutorial-step3.md)」の手順に従って、エイリアスをテストします。ステップ 6 では、先ほど作成したエイリアスを選択します。

# ステップ 5: Python コードからエージェントを呼び出す
<a name="agent-tutorial-step5"></a>

このステップでは、 AWS SDK for Python (Boto)を使用して、プログラムでエージェントを操作する方法について説明します。このサンプルコードでは、エージェントを呼び出すためにパラメータとして AGENT ID と ALIAS ID の両方を必要とする [InvokeAgent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html) オペレーションの使用方法を説明しています。このコードは、エージェントへのプロンプトの送信、レスポンスの処理、ストリーミングモードと非ストリーミングモードの両方のレスポンスの処理を行う方法を説明しています。これにより、Bedrock エージェントを独自の Python アプリケーションに統合できます。

詳細については、「[アプリケーションからエージェントを呼び出す](agents-invoke-agent.md)」を参照してください。

**Python コードからエージェントを呼び出すには**

1. エージェントの ID を取得します。詳細については、「[エージェントに関する情報を表示する](agents-view.md)」を参照してください。

1. エージェントのエイリアスの ID を取得します。詳細については、「[Amazon Bedrock でエージェントのエイリアスに関する情報を表示する](agents-alias-view.md)」を参照してください。

1. 以下のコードを実行します。以下を更新します。
   + **AGENT\$1ID** – エージェントの IDに置き換えます。
   + **ALIAS\$1ID** – エージェントのエイリアス ID に置き換えます。
   + **REGION** – など、エージェントを作成した AWS リージョン`us-east-1`。

   エージェントからのレスポンスをストリーミングするには、`streamFinalResponse` の値を `True` に変更します。

   ```
   import boto3
   import logging
   
   from botocore.exceptions import ClientError
   
   
   logging.basicConfig(level=logging.INFO)
   logger = logging.getLogger(__name__)
   
   def invoke_agent(client, agent_id, alias_id, prompt, session_id):
           response = client.invoke_agent(
               agentId=agent_id,
               agentAliasId=alias_id,
               enableTrace=True,
               sessionId = session_id,
               inputText=prompt,
               streamingConfigurations = { 
       "applyGuardrailInterval" : 20,
         "streamFinalResponse" : False
               }
           )
           completion = ""
           for event in response.get("completion"):
               #Collect agent output.
               if 'chunk' in event:
                   chunk = event["chunk"]
                   completion += chunk["bytes"].decode()
               
               # Log trace output.
               if 'trace' in event:
                   trace_event = event.get("trace")
                   trace = trace_event['trace']
                   for key, value in trace.items():
                       logging.info("%s: %s",key,value)
   
           print(f"Agent response: {completion}")
   
   
   if __name__ == "__main__":
   
       client=boto3.client(
               service_name="bedrock-agent-runtime",
               region_name="REGION") 
       
       agent_id = "AGENT_ID"
       alias_id = "ALIAS_ID"
       session_id = "123456"
       prompt = "What's the current time?"
   
       try:
   
           invoke_agent(client, agent_id, alias_id, prompt, session_id)
   
       except ClientError as e:
           print(f"Client error: {str(e)}")
           logger.error("Client error: %s", {str(e)})
   ```

# ステップ 6: リソースをクリーンアップする
<a name="agent-tutorial-step6"></a>

Amazon Bedrock エージェントの使用を終了したら、不要な料金が発生しないように、リソースをクリーンアップする必要があります。この最後の手順では、Bedrock エージェント、Lambda 関数、関連する \$1IAM ロールなど、このチュートリアル中に作成されたすべての AWS リソースを体系的に削除します。このクリーンアッププロセスは、使用しなくなったリソースに対する継続的な料金の発生を防ぐため、コスト管理の意味で重要です。この手順は、エージェントの削除、Lambda 関数の削除、これらのサービスをサポートするために作成された IAM ロールのクリーンアップの 3 つの部分で構成されます。

**Topics**
+ [エージェントを削除する](#agent-tutorial-step6-console-agent)
+ [Lambda 関数を削除する](#agent-tutorial-step6-console-lambda)
+ [IAM ロールを削除する](#agent-tutorial-step6-console-iam)

## エージェントを削除する
<a name="agent-tutorial-step6-console-agent"></a>

**エージェントを削除する**

1. 「[ステップ 2: Amazon Bedrock エージェントを作成する](agent-tutorial-step2.md)」で作成したエージェントを Amazon Bedrock コンソールで開きます。

1. 作成したアラームを選択します。

1. **[削除]** を選択します。

1. 削除を確定します。

## Lambda 関数を削除する
<a name="agent-tutorial-step6-console-lambda"></a>

**Lambda 関数を削除する**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) で AWS Lambda コンソールを開きます。

1. 作成した Lambda 関数を選択します。

1. [**Actions (アクション)**] を選択してから [**Delete (削除)**] を選択します。

1. 削除を確定します。

## IAM ロールを削除する
<a name="agent-tutorial-step6-console-iam"></a>

**IAM ロールを削除する**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

1. 作成したエージェントのサービスロールを選択します。

1. **[削除]** を選択します。

1. 削除を確定します。

1. Lambda 実行ロールについてもこれを繰り返します。

# その他のリソース
<a name="agent-tutorial-resources"></a>
+ [Amazon Bedrock ユーザーガイド](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Amazon Bedrock API リファレンス](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html)
+ [AWS Lambda デベロッパーガイド](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)
+ [Amazon Bedrock エージェントのドキュメント](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
+ [OpenAPI の仕様](https://swagger.io/specification/)