New RelicのOpenAI ObservabilityでOpenAI APIの利用状況を可視化する

# 概要
　オブザーバビリティプラットフォームの New Relic は、機械学習モデルのパフォーマンスモニタリングにも対応しています。New Relic を使用することで、機械学習モデルのAPIに関する平均リクエスト時間、総リクエスト数、総コストといったメトリクスを取得・可視化することができます。これにより、機械学習モデルのサービスが期待した通りに機能しているかを迅速に確認することが可能です。
　今回のアップデートにより、わずか2行のコードで OpenAI を用いたアプリケーションのモニタリングが可能になりました。これにより、New Relic 上でモデルのコスト、使用状況、パフォーマンスをリアルタイムに追跡できるようになりました。

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

　OpenAI Observability は、現時点（2023年10月31日時点）で Python と Node.js のアプリケーションに対応しています。今回は、Python を使用した場合の設定手順を紹介します。
　では実際にやってみましょう。
 
# 設定手順
　OpenAI Observabilityのセットアップは非常に簡単です。まずはガイドに従って設定していきます。
　New Relic の GUI 上で［**Add Data**］を開き、検索窓に 「**OpenAI**」 と入力すると**OpenAI Observability** が表示されます。［**Add Data**］はショートカットキー「**G + D**」を使って開くことも可能です。
![add_data.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/99145bcf-0054-dfc4-6772-501349e2ad0b.png)

　今回はPythonアプリケーションで確認するため、Pythonを選択します。
![add_data_python1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/33477149-57b3-5c73-8af9-d8cf5f9e49a1.png)

　[**Give your application a name**] に New Relic 上で表示するアプリケーション名を入力して[**Save**]をクリックして次のステップへ進みます。
![appname.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/64ba173c-383c-67ae-c140-4dd90a5bf816.png)

 ここからPythonアプリケーションのコードを変更していきます。
![codesettings_mask.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/b4ac5e5a-60f3-4000-b96a-5992bc76d363.png)

下記のコマンドを実行して**nr_openai_observability**をインストールします。
```console:packageのインストール
pip install nr_openai_observability
```

次にインストールしたPackageを使用するようにコードを変更しましょう。変更内容は非常に簡単で2行のコードを追加するだけです。
```diff_python:OpenAIのAPIを呼び出しているPythonアプリケーション
import os
import openai
+ # New RelicのOpenAI Observability用Packageのimport
+ from nr_openai_observability import monitor

<省略>

+ #　New Relicで表示するアプリケーション名とAPIキーの設定
+ monitor.initialization(application_name="openai-sample", license_key=<NEWRELIC_API_KEY>)

# OpenAIのAPIキー
openai.api_key = os.getenv("OPENAI_API_KEY")

<省略>
```

　これでアプリケーションの設定は完了です。アプリケーションを実行するとOpenAIのAPIをコールした情報の New Relic へのデータ連携が開始されます。
 設定画面で [**Continue**] ボタンをクリックして設定を進めましょう。
 
![スクリーンショット 2023-10-30 0.02.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/f0bbb205-ed96-e642-48b0-2034d119362c.png)
　[**Test connection**] をクリックすると上記の画面のように接続テストが開始されます。アプリケーションから New Relic へデータが連携されたことが確認できると**Status**が更新されて [**See your data**] がアクティブにるため、クリックするとセットアップ手順は完了です。

# 確認
　それでは連携されたデータを確認していきましょう。
## OpenAIの呼び出し状況を確認する
　まず New Relic で事前に用意された UI でデータの表示を確認していきましょう。[All Capabilities]から[**Mobel Performance**]を開くと今回設定を追加したアプリケーションが表示されます。
![Entity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/3624adec-123e-2f37-6c0b-e40ae334398e.png)

　このアプリケーション開くと下記のような**Summary**画面が表示され、リクエスト数やレスポンスタイムだけではなく、トークン数も表示されています。
 ![summary.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/34bcfec2-0ade-6177-03c4-86b5e8802b68.png)

　APIをリクエストした際のプロンプトとそれに対する返答も確認することが可能です。実行されているプロンプトの内容やその返答の精度や傾向を分析するために使用できます。
![completion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/6f14e7a2-90d5-d2b6-940d-a1d50f4e0e25.png)

# まとめ
　New Relic の OpenAI Observability により、OpenAI API の利用状況を可視化できるようになりました。Pythonでの設定方法を紹介しましたが、Node.jsでも利用できます。また、Change Tracking と組み合わせることでプロンプトの変更やファインチューニングによって API の応答やパフォーマンスに影響を与えているのかどうかを確認することも可能です。

　ぜひアプリケーションのパフォーマンスを可視化する New Relic APM の加えて、 OpenAIのような機械学習モデルのパフォーマンスの可視化にトライしてみてください！

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