翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
アプリケーションからエージェントを呼び出す
Amazon Bedrock エージェントのランタイムエンドポイントを使用して InvokeAgent リクエストを実行することで、アプリケーションでエージェントを使用できます。
デフォルトでは、InvokeAgent からのレスポンスには、エージェントからの完全なレスポンスを含むチャンクが含まれており、完了するまでに時間がかかる場合があります。別の方法として、レスポンスを複数の小規模のチャンクに分割してストリーミングするように、InvokeAgent を設定することもできます。これにより、エージェントからの最初のレスポンスのレイテンシーを短縮できます。
ストリーミングレスポンス
必要に応じて、ストリーミング設定 (StreamingConfigurations) で streamFinalResponse を true に設定することで、レスポンスのストリーミングを有効にできます。レスポンスストリームには、レスポンスの各部分のチャンクが順番に含まれる、複数のイベントが含まれます。
レスポンスをストリーミングするには、エージェント実行ロールに、設定済みのエージェントのモデルの bedrock:InvokeModelWithResponseStream アクセス許可が含まれていることを確認します。詳細については、「エージェントサービスロールのアイデンティティベースのアクセス許可」を参照してください。
エージェントにガードレールが設定されている場合は、StreamingConfigurations で applyGuardrailInterval を指定して、ApplyGuardrail コールが実行される頻度を、送信されるレスポンス文字数 (50 文字ごとなど) で制御することもできます。
デフォルトのガードレール間隔は、50 文字ごとに設定されています。間隔をより大きく指定すると、レスポンスはよりサイズの大きいチャンクに分割され、ApplyGuardrail コールの回数が低減します。次の例では、「Hello, I am an agent」という入力文字列に対して生成されたレスポンスが示されています。
複数のチャンクでのレスポンスの例: 間隔を 3 文字に設定
'Hel', 'lo, ', 'I am', ' an', ' Age', 'nt'
各チャンクには、最後のチャンクを除き、少なくとも 3 つの文字が含まれます。
複数のチャンクでのレスポンスの例: 間隔を 20 文字数以上に設定
'Hello, I am an Agent'
エージェントを呼び出す
次の Python の例では、InvokeAgent オペレーションを呼び出し、エージェントからの出力と、呼び出しによって生成される証跡情報を表示する方法を説明しています。
エージェントを呼び出すには
-
「エージェントを手動で作成および設定する」の手順に従って、エージェントを作成します。エージェントの ID を書き留めます。ID は、必要に応じて後で取得できます。詳細については、「エージェントに関する情報を表示する」を参照してください。
「エージェントのエイリアスを作成する」の手順に従って、エージェントのエイリアスを作成します。エイリアスの ID を書き留めます。ID は、必要に応じて後で取得できます。詳細については、「Amazon Bedrock でエージェントのエイリアスに関する情報を表示する」を参照してください。
以下のコードを実行します。
agent_idの値をエージェントの ID に、alias_idの値はエージェントのエイリアス ID に更新します。エージェントからのレスポンスをストリーミングするには、streamFinalResponseの値をTrueに変更します。applyGuardrailIntervalの値を変更すると、ガードレールの間隔を変更することもできます。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" ) agent_id = "AGENT_ID" alias_id = "ALIAS_ID" session_id = "MY_SESSION_ID" prompt = "Prompt to send to agent" 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)})