分散トレーシングを有効化して、LLM アプリケーションのパフォーマンスをモニタリングし、呼び出しチェーンを可視化し、ボトルネックを特定します。
概要
LLM アプリケーションは、予測不能な出力、複雑な呼び出しチェーン、パフォーマンスボトルネック、および可観測性の欠如といった課題に直面することがあります。EAS トレーシングは、ARMS との統合により、これらの課題に対応します。
トレーシングが提供する機能は以下のとおりです。
呼び出しチェーンの可視化:明確なログとともに、リクエストの完全なパスを可視化します。
パフォーマンスモニタリング:応答時間、トークン消費量、エラー発生回数を追跡し、ボトルネックを特定します。
問題の特定:Trace ID を活用して問題箇所を特定し、コンテキスト情報を用いた根本原因分析を実行します。
評価ツール:呼び出しチェーンのデータに基づき、LLM アプリケーションの出力の精度および信頼性を検証します。
基本概念
トレース
分散システムにおけるリクエストの完全な実行パスであり、複数のスパンで構成されます。各トレースには一意の TraceID が割り当てられます。トレースはリクエストフローを可視化し、パフォーマンスボトルネックやエラー発生源の特定を支援します。
スパン
トレース内の基本単位であり、特定の操作を表します。操作名、開始時刻、終了時刻を記録します。
Python プローブ
Python アプリケーションから自動的に呼び出しチェーンのデータおよびパフォーマンスメトリクスを収集するツールです。EAS サービスをデプロイする際に Python プローブをインストールすることで、トレーシングを有効化できます。
評価
LLM アプリケーションの回答を複数のディメンションで評価します。具体的な評価ディメンション名については、担当の営業担当者にお問い合わせください。
制限事項
本機能は、LangChain、LlamaIndex、または Dashscope を使用して開発された Python ベースの LLM アプリケーションのみをサポートします。
前提条件
ARMS アプリケーションモニタリングを有効化します。詳細については、「ARMS の有効化」をご参照ください。
LangStudio を有効化します。詳細については、「PAI サービスアカウントの権限付与」をご参照ください。
RAM ユーザーまたは RAM ロールを使用する場合、当該ユーザーまたはロールに
AliyunPAILLMTraceFullAccess権限を付与します。詳細については、「RAM ロールの権限管理」および「RAM ユーザーへの権限付与」をご参照ください。
手順 1:サンプルコードの準備
本チュートリアルでは、サービスのデプロイ、呼び出し、およびトレースの確認を目的として、シンプルな予測サービスを使用します。
この例では、DashScope API と Flask フレームワークを用いて、テキスト生成のために Generation.call メソッドを呼び出す Web サービスを構築します。DashScope を使用する前に、有効化手続きを完了し、API キーを取得してください。詳細については、「初回の Tongyi Qianwen API 呼び出し」をご参照ください。サービスをデプロイする際には、API への適切なアクセスを確保するために、環境変数として DASHSCOPE_API_KEY を設定します。以下のコードは、app.py ファイルの例です。
import os
import json
import flask
import dashscope
app = flask.Flask(__name__)
def run_query(query):
"""クエリを実行します。"""
response = dashscope.Generation.call(
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen-plus",
messages=[
{'role': 'system', 'content': 'あなたは親切なアシスタントです。'},
{'role': 'user', 'content': query}
],
result_format='message'
)
return response
@app.route('/api/trace_demo', methods=['POST'])
def query():
"""
POST データの例:
{
"query": "中国の首都"
}
"""
data = flask.request.get_data("utf-8")
query = json.loads(data).get('query', '')
response = run_query(query)
return response.output.choices[0].message.content
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
手順 2:トレーシングの有効化
EAS サービスをデプロイする際には、サービス機能 セクションで トレーシング スイッチをオンにします。表示されるプロンプトに従い、ご使用のイメージに組み込みのトレーシングコンポーネントが含まれているかを確認します。必要に応じて、プローブのインストールおよび ARMS Python プローブによるアプリケーション起動のためのコマンドを設定します。詳細については、「Python プローブの手動インストール」をご参照ください。
組み込みのトレーシングコンポーネントを含むイメージを使用する場合: トレーシング スイッチをオンにするだけで、トレーシングが有効化されます。追加の構成は不要です。
組み込みのトレーシングコンポーネントを含まないイメージを使用する場合: トレーシング スイッチをオンにし、プロンプトに従ってサードパーティライブラリおよび起動コマンドを構成します。
パラメーター
説明
Command to Run
aliyun-bootstrap -a install && aliyun-instrument python app.pyを追加して、プローブをインストールし、ARMS Python プローブでアプリケーションを起動します。 app.py は、予測サービスを提供するためにイメージで構成されたメインファイルです。 また、PyPI からプローブインストーラーをダウンロードするには、サードパーティのライブラリ構成に aliyun-bootstrap を追加する必要もあります。Third-party Library Settings
PyPI からプローブインストーラをダウンロードするために、
aliyun-bootstrapを追加します。

本トピックでは、組み込みのトレーシングコンポーネントを含まないイメージおよび上記のサンプルコードを例として使用します。カスタム EAS サービスのデプロイに必要な主なパラメーターについては、以下の表をご参照ください。手順については、「コンソールでのサービスデプロイ」をご参照ください。デプロイ後は、以下の操作を行います。
EAS ページで、サービスのデプロイステータスを確認します。
ARMS コンソールのアプリケーションリストページで、登録済みのアプリケーションを確認します。アプリケーション名は、EAS サービス名と同じです。
パラメーター | 説明 | |
Environment Information | Deployment Method | Image-based Deployment を選択します。 |
Image Configuration | 本トピックでは、デフォルトのイメージを使用します:。 また、Image Address タブで、あらかじめ準備したカスタムイメージを入力することもできます。 | |
Directly Mount | サンプルコードファイルがイメージに統合されていないため、サービスインスタンスにマウントします。OSS からのマウントを例として示します。OSS をクリックし、以下のパラメーターを構成します。
カスタムイメージを使用し、予測サービスのメインファイルをイメージ内に既に構成済みの場合は、この構成を省略できます。 | |
Command | 本トピックでは、コマンドを
| |
Environment Variables | サンプルコードが Dashscope API を呼び出すため、Add をクリックし、以下の環境変数を構成します。
| |
Third-party Library Settings | サードパーティライブラリを | |
Service Access | VPC | トレーシング機能を利用するには、仮想プライベートクラウド (VPC) を構成する必要があります。リージョン内で VPC、vSwitch、および Security group を選択します。 デフォルトでは、EAS サービスはインターネットにアクセスできません。サンプルコード(Dashscope API を呼び出す)を実行するには、インターネット接続可能な VPC を構成する必要があります。手順については、「シナリオ 1:EAS サービスのインターネットアクセス許可」をご参照ください。 |
vSwitch | ||
Security Group Name | ||
Features | Tracing Analysis | トレーシング スイッチをオンにし、環境コンテキスト セクションでサードパーティライブラリおよび起動コマンドを構成します。 |
手順 3:トレースの確認
トレースに基づく評価ツールは、開発者が LLM アプリケーションの出力の精度および信頼性を検証するのに役立ちます。
EAS サービスの呼び出し
本トピックでは、オンラインデバッグを例として使用します。API を使用して EAS サービスを呼び出すことも可能です。詳細については、「API 呼び出し」をご参照ください。
Elastic Algorithm Service (EAS) ページで対象のサービスを見つけ、操作列の
> Online Debugging をクリックします。[ボディ] タブで、定義済みの予測サービスに基づいて、指定されたアドレスにリクエストデータを送信します。
本トピックでは、サンプル app.py ファイルで定義されたサービスインターフェイスを使用します。以下の図は、結果の例を示しています。

トレース情報の確認
デフォルトでは、トレースデータは生成時から 30 日間保存されます。保存期間を延長するには、ARMS チームに連絡してカスタム構成を行ってください。
Tracing Analysis タブの Trace Query タブに切り替えて、トレース情報を確認します。

対象のトレースを見つけ、View Traces を Actions 列でクリックして、[トレースの詳細] ページに移動します。
このページのトレースデータにより、サービスの入力、出力、および関連するログ情報を確認できます。
注:RAM ユーザーまたは RAM ロールを使用する場合、本機能を利用するには
AliyunARMSReadOnlyAccess権限を付与する必要があります。
トレースの詳細を共有するには、共有アイコン
をクリックしてワンタイムアドレスを生成します。注:RAM ユーザーまたは RAM ロールを使用する場合、本機能を利用するには
cms:CreateTicket権限を事前に付与する必要があります。
手順 4:アプリケーションパフォーマンスの評価
EAS は、トレースに基づく評価ツールを提供しており、LLM アプリケーションの出力の精度および信頼性を検証できます。サポートされる評価方法は以下の 2 種類です。
方法 1:単一のトレースを評価:EAS サービスから手動でトレースを選択して評価します。開発またはテスト段階において、特定のトレースをデバッグし、そのロジックおよびパフォーマンスを検証するのに適しています。
方法 2:オンラインでトレースをバッチ評価:実行中の EAS サービスからサンプリングされたトレースを定期的に評価します。大規模なパフォーマンステストまたは機能検証に適しており、システム全体の状態を把握できます。
デフォルトでは、トレースデータは生成時から 30 日間保存されます。保存期間を延長するには、ARMS チームに連絡してカスタム構成を行ってください。
方法 1:単一のトレースを評価
Tracing Analysis タブの Trace Query タブで、対象のトレースを探し、Actions 列の Evaluate をクリックします。 次に、Evaluate 構成パネルで、次のパラメーターを構成します。

Evaluation Metrics:固定構成であり、変更できません。以下のディメンションに基づいて評価が実行されます。
評価指標
説明
正確性
入力およびリファレンステキストに基づき、回答が質問を正しく解決しているかどうかを判定します。
忠実性
回答が入力およびリファレンステキストに基づいて生成されているか、およびハルシネーションを含むかどうかを判定します。
検索関連性
取得された結果が入力質問に関連しているかどうかを判定します。以下の 4 つの指標を含みます。
nDCG: 正規化割引累積利得
ヒット率 (Hit Rate)
Precision@K
MRR:平均逆順位 (Mean Reciprocal Rank)
Model Settings:トレースの評価に使用される LLM です。初期設定後、この構成は後続の評価で自動的にバックフィルされます。
パラメーター
説明
Model Selection
以下の 2 つのモデルがサポートされています。
PAI Judge Model
qwen-max (Model Studio モデル)
説明Model Studio モデルを使用するには、EAS のインターネット接続を構成する必要があります。
Model Studio モデルへの呼び出しは別途課金されます。詳細については、「課金」をご参照ください。
Model Token
選択したモデルのトークンを入力します。
ジャッジモデル: ジャッジモデル ページに移動し、PAI ジャッジモデルを有効化してトークンを取得します。
qwen-max:Model Studio qwen-max モデルのトークンの取得方法については、「初回の Tongyi Qianwen API 呼び出し」をご参照ください。
抽出構成: クエリ抽出構成、回答抽出構成、および コンテキスト抽出構成 の各セクションで、以下の表のパラメーターを構成して、対応するコンテンツを抽出します。
クエリ抽出構成:ユーザークエリの内容(入力)を抽出します。
回答抽出構成:システムが生成した回答(出力)を抽出します。
コンテキスト抽出構成:システムに提供されたテキストまたは背景情報(ドキュメント)を抽出します。
パラメーター
説明
SpanName
SpanName に一致するスパンを検索します。
JsonPathInSpan
形式は a.b.c です。このパラメーターは空にできません。一致したスパンの指定要素から値を抽出します。
JsonPathInSpanValue
形式は a.b.c です。このパラメーターは空にできます。JsonPathInSpan に対応する要素が見つかった後、その要素の内容が JSON 文字列である場合、JsonPathInSpanValue を使用して対応する値を抽出します。
Actions 列の View Traces をクリックすると、トレースの詳細 ページから構成内容を取得できます。以下の表に構成例を示します。
抽出構成
取得方法
例の値
クエリ抽出構成
本トピックでは、JsonPathInSpanValue に値がない例を示します。

JsonPathInSpanValue に値がある例については、以下の図をご参照ください。

JsonPathInSpanValue に値がない場合
SpanName:LLM
JsonPathInSpan:attributes.input.value
JsonPathInSpanValue:JsonPathInSpan 要素の内容が JSON 文字列でないため、このパラメーターは空です。
JsonPathInSpanValue に値がある場合
SpanName:LLM
JsonPathInSpan:
attributes.input.valueJsonPathInSpanValue: [JsonPathInSpan] 要素の内容が JSON 文字列であるため、ここに
text[0]を入力します。
回答抽出構成

SpanName:LLM
JsonPathInSpan:
attributes.output.valueJsonPathInSpanValue:このパラメーターは空です。
コンテキスト抽出構成
本トピックのサンプルサービスにはコンテキスト抽出構成が含まれていません。例については、以下の図をご参照ください。

SpanName:retrieve
JsonPathInSpan:
attributes.retrieval.documents[*].document.content重要アスタリスク (*) は、コンテキスト構成でのみ使用できます。
JsonPathInSpanValue:JsonPathInSpan 要素の内容が JSON 文字列でないため、このパラメーターは空です。
パラメーターを構成した後、Confirm をクリックします。
Evaluation Result 列に結果が表示された場合(以下の図を参照)、評価は完了です。結果をクリックすると、その詳細を確認できます。

方法 2:オンラインでトレースをバッチ評価
Tracing Analysis タブの Online Evaluation タブで、New Assessment をクリックします。
Create Evaluation Task ページで、以下のパラメーターを構成し、Confirm をクリックします。
パラメーター
説明
基本構成
タスク名
任意のタスク名を入力します。
評価構成
評価指標
固定構成であり、変更できません。以下のディメンションに基づいて評価が実行されます。
正確性:入力およびリファレンステキストに基づき、回答が質問を正しく解決しているかどうかを判定します。
忠実性:回答が入力およびリファレンステキストに基づいて生成されているか、およびハルシネーションを含むかどうかを判定します。
取得関連性:取得されたコンテンツが入力質問に関連しているかどうかを判定します。以下の 4 つの指標を含みます。
nDCG: 正規化減衰累積利得
ヒット率 (Hit Rate)
Precision@K
MRR:平均逆順位 (Mean Reciprocal Rank)
モデル選択
以下の 2 つのモデルがサポートされています。
PAI Judge Model
qwen-max (Model Studio モデル)
説明Model Studio モデルを使用するには、EAS のインターネット接続を構成する必要があります。
Model Studio モデルへの呼び出しは別途課金されます。詳細については、「課金」をご参照ください。
モデルトークン
選択したモデルのトークンを入力します。
ジャッジモデル: ジャッジモデル ページに移動し、PAI ジャッジモデルを有効化してトークンを取得します。
qwen-max:Model Studio qwen-max モデルのトークンの取得方法については、「初回の Tongyi Qianwen API 呼び出し」をご参照ください。
サンプリング開始および終了時刻
サンプリングの開始日および終了日を選択します。
サンプリングポリシー
以下のサンプリングポリシーが利用可能です。
時間ウィンドウベースのサンプリング:一定の間隔(x 分ごと)で 1 つのトレースをキャプチャします。
確率ベースのサンプリング:指定された割合のトレースをランダムにキャプチャします。
QCA 抽出構成:トレースデータは JSON 文字列としてフォーマットされます。QCA 抽出構成は、この JSON 構造内における QCA のパスを定義します。このパスの値は、特定の QCA コンテンツを表します。
クエリ抽出構成
クエリ抽出構成:ユーザークエリの内容(入力)を抽出します。
回答抽出構成:システムが生成した回答(出力)を抽出します。
コンテキスト抽出構成:システムに提供されたテキストまたは背景情報(ドキュメント)を抽出します。
SpanName、JsonPathInSpan、および JsonPathInSpanValue のパラメーターを構成して、対応するコンテンツを抽出します。これらのパラメーターの構成方法については、「抽出構成」をご参照ください。
回答抽出構成
コンテキスト抽出構成
評価タスクの ステータス が 完了 になると、すべてのサンプリング評価操作が終了し、タスクは新しい評価結果を生成しません。
評価が完了したら、評価タスクの 評価結果 列で結果を確認できます。また、タスク名をクリックして詳細を確認することもできます。
評価結果の確認:システムは、すべての成功した評価から平均スコアを算出し、表示します。スコアが 1 に近いほど品質が高いことを示します。

評価詳細の確認:

作成後は、評価タスクを更新、停止、削除、または複製して管理できます。複製では、タスク構成が複製され、新しい評価タスクが作成されます。