Arize PhoenixでローカルRAGの「ブラックボックス」を5分で可視化する

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

Quick Start: わずか2行のコマンドでArize Phoenixを実行する

Python環境が整っていれば、Arize Phoenixの起動には1分もかかりません。長いYAML設定ファイルに悩まされることなく、すぐに実行に移りましょう。

まず、pipを使用して必要なライブラリをインストールします:

pip install arize-phoenix openinference-instrumentation-llama-index

次に、ターミナルまたはPythonファイルを開き、以下のコードを実行して監視サーバーを起動します:

import phoenix as px

# Phoenixサーバーを起動
session = px.launch_app()

# ダッシュボードのアクセスURLを表示
print(f"ダッシュボードはここで実行中: {session.url}")

すぐに、http://localhost:6006でWebインターフェースが表示されます。ここではRAGシステムの「中身」がすべて可視化され、詳細に監視することができます。

なぜ LangSmith ではなく Arize Phoenix を選ぶのか?

RAGを始めたばかりの頃、モデルがなぜ誤った回答をするのか分からず、よく頭を抱えていました。Vector Databaseが間違ったドキュメントを検索したのか?コンテキストは正しいのにモデルが「ハルシネーション(幻覚)」を起こしたのか?それとも単にプロンプトがひどかったのか?

LangSmithは優れた選択肢ですが、クラウド上で動作します。厳格なセキュリティが求められる企業プロジェクトでは、内部データをサードパーティのサーバーに送信することは許容できないリスクです。Arize Phoenixはこの問題を完全に解決します。

このツールを使い続けている主な理由は以下の通りです:

  • 完全なプライバシー: データはローカルマシン内に留まり、1バイトも外部に漏れることはありません。
  • OpenTelemetry準拠: 特定のフレームワークに縛られることはありません。

    LangChain、LlamaIndex、あるいは素のコードであっても、Phoenixはすべて対応可能です。

  • 深層トレース: Embedding(埋め込み)に何ミリ秒かかったか、Retrieval(検索)ステップで具体的にどのテキストチャンクが取得されたかを明確に確認できます。
  • コストゼロ: オープンソース版は、個人やスタートアップのニーズには十分すぎるほどの機能を提供しています。

RAGコードに「監視カメラ」を設置する

Phoenixがすべての動きを記録できるようにするには、Instrumentation(計装)という仕組みを使用します。これは、データ処理フローの各ポイントにドライブレコーダーを取り付けるようなものだと考えてください。

私がよく使用する100%ローカルなRAGスタックは、LlamaIndex + Ollama + Arize Phoenixです。

import phoenix as px
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, set_global_handler

# 1. Phoenixを起動
px.launch_app()

# 2. LlamaIndexをPhoenixに接続
set_global_handler("arize_phoenix")

# 3. 基本的なRAGフロー
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

# 質問をテスト
response = query_engine.query("Arize Phoenixのインストール方法は何ですか?")
print(response)

実行後、ダッシュボードに戻ってください。新しい「Trace」行が表示されます。それをクリックすると、ツリー図が表示され、Embeddingに200ms、Retrievalで3つのテキストセグメントを取得し、LLMが回答の生成に2秒かかったことが正確に分かります。

LLMを「試験監督」にして自動採点する

Phoenixの最大の魅力は、Evaluation(評価)機能です。精度を確認するために何百ものログを手動で読むのは非常に時間がかかります。代わりに、Phoenixでは別のLLM(LLM Judge)を使用して、メインのLLMを採点させることができます。

Ollamaを利用してLlama3Mistralを裁判官として実行すれば、OpenAIのAPIコストを節約できます:

from phoenix.evals import HallucinationEvaluator, OpenAIModel
# 採点モデルの設定(Ollamaのローカルエンドポイントを指定)
judge_model = OpenAIModel(base_url="http://localhost:11434/v1", api_key="ollama")

evaluator = HallucinationEvaluator(model=judge_model)
# Phoenixはコンテキストに基づいて、回答に「Pass」または「Fail」のラベルを自動的に付与します。

この機能はプロンプトを変更する際に非常に役立ちます。テストセットを実行してダッシュボードを見るだけで、推測に頼ることなく精度が上がったか下がったかがすぐに分かります。

苦労しないための実践的なアドバイス

数ヶ月間RAGを運用してみて、時間を無駄にしないための重要な注意点をいくつかまとめました:

  1. RAMの管理: Phoenixはトレースをキャッシュに直接保存します。数千のリクエストを連続してテストすると、8GB〜16GBのRAMを使い果たし、フリーズする可能性があります。定期的にデータセットをクリアすることを忘れないでください。
  2. ライブラリの競合: Phoenixは毎週のように機能を更新しています。奇妙なエラーが発生した場合は、新しいvenvを作成し、arize-phoenixllama-indexの両方を最新バージョンに更新してください。
  3. AI Judgeを100%盲信しない: LLM Judgeは非常に便利ですが、誤判定(偽陽性)をすることもあります。信頼性を確保するために、結果の5〜10%程度はスポットチェック(抜き打ち検査)を行う時間を設けるべきです。
  4. レイテンシの最適化: Phoenixを使用して、どのステップがシステムを遅延させているかを確認してください。Embeddingモデルを変更するだけで、レイテンシが2秒から200msに短縮されることもあります。

監視は単なるバグ修正のためではなく、データがモデルとどのように「対話」しているかを深く理解するためのものです。Arize Phoenixを使えば、データの機密性を保ちながら、RAGシステムを最適化するための強力な顕微鏡を手にすることになります。

Share: