New Relic Now Start training on Intelligent Observability February 25th.
Save your seat.

AIアプリケーションは複雑かつ分散化されているため、効果的な監視が困難になっています。New Relicのインテリジェントなオブザーバビリティプラットフォームと、Pulumiのinfrastructure-as-code(コードとしてのインフラストラクチャ)およびシークレット管理ソリューションを組み合わせることで、エンドツーエンドの「コードとしてのオブザーバビリティ」アプローチが可能になります。この方法により、チームは次のことが可能になります。

  • 人工知能(AI)と大規模言語モデル(LLM)の監視インストゥルメンテーションをクラウドリソースとともにプログラムで定義します。
  • APIキーとクラウドアカウントの資格情報を安全に管理します。
  • AIアプリケーションとインフラストラクチャとともに、New Relic計装を自動的にデプロイします。

利点:

  • 環境全体にわたる一貫した監視
  • バージョン管理されたオブザーバビリティ設定
  • パフォーマンスにおける問題をより簡単に検出
  • AIモデルの動作とリソースの使用状況に関するより深いインサイト

コードとしてのオブザーバビリティのアプローチは、AIアプリケーションの拡張や進化に応じて、開発者が可視性を維持するのに役立ちます。

Pulumiとは何ですか?

Pulumiは、プラットフォームエンジニアと開発者向けに、次のような幅広い製品とサービスを提供しています。

  • Pulumiインフラストラクチャ アズ コード(IaC): クラウドインフラストラクチャを定義するためのオープンソースツール。複数のプログラミング言語をサポートしています。たとえば、Pythonを使用して、AWS Fargateサービス、Pineconeインデックス、New Relicのカスタムダッシュボードを宣言できます。
  • Pulumiクラウド: オープンソースツールに加えて、状態とシークレットの管理、チームコラボレーション、ポリシーの適用、AI搭載チャットアシスタント Pulumi Copilot などの追加機能を提供するホスト型サービス。
  • Pulumi環境、シークレット、設定(ESC): これにより、オブザーバビリティに必要な機密情報の安全な管理が保証されます。たとえば、New Relic、OpenAI、Pinecone APIキーを管理し、AWSでOpenID Connect(OIDC)を設定できます。このサービスもPulumiクラウドの一部です。

Pulumiを使用すると、チームはオブザーバビリティの設定とインフラストラクチャ定義のバージョン管理を行うことができます。これにより、環境間の一貫性が確保され、アプリケーションの変更と監視の更新、基盤となるインフラストラクチャの変更との相関関係が簡素化されます。

New RelicとPulumiでコードとしてのオブザーバビリティを実現する方法

このガイドでは、New Relicアプリケーションパフォーマンス監視(APM)エージェントを設定し、Pulumiを使用してPythonでNew Relicダッシュボードを定義して、既存のチャットアプリケーションに AIとLLM監視 機能を追加します。

ガイド全体で参照されているアプリケーションとインフラストラクチャの最終バージョンは、AIチャットアプリのパブリックGitHubリポジトリ にあります。

始める前に

以下のものを用意してください。

このガイド全体で使用されるすべてのサービスは、それぞれの無料ティアに該当します。

OpenAIデモアプリケーションを探索する

OpenAIデモアプリケーション このガイド全体で使用されるものは、バックエンドではNode.js、フロントエンドではPythonで記述されています。OpenAIと対話して、生成的な会話型AIインタラクションを通じてさまざまなゲームプレイを生成します。パブリックOpenAIプラットフォームを使用してAPIを呼び出し、GPT-3.5 Turbo、GPT-4 Turbo、GPT-4oなどのさまざまなLLMにアクセスします。

以下は、「上位または下位」のゲームプレイのスクリーンショットです。

ai chat application

このデモでは、AIが知らない情報や幻覚を起こす可能性のある情報を一般的に検索する、検索拡張生成(RAG)フローをシミュレートします。このアプリは、いくつかの一般的なゲーム名と手順をPineconeベクトルデータベースに保存し、OpenAIを呼び出すときにそれを埋め込みとして使用します。

このアプリケーションは、トレース、メトリクス、ログなどのパフォーマンスを監視するように設定されています。これは、リクエストやレスポンスなどの AIインタラクションの監視におけるNew Relicの最新のイノベーション を活用します。この機能により、コンプライアンスを確保し、品質を向上させ、AIコストを監視します。

Docker Composeを使ってローカルでアプリを実行する

ローカルマシン上でチャットを実行する最も簡単な方法は、Docker Composeを使用することです。docker-compose.ymlを調べる./appフォルダーにファイルを作成し、図のように必要な.envファイルを作成します。次に、ターミナルで次のコマンドを実行します。

cd app 
docker compose up \-d –build

デフォルトでは、ウェブサービスは http://localhost:8888/ で実行されます。

APIエンドポイントを試してみる

APIバックエンドは、すべてのAI機能を公開するさまざまなエンドポイントを提供します。フロントエンドはこれらのエンドポイントを活用して、エンドユーザーがゲームを選択し、OpenAIを使用してゲームインタラクションを開始する、つまりゲームをプレイするためのアクティビティのフローをシミュレートします。

より上位またはより下位のゲームプレイをシミュレートするには、次の手順に従います。

  1. ウェブサービスhttp://localhost:8888/ を開きます。
  2. ゲームを入手 ボタンをクリックします。ゲームのリストが表示されます。
  3. 入力 フィールドに より上位またはより下位 をコピーします。
  4. 次のステップのゲームプロンプトを取得するには、ゲームプロンプトを取得 をクリックします。
  5. ゲームと対話するためのOpenAIリクエストを送信するには、プロンプトを送信 をクリックします。
  6. ゲームインタラクションを挿入 テキストボックスに最初の推測を入力します。AIが選んだ数字と比較して、お客様の推測が正しかったかどうかを示すメッセージが表示されます。正しい数字を推測するまでこの手順を繰り返します。

AIを使用してNew Relicエージェントを設定する

チャットアプリケーションは、APIおよびウェブサービス用のNew Relic APMエージェントを使用して、テレメトリーをキャプチャするように設定されています。このエージェントは、AIインタラクション(リクエストや応答など)の監視におけるNew Relicの最新のイノベーションも活用します。この機能により、コンプライアンスを確保し、品質を向上させ、AIコストを監視します。

New Relic AIモニタリングを有効にします。New Relic APMエージェント設定 を介した機能または環境変数経由:

NEW_RELIC_AI_MONITORING_ENABLED = TRUE
NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED = 10000
NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED = 100000

New Relicエージェントによってストリーミングされたデータを調査する前に、Pulumiを使用してアプリケーションをAWSにデプロイし、カスタムダッシュボードを作成します。これにより、アプリケーションと対話するグローバルトラフィックをシミュレートし、パフォーマンスとコストを予測するための代表的なAIメトリクスを生成できるようになります。

Pulumi ESCでシークレットを管理する

すべてをローカルで実行することは、ソフトウェア開発ライフサイクルの最初のステップとして推奨されることですが、クラウドテスト環境への移行やそれ以降では、.envを確実に実行する必要があります。ファイルは安全に利用可能であり、すべてのアプリケーションインフラストラクチャの依存関係はデプロイおよび設定されています。DevOpsの「Ops」側が重要になりますが、これは必ずしも困難な作業ではありません。Pulumi ESCを活用して、チャットアプリケーションのシークレットを管理します。

Pulumi ESC環境を作成する

すべての.envを保存するPulumi ESC環境を作成します。Pulumiクラウドのシークレット。これにより、チームは承認されたアカウントと機密情報を共有できるようになります。New Relicライセンスキー、OpenAIトークン、Pinecone APIキーが手元にあることを確認してください。

ターミナルで以下を実行します:

pulumi login
E=my-cool-chat-app-env
pulumi env init $E --non-interactive
pulumi env set  $E environmentVariables.NEW_RELIC_LICENSE_KEY 123ABC --secret
pulumi env set  $E environmentVariables.OPENAI_API_KEY 123ABC --secret
pulumi env set  $E environmentVariables.PINECONE_API_KEY 123ABC --secret

Pulumi CLIで.envファイルをロードする

ESC環境を定義したので、それをいくつかの方法で使用できます。例えば、.envファイルを設定するには、dotenvフォーマットを使用して環境を開きます。

cd ./app
pulumi env open $E --format dotenv > ./.env
docker compose up -d –build

Pulumiコマンドは、Amazon EC2インスタンスまたはAWS Fargate内で実行するようにスクリプト化できます。次に、Pulumi IaCとPythonを使用してAWSリソースを定義し、AWSでアプリケーションを実行できるようにします。詳細については、Pulumi ESCドキュメント をご覧ください。

Pulumi Copilotでインフラストラクチャコードを生成する

最近では、インフラストラクチャをコードとして使用する場合、ゼロから始める必要はありません。代わりに、生成AIの力を活用してPythonコードを記述し、チャットアプリケーションに必要なすべてのクラウドリソースを宣言します。これには、New Relic、AWS、Pineconeリソースの宣言が含まれます。

Pulumi Copilotは、Pulumiクラウドに統合された会話型チャットインターフェースです。Pulumi IaCの作成とデプロイメントを支援します。Pulumi Copilotとインテリジェントな会話をして、作成済みのESC環境にもアクセスできるPythonベースのPulumiプログラムの作成を開始しましょう。

Pulumi Copilotに次の機能を追加:

Can you help me create a new and empty Python Pulumi project called "my-cool-chat-app" with a new stack called dev? Add "my-cool-chat-app-provider-creds" to the imports in the dev stack

New Relic AI LLM監視ダッシュボードを宣言する

ダッシュボードを共有する標準的な方法は、JSONのコピーとインポート機能 を使用することです。ただし、これらをコンソール経由でインポートすると、時間の経過とともに再現性の問題が発生する可能性があります。たとえば、ダッシュボードのJSON定義が望ましくない方法で変更された場合、どうなりますか?バージョン管理の詳細をすぐに入手できないため、これは課題となります。

代わりに、宣言型のアプローチを使用してJSONファイルを「インポート」すると、いくつかの利点が得られます。コードを通じてダッシュボードのライフサイクル(作成、削除、更新)を管理し、時間の経過に伴う変更を追跡できるようになります。また、デプロイメントパイプラインに組み込み、チーム間で共有することも簡単になります。

AI/LLM監視ダッシュボードのJSONファイルがあり、それを使用してNew Relicアカウントで新しいダッシュボードを作成したいと考えています。Pulumi Copilotとのチャットを続行し、現在のソリューションを更新するように指示します。

Okay great!入力として提供する既存のJSONファイルに基づいて、New RelicダッシュボードをデプロイするようにPythonコードを更新できますか?

Pineconeインデックスを宣言する

チャットアプリケーションをローカルでテストするには、事前にPineconeインデックスが必要でした。 チャットアプリケーションをクラウドにデプロイする前に、インデックスの有無を確認しましょう。

Pulumi Copilotにこのリソースを代わりに定義してもらいましょう。

Thank you!また、AWS us-east-1の「デフォルトの」ネームスペースに、1536ディメンションの「games」という名前のサーバーレスPineconeインデックスも必要です。このリソースを定義するPythonコードを生成できますか?

Amazon EC2インスタンスを宣言する

クラウド環境でチャットアプリケーションをテストするには、EC2インスタンスを使用します。Pulumi CopilotにすべてのAWSリソースを定義するように依頼しましょう。

Perfect!また、チャットアプリケーションをAmazon EC2 Linuxインスタンスにデプロイしたいと考えています。
EC2インスタンスのVPC、セキュリティグループ、パブリックサブネット、ルートテーブルを作成します。
セキュリティグループが、どこからでもポート22の受信SSHトラフィックを許可していることを確認します。
EC2インスタンスがパブリックにアクセス可能であることを確認し、Docker Composeコマンドを実行してアプリケーションを起動します。
EC2インスタンスをパブリックIPに関連付ける
ルートテーブルの関連付けにdepends_onリソースオプションを使用して、EC2インスタンスを更新します。

Pulumiでアプリケーションをデプロイする

CopilotにPythonインフラストラクチャコードのサポートを依頼したので、アプリケーションをデプロイします。チャットウィンドウで、Pulumiコード ドロップダウンを展開します。Pulumiでデプロイ ボタンをクリックして、新しいプロジェクトを作成します。

pulumi copilot

プロジェクトをダウンロードしたら、認証情報を追加し、コードを少し変更して、AWSにアプリケーションをデプロイします。

  • Pulumiでデプロイ ボタンをクリックして、新しいプロジェクトを作成します。それから、
  • CLIデプロイメント デプロイメント方法を選択し、プロジェクトを作成 をクリックします。
  • 次のウィンドウの「開始する」手順のステップ3に従って、プロジェクトを開発環境にダウンロードします。

GitHubリポジトリに比較的小さなアプリケーションが既にある場合は、ルートレベルに infra という名前の新しい空のフォルダーを追加し、そこにPulumiプロジェクトのコンテンツを解凍します。ソリューションを GitHubでホストされている最終バージョン と比較し、Copilotが見落としている可能性のある細かい点を修正します。

また、共有された最終バージョンからの次の変更も含めてください。

詳細については、Pulumi Copilotのドキュメント をご覧ください。

Pulumiが宣言されたすべてのリソースをデプロイするには、クラウドアカウントにアクセスする必要があります。これらの資格情報は、「my-cool-chat-app-provider-creds」という名前のPulumi ESC環境に保存されます。以下の手順ですべてをデプロイする前に、README を参照して環境を設定し、Python仮想環境をセットアップしてください。

pulumi up --stack dev  --yes

すべてのリソースが作成されるまでに約1分かかります。作成したら、表示されるパブリックURLにアクセスして負荷テストを実行します。

上記のコマンドからの部分的な出力例:

     Type                                Name                        Status              
 +   pulumi:pulumi:Stack                 my-cool-chat-app-dev-dev    created (57s)       
 +   ├─ newrelic:index:OneDashboardJson  my_cool_dashboard           created (2s)        
 +   ├─ pinecone:index:PineconeIndex     my_cool_index               created (7s)        
 +   ├─ docker-build:index:Image         ai-chat-demo-api            created (2s)        
 +   ├─ docker-build:index:Image         ai-chat-demo-web            created (3s)        
 +   ├─ aws:ec2:Vpc                      my_cool_vpc                 created (13s)       
 +   ├─ aws:ec2:Subnet                   my_cool_subnet              created (11s)       
 +   ├─ aws:ec2:SecurityGroup            my_cool_security_group      created (4s)        
 +   ├─ aws:ec2:InternetGateway          my_cool_igw                 created (1s)        
 +   ├─ aws:ec2:RouteTable               my_cool_route_table         created (2s)        
 +   ├─ aws:ec2:RouteTableAssociation    my-route-table-association  created (0.89s)     
 +   └─ aws:ec2:Instance                 my_cool_instance            created (24s)       

Outputs:
    url:  "52.41.60.240"

Resources:
    + 12 created

Duration: 1m0s

New Relic AI LLMダッシュボードを探索する

要約すると、チャットアプリケーションは、New Relic APMエージェントとインフラストラクチャエージェントを使用して、トレース、メトリクス、ログなどのパフォーマンスを監視するように設定されています。トラフィックのシミュレーションが完了したので、New Relicで収集されたテレメトリーデータを確認しましょう。

AIレスポンスメトリクス

new relic - apm summary

AIレスポンス セクションでは、AI/LLMアプリケーションを監視する際の主要なメトリクスが強調表示されます。これには、AIインタラクション内の 合計応答数レスポンスタイム応答ごとのトークン使用量エラー などのデータが含まれます。時系列グラフでは、同じ情報がさらに歴史的な背景とともに表示されます。

画面の下部には、エンドカスタマーがチャットアプリケーションとやり取りする際に使用したリクエストと応答に関するインサイトが表示されます。

new relic - apm ai responses

AIモデルの比較

New Relic AIモニタリングのもう1つの非常に重要な側面は、モデルインベントリ セクションです。

model inventory

このビューでは、チャットアプリケーションで活用されているすべてのAI/LLMモデルの直感的な概要が提供されます。ご覧のとおり、同じアプリケーションをOpenAIモデル GPT-3.5 TurboGPT-4 TurboGPT-4oで実行しました。使用AIモデルは、API AIバックエンドのchatModel変数 に反映されます。このビューでは、パフォーマンス、応答の品質、エラー、コストなど、すべての重要な側面が一目でわかります。

new relic - apm ai cost

AIモニタリングとカスタムルックアップテーブル, からの生データを組み合わせると、New Relicでは、カスタムダッシュボードを構築することもできます(カスタムダッシュボードをインポートするためのリファレンスについては、[Pulumiを使用してアプリケーションをデプロイする](#deploy-the-application-with-pulumi)を参照してください。これらのカスタムダッシュボードは、実際の OpenAI プラットフォームのコスト(ドル単位) などの追加データを取得でき、監視からの入力トークンと出力トークンを活用して、チャットアプリケーションを実行するためのAIの総コストを計算できます。

OpenAIカスタムダッシュボード

new relic - custom dashboard openai