Amazon Bedrock AgentCore Observabilityが解決する課題

AWSの機械学習ブログ「Optimizing production agents with Amazon Bedrock AgentCore Observability」は、AIエージェントがプロトタイプから本番運用に移行する際に直面する課題を扱っている。記事によれば、プロトタイプ段階では「動くかどうか」が課題だが、本番段階では「速く効率的に動き続けるか」が課題に変わる。これは本シリーズのPart 2にあたり、Part 1では無限ループやツール呼び出しエラーといった「壊れているエージェント」のデバッグを扱ったのに対し、本記事では「正しく動作するが性能が悪いエージェント」という別の課題を扱う。

著者は、応答の遅延と無制限なメモリ増加を「最も一般的な運用上の問題」と位置づけている。これらの問題はエラーアラートを発生させないため気づきにくいが、時間とともにユーザーの信頼を損ない、コストを増加させると指摘している。これがこの記事の核心的主張であり、Amazon Bedrock AgentCore Observability(Amazon Bedrock AgentCoreの機能の一つ)とAmazon CloudWatchを使ってエージェントの実行パス全体のパフォーマンスボトルネックを特定し、長時間実行セッションにおけるメモリ問題を診断する方法を学べるとしている。

前提条件として、Amazon Bedrock AgentCoreへのアクセス権を持つAWSアカウント、CloudWatch Transaction Searchの有効化、そしてデプロイ済みのエージェントが必要と記載されている。詳細なセットアップ手順はPart 1(記事内リンクのDebugging production agents with Amazon Bedrock AgentCore Observability)を参照するよう案内されている。 (出典: aws.amazon.com

パフォーマンスボトルネックの症状とCloudWatchによる特定手順

記事は「Scenario 3: Performance bottlenecks」として、エージェントが正しく動作するが応答が遅すぎるケースを詳細に扱っている。サブ秒応答を期待しているのに数秒単位の遅延が発生し、タスク自体は成功するが、そのレイテンシがインタラクティブなユースケースには実用的でなくなるという状態だ。記事は「slowは主観的である」と述べており、バッチ処理エージェントで許容される遅延がカスタマーサービスチャットボットでは許容されない、という点を明確にしている。

症状としては、性能劣化は段階的に現れることが多いと説明されている。最初は2秒程度の許容できる応答時間だったものが、機能追加やツール統合、メモリ蓄積が進むにつれて5秒、10秒と悪化し、最終的には使い物にならなくなる。この間、P95応答時間が閾値を超えユーザーがセッションを離脱する一方で、エラー率は低いままという特徴がある。記事に掲載されたFigure 1では、3件のリクエストが7.5〜8.2秒(平均スパンレイテンシ)という一貫して高いレイテンシを示しており、これは「散発的な遅さではなく、システム的なパフォーマンスボトルネック」を示すパターンだと説明されている。

ボトルネックを見つける最初のステップとして、記事はパフォーマンス予算を超えるエージェント呼び出しをCloudWatchでクエリする方法を示している。

fields @timestamp, RequestId, Latency | filter Operation like /InvokeAgent/ | filter Latency > 3000 | sort Latency desc | limit 50

このクエリは3秒(Latency > 3000)を超えたエージェント呼び出しをレイテンシの降順で返す。閾値は自身の要件に応じて調整可能と記載されている。代表的な高レイテンシリクエストを1件選び、そのRequestIdを記録した上で、次のクエリでリクエストのタイムライン全体を分析する。

fields @timestamp, Operation, Duration, SpanName | filter RequestId = "" | sort @timestamp asc

このクエリは、リクエスト内の操作の実行順序と各操作にかかった時間を示す。記事では、このタイムラインの中で時間を消費している操作(Durationが大きいオペレーション)を探すべきだと述べている。 (出典: 前出 [aws.amazon.com])

長時間セッションにおけるメモリ問題の診断

記事の冒頭部分で明言されている通り、Amazon CloudWatchは本番エージェントにおけるメモリ問題の診断にも使われる。応答の遅延とともに「無制限なメモリ増加」が本番運用で最も一般的な問題の一つとして挙げられており、長時間実行されるセッションでこの問題が顕在化するとされている。

ただし、提供されたソース情報はこの記事の冒頭部分と最初のシナリオ(パフォーマンスボトルネック)の詳細に限られており、メモリ診断の具体的なCloudWatchクエリや手順については本文が途中で切れているため記載がない。メモリ問題の診断ステップの詳細を確認したい場合は、記事本文の続き、またはAgentCore Observabilityの公式ドキュメント(docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability.html)を参照する必要がある。 (出典: 前出 [aws.amazon.com])

関連機能:AgentCore EvaluationsとAgentCore Insights

記事は、パフォーマンス最適化の追加情報とベストプラクティスとして、Amazon Bedrock AgentCoreの別の機能であるAgentCore EvaluationsとAgentCore Insightsを確認するよう案内している。これらもAgentCore Observabilityと同様にAmazon Bedrock AgentCoreの一部として提供される機能であることがソースから読み取れるが、それぞれの具体的な機能内容や使用方法についてはこの記事内で説明されておらず、詳細はリンク先の公式ドキュメントに委ねられている。

本番エージェントの運用を始める場合、まずAgentCore Observabilityの公式ドキュメント(docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability.html)を開き、CloudWatch Transaction Searchを有効化した上でエージェントをデプロイすることが、記事が示す前提条件に沿った最初のステップとなる。 (出典: 前出 [aws.amazon.com])

まとめ

  • CloudWatchのLatency > 3000のようなクエリでエージェント呼び出しを絞り込み、レイテンシの降順でソートすることで、数千件のログの中から「システム的なボトルネック」を抱える具体的なRequestIdを特定し、優先的に調査対象にできる。
  • 高レイテンシが確認されたRequestIdをタイムライン分析クエリ(Operation, Duration, SpanName)にかけることで、リクエスト内のどの操作(ツール呼び出し、モデル推論など)が時間を消費しているかを特定でき、闇雲なチューニングではなくデータに基づいた最適化対象の絞り込みができる。
  • P95応答時間のような閾値ベースの監視を導入することで、エラー率には表れない「ユーザーが離脱するレベルの劣化」をエラーアラート発生前に検知する仕組みを本番環境に組み込める。
  • AgentCore ObservabilityとCloudWatchによる性能診断の手法を、Part 1で扱われた無限ループ・ツール呼び出しエラーのデバッグ手法と組み合わせることで、「壊れているエージェント」と「動くが遅いエージェント」の両方に対応できる継続的な本番監視体制を構築できる。