はじめに
生成AIを利用しているとどのぐらいトークンを使ったのか、といったメトリックや、生成AIへのプロンプトとレスポンスの生データを見たい、というLoggingの要望がかなりあるのではないかと思います。
Elastic v8.16.0からAWS BedrockのInvocation LogとMetricを取得して可視化するIntegrationがリリースされました。ドキュメントはこちらです。
https://www.elastic.co/docs/current/integrations/aws_bedrock
この機能についてのブログもリリースされています。
https://www.elastic.co/observability-labs/blog/llm-observability-aws-bedrock
本記事はv8.16.0をベースに記載しています
手順
以下の3ステップです。
- Bedrock Invocation Logの設定を行う
- Bedrock Integrationを設定する
- Elastic Agent (or Serverless ForwarderやFirehoseなど)でElasticsearchへの送信設定をする
データの流れとしては
Bedrock Invocation Log => CloudWatch Log => Elastic Agent => Elasticsearch
となります。
Bedrock
Bedrock Invocation Loggingで検索すると結構ヒットします。
例えばこことか。
https://dev.classmethod.jp/articles/amazon-bedrock-model-invocation-logging/
あらかじめCloudwatch LogのLog Groupを作成しておいてください。
Service roleはこの画面でCreate and use a new role
を選べばよしなに作成してくれます。
設定に問題がなければ、以下のようなログがCloudwatchに表示されます。
ログデータ確認
BedrockのPlaygroundでChatをやってみるのが一番手っ取り早いです。
その後、Cloudwatchには以下のようなログが出てきます。
AWS Bedrock Integration
Integrationはログを自動的に整形して可視化のダッシュボードを作成するものです。
Ingest PipelineとKibana Lensが主な構成要素です。
まず3本線メニューからManagementの下にあるIntegrations
をクリックします。
検索バーがあるのでbedrock
と入力すると以下のようにフィルタされるので、表示されているAmazon Bedrockをクリックします。
右上のAdd Amazon Bedrock
をクリックします。
次の画面はクラスタ作成後に初めてIntegrationsを追加する人だけ表示されます
この画面が表示されたら、一番下のAdd integration only (skip agent installation)
をクリックします。
次の部分に入力して、最後に一番下にあるSave and continue
をクリックして保存します。
- Access Key ID
- Secret Key
- Collect Logs from Cloudwatchを有効にしてから
Change default
をクリックして詳細設定を展開してLog Group ARN
を入力
次にAdd Elastic Agent to your hosts
をクリックしてElastic Agentをインストールします。
少しスクロールダウンすると各環境におけるインストールコマンドが表示されていますので、これをコピー&ペーストしてインストールします。
問題なくインストールができて設定に問題がなければ以下のようになります。
ダッシュボード
データが来たところで、ダッシュボードで確認してみましょう。
3本線メニューからDashboard
をクリックします。
[Amazon Bedrock] Overview
をクリックします。他にもダッシュボードがいっぱいあって見つからない場合は検索窓にbedrockと入れてください。
デフォルトでは直近15分のデータしか表示しません。PlaygroundのChatを触ったのはだいぶ前だと思いますので、右上のLast 15 minutes
の横のカレンダーアイコンをクリックして、Playgroundを操作した時間が範囲に入るように時間範囲を選びます。
全体画面
上の方はメトリック、真ん中あたりにInvocation Logがあります。
メトリックで気になるのはToken Usageあたりではないかと思います。
Discoverで確認
Discoverに移ってlogs-*
を表示し、フィールドをbedrock
でフィルタします。Bedrock関係のフィールドが表示されるので、興味のあるフィールドをクリックしてみましょう。
aws_bedrock.invocation.model_id
というフィールドは全てのログに入っているので、これが存在することを条件とするフィルタを掛けると、Invocation関係のログのみ表示できます。
当然全文検索エンジンなので、Chatで使った単語を打ち込めばそれでも検索できます。
例えばここでは"ERR-1000"というエラー番号で検索をかけています。
エラー番号などに曖昧な検索は必要ないので、ここはキーワード検索が必須になると思います。
誰が使っているかを知りたい場合はgen_ai.user.id
に入っています。
まとめ
Elasticでは生成AIと連携するツールを数多く出してきました。
本記事の機能を利用することにより、生成AIにかかるコストの把握や、プロンプトエンジニアリングがやりやすくなります。
また誰が使用しているかも一目瞭然ですので、セキュリティチェックにも有用です。
検索/O11y/Security全てできるElasticは生成AIを利用するのに最適なプラットフォームです。
是非お試し下さい。