Snowflake AI 可観測性リファレンス

このドキュメントは、Snowflake Cortex AI Observability を使用して、生成 AI アプリケーションのパフォーマンスを評価および監視するための包括的なリファレンスを提供します。

以下のコンセプトをカバーしています。

  • データセットと属性

  • 評価メトリック

  • 実行

  • アクセス制御とストレージ

データセットと属性

データセットは、アプリケーションのテストに使う入力のセットです。また、期待される出力のセット(グランドトゥルース)をコンテナーに含めることもできます。

TruLens Python SDK を使用して、データセットを Snowflake テーブル または pandas dataframe のいずれかに指定できます。データセットの各列は、以下の予約属性のいずれかにマッピングされていなければなりません。

予約属性

入力属性

説明

RECORD_ROOT.INPUT

LLM への入力プロンプト。

型: 文字列

RECORD_ROOT.INPUT_ID

入力プロンプトの一意識別子。

入力 ID を提供しない場合、 ID が自動的に生成され、各入力に割り当てられます。

型: 文字列

RETRIEVAL.QUERY_TEXT

RAG アプリケーションのユーザークエリ

型: 文字列

RECORD_ROOT.GROUND_TRUTH_OUTPUT

入力プロンプトに対して期待される応答。

型: 文字列

アプリケーションのインスツルメンテーションでは、インスツルメンテーション対象の関数(またはメソッド)の入出力パラメーターを、関連する入出力属性にマッピングする必要があります。 @instrument デコレーターを使用してパラメーターをマッピングし、メトリクスを計算します。データセットの一部として指定された入力属性に加えて、以下の出力属性を使用して関連関数をインストゥルメントすることもできます:

出力属性

出力属性

説明

RETRIEVAL.RETRIEVED_CONTEXTS

LLM によって生成される出力。

タイプ: リスト [文字列]

RECORD_ROOT.OUTPUT

LLM からの生成された応答。

型: 文字列

評価メトリック

評価メトリクスは、アプリケーションの精度とパフォーマンスを測定する定量的な方法を提供します。これらのメトリクスは、アプリケーションへの特定の入力、 LLM 生成された出力、および任意の中間情報 (RAG アプリケーションから取得された結果など) を使用して計算されます。グランドトゥルース・データセットを使用してメトリクスを計算することもできます。

"LLM-as-a-judge" アプローチでメトリクスを計算することができます。このアプローチでは、 LLM が使用され、提供された情報に基づいてアプリケーションの出力に関する説明とともにスコア(0~1の間)が生成されます。Cortex AI で利用可能なすべての LLM を審査員として選択できます。LLM のジャッジが指定されていない場合、llama3.1-70b がデフォルトのジャッジとして使われます。AI 可観測性は様々な評価指標をサポートします。

コンテキスト関連性

コンテキストの関連性は、リトリーバまたは検索サービスから取得したコンテキストがユーザーのクエリに関連しているかどうかを判断します。ユーザーのクエリと検索されたコンテキストが与えられると、 LLM ジャッジがクエリに基づいて検索されたコンテキストの関連性を決定するために使用されます。

必須属性:

  • RETRIEVAL.QUERY_TEXT: RAG または検索アプリケーションにおけるユーザークエリ

  • RETRIEVAL.RETRIEVED_CONTEXTS: 検索サービスまたはリトリーバーから取得したコンテキスト

現実性

根拠は、生成された応答が、リトリーバーまたは検索サービスから検索されたコンテキストによってサポートされ、根拠があるかどうかを決定します。生成された応答と検索されたコンテキストをもとに、 LLM のジャッジで根拠を判断します。基になる実装では、根拠スコアを生成する際にChain-of-thought推論を使用します。

必須属性:

  • RETRIEVAL.RETRIEVED_CONTEXTS: RAG または検索アプリケーションにおけるユーザークエリ

  • RECORD_ROOT.OUTPUT: LLM によって生成された最終応答。

回答の関連性

回答の関連性は、生成された回答がユーザーのクエリに関連しているかどうかを判断します。ユーザーのクエリと生成された応答が与えられると、 LLM は、その応答がユーザーのクエリにどの程度関連しているかを判定します。これはグランドトゥルースのリファレンスに依存しないため、答えの正しさを評価することにはならないことに注意してください。

必須属性:

  • RECORD_ROOT.INPUT: RAG または検索アプリケーションにおけるユーザークエリ

  • RECORD_ROOT.OUTPUT: LLM によって生成された最終応答。

正確性

正しさとは、生成された応答がどれだけグランドトゥルースと一致しているかを決定するものです。正しさのスコアが高いほど、より正確で、グランドトゥルースとの整合性が高いことを示します。

必須属性:

  • RECORD_ROOT.INPUT: LLM へのユーザークエリまたはプロンプト。

  • RECORD_ROOT.GROUND_TRUTH_OUTPUT: ユーザーのクエリに基づいて期待される応答

  • RECORD_ROOT.OUTPUT: LLM によって生成されたレスポンスです。

一貫性

首尾一貫性は、生成されたモデルの応答が首尾一貫しており、論理的なギャップや矛盾、矛盾がないかどうかを測定します。一貫性のスコアが高いほど、一貫性の高い回答であることを示します。

必須属性:

  • RECORD_ROOT.OUTPUT: LLM によって生成されたレスポンスです。

コストとレイテンシー

使用コスト

コストは、 COMPLETE (SNOWFLAKE.CORTEX) 関数によって返されるトークン使用情報(入力の場合は prompt_tokens、出力の場合は completion_tokens)に基づいて、Cortex LLMs に依存する LLM 呼び出しごとに計算されます。トレース情報の一部として、各 LLM コールに関連するトークンの使用と対応するコストを表示できます。

遅延

待ち時間は、アプリケーションの各関数呼び出しの完了にかかる時間を測定することによって決定されます。アプリケーショントレースは、 TruLens SDK を使用してインスツルメンテーションされた各関数のレイテンシーをきめ細かく可視化します。個々の関数のレイテンシは、各入力に対応するアプリケーション全体のレイテンシを計算するために集約されます。各実行では、複数のアプリケーション構成で簡単に比較できるように、すべての入力の平均レイテンシも提供します。

実行

ランとは、アプリケーションの精度やパフォーマンスを測定するための評価タスクです。最適なアプリケーション構成を選択するのに役立ちます。生成的な AI アプリケーションを構築するには、様々な LLMs、プロンプト、推論パラメーターを実験する必要があります。精度、待ち時間、使用量を測定し、本番に最適な組み合わせを見つけます。それぞれの組み合わせはアプリケーションのバージョンに対応しています。

実行では、指定したデータセットを使用してアプリケーションバージョンのバッチ評価を実行します。異なるバージョンに対して、同じデータセットで複数の実行をトリガーすることができます。バージョン間の集計および記録レベルの差異を比較することで、改善すべき点を識別子として特定し、展開する最適なバージョンを選択することができます。

ランの作成と実行には主に4つのステップがあります:

  1. 作成: アプリケーションとバージョンを作成した後、データセットを指定してバージョンに新しいランを追加します。

  2. Invocation: データセットから入力を読み込み、各入力に対してアプリケーションを起動し、トレースを生成し、Snowflakeアカウントに情報を保存します。

  3. 計算: 呼び出し後、計算するメトリクスを指定して計算をトリガーします。複数の計算をトリガーし、既存の実行に後から新しいメトリクスを追加できます。

  4. 可視化: Snowflakeアカウントにログインして、Snowsightで実行結果を視覚化します。ランは、 AI & MLEvaluations の下にある関連アプリケーションにリストされています。

各ランにラベルを付けることで、同じデータセットで異なるアプリケーションバージョン間の比較ランを分類することができます。ラベルを使用してランを管理し、フィルターをかけます。

ランには以下のステータスがあります。

実行ステータス

ステータス

説明

CREATED

ランは作成されましたが、開始されていません。

INVOCATION_IN_PROGRESS

ランの呼び出しは、出力とトレースを生成している最中です。

INVOCATION_COMPLETED

すべての出力とトレースが作成され、実行が完了しました。

INVOCATION_PARTIALLY_COMPLETED

アプリケーションの起動とトレース生成に失敗したため、ランの起動が部分的に完了しました。

COMPUTATION_IN_PROGRESS

メトリクスの計算が進行中です。

COMPLETED

メトリクスの計算は、詳細な出力とトレースで完了します。

PARTIALLY_COMPLETED

メトリクス計算中に失敗したため、実行は部分的に完了しました。

CANCELLED

ランは中止となりました。

アクセス制御とストレージ

必要な権限

AI Observabilityを使用するには以下の権限が必要です。

  • AI Observabilityを使用するには、ロールが CORTEX_USER データベースロールを持っている必要があります。CORTEX_USER ロールはデータベース関数に必要です。このロールの付与と取り消しに関する情報については、 必要な権限 を参照してください。

  • アプリケーションを登録するには、あなたのロールがスキーマに対して CREATE EXTERNAL AGENT 権限を持っている必要があります。詳細については、 アプリケーション をご参照ください。

  • 実行を作成および実行するには、アプリケーション用に作成された EXTERNAL AGENT オブジェクトの USAGE 権限と、 AI_OBSERVABILITY_EVENTS_LOOKUP または AI_OBSERVABILITY_ADMIN アプリケーションロールが必要です。詳細については、 実行 および 観測可能データ をご参照ください。

以下の例では、 ACCOUNTADMIN ロールを使用して、ユーザー some_user に以下の権限を付与しています。

  • CORTEX_USER データベースロール

  • AI_OBSERVABILITY_EVENTS_LOOKUP アプリケーションのロール

  • CREATE EXTERNAL AGENT スキーマに対する app_schema 権限

USE ROLE ACCOUNTADMIN;

CREATE ROLE observability_user_role;

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE observability_user_role;

GRANT APPLICATION ROLE SNOWFLAKE.AI_OBSERVABILITY_EVENTS_LOOKUP TO ROLE observability_user_role;

GRANT CREATE EXTERNAL AGENT ON SCHEMA app_schema TO ROLE observability_user_role;

GRANT ROLE observability_user_role TO USER some_user;
Copy

前述の例では、 observability_user_role ロールを使用して some_user に権限を付与しています。

アプリケーション

評価用のアプリケーションを作成すると、Snowflake でアプリケーションを表す EXTERNAL AGENT オブジェクトが作成されます。アプリケーションの作成と変更に必要なロールは、以下のアクセス制御要件を持っている必要があります。

アプリケーションの作成に使用されるロールには、最低限以下の権限が必要です。

権限

オブジェクト

注意

OWNERSHIP

外部エージェント

OWNERSHIP は、オブジェクトを作成したロールに自動的に付与されるオブジェクトに対する特別な権限ですが、所有ロール(または MANAGEGRANTS 権限のある任意のロール)によって GRANTOWNERSHIP コマンドを使用して別のロールに譲渡することもできます。

CREATE EXTERNAL AGENT

スキーマ

スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。

アプリケーションの変更と削除には、 EXTERNAL AGENT オブジェクトの OWNERSHIP 権限が必要です。

ユーザーのロールがアプリケーション (EXTERNAL AGENT) に USAGE または OWNERSHIP の権限を持っている場合、アプリケーションはSnowsight内の AI & ML の下の Evaluations に表示されます。

実行

アプリケーションへのランの追加、変更、または削除に使用されるロールは、Snowflake のアプリケーションを表す EXTERNAL AGENT オブジェクトに対して USAGE 権限を持っている必要があります。

ランを削除すると、そのランに関連するメタデータが削除されます。実行の一部として作成された記録は削除されず、保存されたままになります。記録やトレースのストレージについては、「観測可能データ」をご覧ください。

指定された権限セットを持つカスタムロールの作成手順については、Creating custom rolesを参照してください。セキュリティ保護可能なオブジェクトに対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 を参照してください。

審査員としての LLMs

AI 可観測性は、Cortex LLMs をジャッジとして使用し、アプリケーションを評価するためのメトリクスを計算します。これらのメトリクスを正常に計算するには、Cortex LLMs へのアクセス許可が必要です。ユーザーロールにCortex LLMs へのアクセス権限を付与するには、必要な権限を参照してください。ユーザーは、 LLM ジャッジとして構成されたモデルへのアクセスを持っている必要があります。LLM ジャッジのデフォルトモデルは llama3.1-70b です。デフォルトの LLM 裁判官モデルは将来変更される可能性があります。

観測可能データ

AI 観測可能データは、生成 AI アプリケーションの入力、出力、評価スコア、および関連するトレースを含む記録を表します。すべての記録は、あなたのアカウントの SNOWFLAKE.LOCAL スキーマの下にある専用のイベントテーブル AI_OBSERVABILITY_EVENTS に保存されます。

イベント・テーブルに取り込まれた AI 観測可能データは変更できません。AI_OBSERVABILITY_ADMIN アプリケーション・ロールを持つ管理者は、 SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS イベント・テーブルのデータを削除するための排他的アクセス権を持っています。

AI 観測可能データは、Trulens Python SDK または Snowsight を使用してアクセスできます。アプリケーションおよび関連ランの記録を表示するには、以下の権限が必要です。

  • ユーザー・ロールはアプリケーション・ロール SNOWFLAKE.AI_OBSERVABILITY_ADMIN または SNOWFLAKE を持っていなければなりません。AI_OBSERVABILITY_EVENTS_LOOKUP

  • ユーザー・ロールは、アプリケーションを表す EXTERNAL AGENT オブジェクトの USAGE 権限を持っている必要があります。

例えば、外部インスツルメンテッド RAG アプリケーションの実行を表示するには、ユーザーロールは "my-db.my-schema.rag-application1" の USAGE 権限が必要です。ここで、rag-application1 は、Snowflake の外部 RAG アプリケーションを表す EXTERNAL AGENT オブジェクトです。

ランや外部エージェントに関連するメタデータ(ラン名、説明、データセット名など)は、メタデータとして分類されます。