生成AIアプリをしっかり観測しよう！Amazon BedrockをNew Relic AI Monitoringで観測！

# はじめに
AWS Summit Japan ２０２４の開催が近づいていますね！！
今年は次の時代を創り出すキー・テクノロジーとして**生成AI**が取り上げられることになっており、注目トピックスになっていますね！基調講演以外のセッションも生成AI関連の話を取り上げられる方が大変多いようです。

今回、２０２４年３月にGAになった**New Relic AI Monitoringで話題のAmazon Bedrockをモデルとして利用したAIアプリケーションを観測**してみます。New Relic AI Monitoringを利用することで、AIアプリケーションから呼び出しているAmazon Bedrockのパフォーマンスや品質を観測できるようになります。

ハンズオンを通して確認してみましょう。

:::note info
このアップデートの詳細はこちら
[New Relic アップデート(2024年3月)](https://newrelic.com/jp/blog/nerdlog/new-relic-update-202403 "New Relic アップデート(2024年3月)")
[New Relic アップデート一覧
](https://newrelic.com/jp/blog/nerdlog/new-relic-update "New Relic アップデート一覧")
:::

# まずは無料サインアップしよう
New Relicには、無料で利用できるフリープランがあります。New Relicは利用ユーザー数と転送データ量がライセンスの構成要素ですが、全機能使い放題のユーザー1名と100GBのデータ転送が無料で使用できます。登録フォームへの入力だけですぐに使えるので、アカウントを持ってない方はまずアカウントを作成しましょう！

フリープランのサインアップフォームに氏名などの必要事項を入力するだけですぐに利用開始できます。早速アクセスして登録してみましょう。
https://newrelic.com/jp/sign-up-japan

:::note info
[これからはじめるNew Relicライフ！ 無料でアカウントを開設しよう！](https://newrelic.com/jp/blog/how-to-relic/create-new-account)
:::

# 試してみよう
## 前提条件
- Amazon Bedrockが利用できること
- IAMユーザーにAmazon Bedrockを利用できる権限があること
- New Relicのアカウントがあること
- python,pip,gitが使える環境

## 利用するアプリケーション
今回はNew Relicが用意したAmazon BedrockやOpenAIなどのAI基盤をNew Relic AI Monitoringで観測できるサンプルアプリケーションを利用します。
[nr-openai-observability](https://github.com/newrelic/nr-openai-observability.git)

## Amazon Bedrock 設定
まずはAmazon Bedrockを利用できるようにAWS コンソールで設定しましょう。

Amazon BedrockをAWS コンソールで選択します。サンプルアプリケーションがus-east-1のBedrockを利用する形になっているため、us-east-1に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/aaa2abfd-3cd5-d6ae-6338-63a71b4a6a9a.png)

「使用を開始」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/7135d3f4-8003-2f8e-1ecc-a5a2dff342f9.png" width="50%">
「モデルアクセスを管理」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/a256fd8c-0d17-ce98-fcc3-fdb9605aa72f.png" width="６0%">
「Enable all models」を選択、ガイドに沿って、Submitをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/23050c6a-2e93-0365-d37c-b27a9aa420e2.png" width="６0%">
「モデルアクセス」でベースモデルへのアクセスが付与されたことを確認します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/aa826cfa-81ec-7c2b-f944-94e70bee6a77.png" width="６0%">

Amazon Bedrockの使用準備は以上になります。

## アプリケーション実行環境の用意

### アプリケーションの実行環境をセットアップ
今回はAmazon Linux 2023でアプリケーションの実行環境を用意します。
本記事ではEC2の作成の流れは割愛します。EC2はインターネットに出れるネットワークに配置してください。

EC2にSSHでログインして、pipとgitをインストールします。
```bash
$ sudo yum install -y python-pip git
```
「nr-openai-observability」を/home/ec2-user/以下にCloneします。
```bash
$ git clone https://github.com/newrelic/nr-openai-observability.git
```
アプリケーションのルートディレクトリに移動します。
```bash
$ cd nr-openai-observability/
```
Bedrockのサンプルアプリが使えるブランチにチェックアウトします。
```bash
$ git checkout -b demo origin/staging
branch 'demo' set up to track 'origin/staging'.
Switched to a new branch 'demo'
```
必要なモジュールをインストールします。
```bash
pip install nr-openai-observability boto3
```

### New Relic APM エージェントをインストールする
nr-openai-observabilityのアプリケーションからAmazon Bedrockのモデルの呼び出し状況や、アプリケーションのパフォーマンスやエラーなどの状態を計測するために、PythonのAPM エージェントをインストールします。
New Relicの管理サイトにログインして、Add Data -> AI Monitoring -> Amazon Bedrockを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/69d9e6e6-0afb-265f-1879-e9a758279a35.png" width="70%">
「Begin installation」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/fa14a3c4-e666-488d-a993-d7fdc5ce4384.png" width="66%">
Pythonを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/12cc7807-b219-5f55-dc95-5e8a512a038c.png" width="66%">
On a host(package manager)を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/fd379437-21a2-a03e-2847-2ff9eb9e7e77.png" width="90%">
「Create a new key」を選択して、後で使用するlicense keyをコピーして控えておきます。
license keyを控えたら、次のページに進みます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/e040e8ca-20b9-5905-11d8-725e36126441.png" width="80%">
EC2にPython エージェントをインストールします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/feba45db-8f72-fd40-e608-80574fbb260e.png" width="80%">
```bash
pip install newrelic
```
アプリケーションの名前を入力し、アプリケーションのディレクトリに配置するPython エージェントの設定ファイルをコピーしますして、アプリケーションのルートディレクトリにnewrelic.iniというファイル名で保存します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/76b11970-14e2-eb28-5d9d-9cea70c928c3.png" width="80%">
```bash
/home/ec2-user/nr-openai-observability/newrelic.ini
```

スキップします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/7fda3bec-a1ec-49fa-90c3-810d3c966d56.png" width="80%">

サンプルアプリケーションを修正しないと実行時にエラーがでるため、一部修正します。
```bash
vim /home/ec2-user/nr-openai-observability/examples/bedrock_example.py
```
monitor.initialization()にアプリケーション名を入力します。
```bash
monitor.initialization("bedrock-demo")
```
アプリケーション実行前に各種環境変数を設定します。
```bash
export NEW_RELIC_LICENSE_KEY=New Relic license key
export NEW_RELIC_APP_NAME=bedrock-demo
export AWS_ACCESS_KEY_ID=AWSアクセスキー
export AWS_SECRET_ACCESS_KEY=AWSシークレットキー
```
サンプルアプリケーションを実行します。
```bash
NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python3 examples/bedrock_example.py
```
実行時のコンソールの出力例です。New Relicにデータがレポートされていること、Amazon Bedrockを実行した結果が出力されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/cbcc3e77-d648-4416-bdb4-6640634e1e71.png" width="90%">

「Test connection」をクリックして、Python agentのStatusがSuccessfulになることを確認します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/e630bf5a-dc2f-3f02-d478-23cc3df09089.png" width="80%">

# データを確認
New Relicの管理サイトで入ってきているアプリケーションのデータを確認してみます。

All Capabilities-> AI Monitoringをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/80d8d3be-cf4f-d7a5-fcac-bfe52d994573.png" width="80%">
アプリケーション名をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/a8272238-a629-67d6-a5ce-8668e8241154.png" width="９５%">
「AI Responses」をクリックすると、アプリケーションからAmazon Bedrockを呼び出したリクエスト数や平均レスポンスタイム、トークンの利用状況などを確認することが可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/77d6c560-1cf2-1e3e-de99-fa4683d67384.png" width="９0%">
「Responses」に記録されたリクエストをクリックすると、Amazon Bedrockの処理の詳細を確認することが可能です。
どんな質問に対して回答を返しているのかまで確認できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/6d608211-a636-5de2-1f1a-e8451f7bd42c.png" width="９0%">

回答文に機密情報が含まれる場合、New Relicに取り込まないようにすることが可能です。設定については以下Qiita記事を参考にしてください。

https://qiita.com/ume67026265/items/4bd66396d39d8921e088#%E6%A9%9F%E5%AF%86%E6%80%A7%E3%81%AE%E3%81%82%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92new-relic%E3%81%AB%E9%80%81%E3%82%89%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88


# まとめ
本記事では、Amazon Bedrockを利用したAIアプリケーションのパフォーマンスやAmazon Bedrockのモデルの利用状況などをNew Relic AI Monitoringで観測できる流れをハンズオン形式で紹介させていただきました。
自社でAIを使ったソリューションを開発、運用し始めている方が増えている中で、開発しているAIアプリのレスポンスタイムや品質の管理をどうするか課題をお持ちの方が多いかと思います。New Relic AI Monitoringを使うことで、AIアプリケーションから呼び出しているAIモデル基盤のパフォーマンスや品質を簡単に観測できるようになります！

New Relicの無料アカウントの無料枠内で試せますので、是非ハンズオンを実施して使用感をご確認ください！！

:::note info
このアップデートの詳細はこちら
[New Relic アップデート(2024年3月)](https://newrelic.com/jp/blog/nerdlog/new-relic-update-202403 "New Relic アップデート(2024年3月)")
[New Relic アップデート一覧
](https://newrelic.com/jp/blog/nerdlog/new-relic-update "New Relic アップデート一覧")
:::
:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::
:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::