AIパーソナル・ラーニング
と実践的なガイダンス
讯飞绘镜

AIエンジニアリング・アカデミー:2.6 RAGの観測可能性 - Arize Phoenixのセットアップ

このノートブックへようこそ。このノートブックでは、Llama Indexを使って検索強化生成(ラグ)合理化。

https://github.com/adithya-s-k/AI-Engineering.academy/tree/main/RAG/01_RAG_Observability


 

簡単

このガイドでは、効率的なドキュメント検索とクエリ処理のために、組み込みモデルやベクターストアインデックスを含む必要なツールやライブラリを設定するための完全なチュートリアルを提供します。RAGパイプラインの高度な検索機能を使いこなすために、インストールとセットアップからクエリと関連情報の取得まで、すべてをカバーします。

 

紹介

このノートブックを使い始めるには、Pythonの基本的な理解と機械学習の概念についての知識が必要です。もしこれらの概念に慣れていなくても心配しないでください!

前提条件

  • Python 3.7+
  • JupyterノートブックまたはJupyterLab
  • Pythonの基礎と機械学習の概念

 

1.セッティング

1.1 必要なソフトウェアパッケージのインストール

Arize Phoenixのセットアップを開始するには、必要なソフトウェアパッケージをインストールする必要があります。

Arize Phoenixは、機械学習とAIシステムの観測と監視のために設計された包括的なツールです。機械学習モデルやデータパイプラインのあらゆる側面を追跡・分析する機能を提供します。

!pip install arize-phoenix
!pip install openinference-instrumentation-openai

これらのコマンドはインストールを行う:

  • arize-phoenix機械学習ワークフローの観測可能性のためのツール。
  • openinference-instrumentation-openaiOpenAIのモデルをArize Phoenixのような観測可能性ツールと統合するためのパッケージです。

1.2 Arize Phoenixのセットアップ

設定を完了するには、以下の3つの方法がある:

もっと読む ここだよ。

  • コマンドライン
    python3 -m phoenix.server.main serve
    
  • Dockerは以下のコマンドでphoenixのDockerイメージを起動する:
    docker run -p 6006:6006 -p 4317:4317 arizephoenix/phoenix:latest
    

    これは、Phoenix UIとREST APIをlocalhost:6006に公開し、スパン用のgRPCエンドポイントをlocalhost:4317に公開します。

  • ノート
    import phoenix as px
    px.launch_app()
    

1.3 必要なライブラリのインポートと環境設定

データ処理と評価を行う前に、必要なライブラリをインポートし、環境を設定する:

import json
import os
from getpass import getpass
import nest_asyncio
import pandas as pd
from tqdm import tqdm
import phoenix as px
# 允许在笔记本环境中进行并发评估
nest_asyncio.apply()
# 设置 pandas DataFrame 的显示选项以展示更多内容
pd.set_option("display.max_colwidth", 1000)
  • jsonosJSON データとオペレーティングシステムのインタラクションを扱うための Python 標準ライブラリ。
  • getpassパスワードを安全に入力するツール。
  • nest_asyncioJupyterノートブックでasyncioを使えるようにする。
  • pandas (pd):強力なPythonデータ操作ライブラリ。
  • tqdmデータ処理の進行状況を追跡するために、ループにプログレスバーを設ける。
  • phoenix (px): Arize Observability Toolの一部で、データを探索し機械学習モデルを監視するためのインタラクティブなUIを提供する。

コンフィグ nest_asyncio ノートブック環境での同時評価を可能にし、可読性を向上させるためにpandas DataFrameの最大列幅を設定します。

1.4 Phoenixアプリケーションの起動

px.launch_app()

この関数はPhoenixアプリケーションを初期化して起動します。Phoenixアプリケーションはデフォルトブラウザの新しいタブで開き、データセットの探索、モデルのパフォーマンスの可視化、デバッグのための対話型インターフェースを提供します。

1.5 Phoenixアプリケーションセッションの表示

Phoenixアプリケーションを起動すると、セッション・オブジェクトを使用してノートブックで直接アプリケーションと対話することができます。以下のコードを実行して Phoenix アプリケーションを起動し、現在のセッションで表示します:

# 启动并查看 Phoenix 应用会话
(session := px.launch_app()).view()

このコード行はPhoenixアプリケーションを起動し、セッションをsessionという変数に代入します。 view() この方法では、フェニックスのアプリケーションがノートブック・インターフェースに直接表示されるため、ブラウザとノートブックを切り替えることなく、統合されたエクスペリエンスが提供される。

1.6 トレースの終点を設定する

トレースデータをPhoenixアプリケーションに送信して解析や観測を行うには、Phoenixアプリケーションが受信データをリッスンするエンドポイントURLを定義します。

endpoint = "http://127.0.0.1:6006/v1/traces"

endpoint Phoenix アプリケーションが受信トレースデータをリッスンするために使用するエンドポイント URL を格納する変数。

 

2.OpenAIの追跡

より多くの統合。 読書。

2.1 OpenAIパッケージのインストールとインポート

!pip install openai
import openai

openaiOpenAI API用のPythonクライアントライブラリです。OpenAIのモデル(GPT-3、GPT-4を含む)にリクエストを送り、様々なタスクを実行することができます。

2.2 OpenAI APIキーの設定

import openai
import os
from getpass import getpass
# 从环境变量中获取 API 密钥,若未设置则提示用户输入
if not (openai_api_key := os.getenv("OPENAI_API_KEY")):
openai_api_key = getpass("🔑 输入您的 OpenAI API 密钥:")
# 为 OpenAI 客户端设置 API 密钥
openai.api_key = openai_api_key
# 将 API 密钥存储到环境变量中以供后续使用
os.environ["OPENAI_API_KEY"] = openai_api_key
  • APIキーの取得:コードはまず、環境変数(OPENAI_API_KEY)からAPIキーを取得しようとする。もしキーが見つからなければ、getpassを使って安全な入力を求めるプロンプトが表示される。
  • APIキーの設定: 取得または提供されたAPIキーが、OpenAIクライアントライブラリのキーとして設定されます。
  • APIキーの保存:最後にAPIキーを環境変数に保存し、セッション中常に利用できるようにする。

2.3 追跡のためのOpenTelemetryのセットアップ

OpenAI インタラクションのトレースを有効にするには、OpenTelemetry を設定し、必要なコンポーネントをセットアップします。

from opentelemetry import trace as trace_api
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
# 设置 Tracer 提供程序
tracer_provider = trace_sdk.TracerProvider()
# 定义带有端点的 OTLP Span 导出器
span_exporter = OTLPSpanExporter(endpoint)
# 设置 Span Processor 以处理和导出 spans
span_processor = SimpleSpanProcessor(span_exporter)
# 将 Span Processor 添加到 Tracer 提供程序
tracer_provider.add_span_processor(span_processor)
# 设置全局 Tracer 提供程序
trace_api.set_tracer_provider(tracer_provider)

OpenTelemetry ライブラリ

提供されたコードでは、いくつかのOpenTelemetryライブラリがトレースのセットアップに使用されています。以下に各ライブラリの概要を示します:

  • opentelemetry:は英語の -ity、-ism、-ization に対応する。OpenTelemetryのコア・ライブラリーで、トラッキングとメトリクスのためのAPIを提供します。使用状況トレースの作成と管理のためのトレース・モジュールを含む。
  • opentelemetry.exporter.otlp.proto.http.trace_exporter:は英語の -ity、-ism、-ization に対応する。HTTP 上の OTLP (OpenTelemetry Protocol) を利用したトレース・エクスポーターを提供します。使用状況モジュールの OTLPSpanExporter クラスは、OTLP互換のバックエンドにトラッキングデータを送信するために使われ、エンドポイントを設定することで構成されます。
  • opentelemetry.sdk.trace:は英語の -ity、-ism、-ization に対応する。トラッキングのためのSDK実装が含まれています。 TracerProvider.使用状況::
    • TracerProviderTracerインスタンスを管理し、トレースで収集されたスパン(作業単位)のエクスポートを担当します。
    • SimpleSpanProcessorエクスポート・スパンを同期させてデータを処理し、エクスポータに送信するプロセッサ。
  • opentelemetry.sdk.trace.export:は英語の -ity、-ism、-ization に対応する。トラッキングデータをエクスポートするためのクラスを提供します。使用状況::
    • SimpleSpanProcessorスパンを処理し、指定されたエクスポーターを使用してエクスポートすることで、データが分析のためにバックエンドに送信されることが保証されます。

2.4 OpenInferenceによるOpenAIのインスツルメンテーション

OpenTelemetryをOpenAIに統合し、OpenAIモデルのインタラクションのトラッキングを可能にするには、以下のデータを使います。 openinference 図書館 OpenAIInstrumentor.

from openinference.instrumentation.openai import OpenAIInstrumentor
# 实例化并为 OpenAI 应用 instrumentation
OpenAIInstrumentor().instrument()
  • OpenAIInstrumentorより openinference OpenAIのAPIコールをインスツルメンテーションするためのライブラリクラスで、トラッキングと観測を可能にします。
  • instrument(): このメソッドは、OpenAI API クライアントが自動的にトレースデータを生成し、OpenTelemetry バックエンドに送信するように設定します。設定されたトレース設定を統合し、OpenAIのモデルとのインタラクションプロセスを監視・分析することができます。

このコードを実行することで、すべてのOpenAI APIコールが追跡され、モデルの使用状況やパフォーマンスに関する詳細な洞察を得ることができます。

2.5 OpenAI APIにリクエストする

OpenAIのAPIとやりとりしてレスポンスを得るには、以下のコードを使います。この例では、チャット完了リクエストを作成し、OpenAI API 経由で結果を表示する方法を示します:

import openai
# 创建 OpenAI 客户端实例
client = openai.OpenAI()
# 向 OpenAI API 发起聊天补全请求
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Write a haiku."}],
)
# 打印响应内容
print(response.choices[0].message.content)
  • openai.OpenAI()OpenAI APIとの対話に使用できるOpenAIクライアントのインスタンスを初期化します。
  • client.chat.completions.create(): OpenAI APIにリクエストを送り、チャットの補足を作成します。
    • model="gpt-4o"補集合の生成に使用するモデルの名前を指定します。モデル名が正しく、OpenAI API アカウントで有効になっていることを確認してください。
    • messages:: 対話履歴を含むメッセージのリスト。この例では、ユーザーによって送信された1つのメッセージリクエストが含まれています。
  • response.choices[0].message.contentモデルによって生成されたコンプリメントを抽出し、印刷します。

 

3.ラマ指数追跡

3.1 必要なライブラリのインストールとインポート

!pip install llama-index
!pip install llama-index-core
!pip install llama-index-llms-openai
!pip install openinference-instrumentation-llama-index==2.2.4
!pip install -U llama-index-callbacks-arize-phoenix
!pip install "arize-phoenix[llama-index]"
  • llama-index:: Llama Index 機能のコアパッケージ。
  • llama-index-coreLlama Indexのコア機能とツールを提供します。
  • llama-index-llms-openaiLlama IndexとOpenAIのモデルを統合するパッケージ。
  • openinference-instrumentation-llama-index==2.2.4ラマ指数相互作用の計測ツールを提供。
  • llama-index-callbacks-arize-phoenixArize Phoenixコールバックとの統合を提供します。
  • arize-phoenix[llama-index]Arize Phoenixを拡張し、Llama Indexのトラッキングをサポート。

3.2 現在アクティブなPhoenixセッションのURLの取得

# 获取当前活动的 Phoenix 会话的 URL
px.active_session().url

現在アクティブなPhoenixセッションにアクセスし、そのURLを取得することで、トラッキングデータのモニタリングや分析のためのPhoenixインターフェースを表示または共有することができます。

3.3 ラマ指数トラッキングの設定

Llama Index に OpenTelemetry トラッキングを設定するには、Tracer プロバイダを設定し、Llama Index Instrumentor を統合します。

from openinference.instrumentation.llama_index import LlamaIndexInstrumentor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
# 设置 Tracer 提供程序
tracer_provider = trace_sdk.TracerProvider()
# 添加 Span Processor 到 Tracer 提供程序
tracer_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))
# 使用 Tracer 提供程序 对 Llama Index 进行 Instrumentation
LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)
  • LlamaIndexInstrumentorより openinference.instrumentation.llama_index ラマ・インデックスのトラッキングと観測可能性を計測するクラス。
  • trace_sdk.TracerProvider()トレースデータを作成・管理するための新しいトレーサープロバイダを初期化する。
  • SimpleSpanProcessorスパンのエクスポートを同期し、バックエンドにデータを送信するために使用されます。
  • LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)Llamaインデックスにインスツルメンテーションを適用し、提供されたTracerプロバイダーを使ってトレースする。

3.4 OpenAIを使ってラマ指数と対話する

OpenAIモデルを使ってLlama Indexから完了リクエストを実行するには、以下のコードを使います:

from llama_index.llms.openai import OpenAI
# 初始化 OpenAI 模型
llm = OpenAI(model="gpt-4o-mini")
# 发起完成请求
resp = llm.complete("Paul Graham is ")
# 打印响应结果
print(resp)
  • from llama_index.llms.openai import OpenAIより llama_index パッケージを使って、OpenAIのクラスをインポートすることができます。
  • OpenAI(model="gpt-4o-mini")OpenAIクラスのインスタンスを指定されたモデル(例:gpt-4)で初期化します。
  • llm.complete(...)応答内容を生成するために、プロンプト・テキストをモデルに送る。

3.5 OpenAIを使ったラマ指数とのチャットインタラクション

from llama_index.llms.openai import OpenAI
from llama_index.core.llms import ChatMessage
# 初始化 OpenAI 模型
llm = OpenAI()
# 定义聊天消息
messages = [
ChatMessage(
role="system", content="You are a pirate with a colorful personality"
),
ChatMessage(role="user", content="What is your name"),
]
# 获取模型的响应结果
resp = llm.chat(messages)
  • OpenAIOpenAIのモデルと対話するためのクラスです。
  • ChatMessageチャットメッセージをフォーマットするクラス。
  • OpenAI()OpenAIクラスのインスタンスを初期化します。
  • ChatMessage役割("system"、"user "など)とメッセージの内容を指定する。
    • role="system"システムメッセージを定義し、モデルのコンテキストやパーソナリティを設定する。
    • role="user"ユーザーが送信したメッセージを表す。
  • llm.chat(messages)定義されたメッセージをモデルに送信し、応答結果を受信する。

このコードは、チャットのシステム設定とユーザーメッセージ設定を通じて、OpenAIモデルと相互作用します。

 

4.RAGプロセスの観察

4.1 RAGプロセスを観察するための環境設定

!pip install llama-index
!pip install llama-index-vector-stores-qdrant
!pip install llama-index-readers-file
!pip install llama-index-embeddings-fastembed
!pip install llama-index-llms-openai
!pip install -U qdrant_client fastembed
  • llama-indexLlama Index 機能のコアパッケージ。
  • llama-index-vector-stores-qdrantQdrantをLlama Indexのベクトルストアとして統合。
  • llama-index-readers-fileLlama Indexのファイル読み込み機能を提供します。
  • llama-index-embeddings-fastembedベクトル埋め込みを生成するLlama IndexのFastEmbedサポート。
  • llama-index-llms-openaiOpenAIのモデルをLlama Indexに統合。
  • qdrant_clientベクトル検索エンジン Qdrant と対話するためのクライアントサイドライブラリ。
  • fastembed埋め込みベクトルを高速に生成するライブラリ。

4.2 埋め込みと文書索引を使用したRAGプロセスの準備

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.fastembed import FastEmbedEmbedding
# from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.settings import Settings
Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5")
# Settings.embed_model = OpenAIEmbedding(embed_batch_size=10)
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
  • VectorStoreIndex: ベクトルストア・インデックスを作成・管理するためのクラス。このインデックスは文書ベクトルに基づいて効率的な類似検索と検索を行う。
  • SimpleDirectoryReader指定されたディレクトリから文書を読み込み、読み込んだファイルをインデックス作成のために前処理するクラス。
  • FastEmbedEmbeddingFastEmbed ライブラリを使ってテキスト埋め込みベクトルを生成するための埋め込みモデルクラスです。モデル名は "BAAI/bge-base-en-v1.5".
  • from llama_index.embeddings.openai import OpenAIEmbedding::
    • OpenAIEmbeddingOpenAIのエンベッディングサービスでベクトルを生成するためのエンベッディングモデルクラスです。デフォルトではコメントアウトされています。FastEmbedの代わりにOpenAIのモデルを使いたい場合は、コメントを外して、以下のようにパラメータを設定します。 embed_batch_size.
  • Settings埋め込みモデルのグローバルな設定を行うクラスです。これは embed_model 属性の割り当てで、使用する埋め込みモデルを指定します。
  • Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5")グローバル使用の設定 FastEmbedEmbedding を埋め込みベクトルモデルとする。
  • documents = SimpleDirectoryReader("data").load_data()カタログより "data" 文書データを読み込み、前処理を行う。ディレクトリ名をプロジェクトの実際のパスに合わせる。
  • index = VectorStoreIndex.from_documents(documents)前処理された文書に基づいてベクトルストア・インデックスを作成する。このステップでは、ドキュメントのベクトル化表現を実装し、ベクトルベースのクエリを可能にする。

4.3 クエリーベクトル記憶インデックス

ベクトルストア・インデックスが設定されると、それを使ってクエリーを実行し、関連情報を取り出すことができる。

query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
  • as_query_engine():: ウィル VectorStoreIndex クエリーエンジンに変換する。このエンジンは、インデックスに格納された文書のベクトル表現に基づいて検索を実行し、情報を取得することができます。
  • query()ベクトルストアのインデックスに対してクエリを実行する。クエリー文字列 "What did the author do growing up? "を使って関連文書を検索し、ベクトル埋め込みによって提供されるコンテキストに基づいて情報を取得する。

最後にresponse クエリーとインデックス・ドキュメントに基づいて生成されたベクトル・ストレージ・インデックスから取得された情報が含まれる。

 

評決を下す

このガイドでは、Llama Indexを使用したRAG(Retrieval Augmented Generation)プロセスをセットアップし、様々なコンポーネントと統合してその機能を観察します。まず、Llama Index、OpenTelemetry、様々な埋め込みモデルなど、必要なライブラリを設定し、インストールしました。

私たちは次に次のことを行った:

  • 必要に応じて、FastEmbedまたはOpenAIのモデルを使用して、エンベッディングモデルの初期化と設定を行います。
  • カタログから文書を読み込んでインデックスを作成し、クエリー用のデータを準備する。
  • インデックス化された文書に基づいて検索を実行し、関連情報を取得するためのクエリーエンジンを設定する。

以上の手順により、効率的な文書検索とクエリ処理を可能にするRAGプロセスの準備が整いました。このセットアップにより、ベクトルベースの埋め込みと索引付けを使用した高度な検索と情報検索の機能が提供されます。

様々な設定やクエリーを自由に試して、RAGプロセスの機能をさらに探求してください。ご不明な点やカスタマイズが必要な場合は、ご使用のライブラリのドキュメントをご参照ください。

無断転載を禁じます:チーフAIシェアリングサークル " AIエンジニアリング・アカデミー:2.6 RAGの観測可能性 - Arize Phoenixのセットアップ
ja日本語