このノートブックへようこそ。このノートブックでは、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
これらのコマンドはインストールを行う:
アリゼ・フェニックス
機械学習ワークフローの観測可能性のためのツール。オープンカンファレンス-計測-オープンナイ
OpenAIのモデルを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に公開します。
- ノート
px として phoenix をインポートする px.launch_app()
1.3 必要なライブラリのインポートと環境設定
データ処理と評価を行う前に、必要なライブラリをインポートし、環境を設定する:
インポート json
import os
from getpass import getpass
インポート nest_asyncio
pandas を pd としてインポート
from tqdm import tqdm
import phoenix as px
#はラップトップ環境での同時評価を可能にする
nest_asyncio.apply()
# pandas DataFrameの表示オプションを設定して、より多くのコンテンツを表示する
pd.set_option("display.max_colwidth", 1000)
json
,オス
JSON データとオペレーティングシステムのインタラクションを扱うための Python 標準ライブラリ。通行許可証
パスワードを安全に入力するツール。nest_asyncio
Jupyterノートブックでasyncioを使えるようにする。パンダ
(ピーディー
):強力なPythonデータ操作ライブラリ。tqdm
データ処理の進行状況を追跡するために、ループにプログレスバーを設ける。不死鳥
(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という変数に代入します。 ビュー()
この方法では、フェニックスのアプリケーションがノートブック・インターフェースに直接表示されるため、ブラウザとノートブックを切り替えることなく、統合されたエクスペリエンスが提供される。
1.6 トレースの終点を設定する
トレースデータをPhoenixアプリケーションに送信して解析や観測を行うには、Phoenixアプリケーションが受信データをリッスンするエンドポイントURLを定義します。
エンドポイント = "http://127.0.0.1:6006/v1/traces"
エンドポイント
Phoenix アプリケーションが受信トレースデータをリッスンするために使用するエンドポイント URL を格納する変数。
2.OpenAIの追跡
より多くの統合。 読書。
2.1 OpenAIパッケージのインストールとインポート
pip install openai
インポート openai
オベナイ
OpenAI API用のPythonクライアントライブラリです。OpenAIのモデル(GPT-3、GPT-4を含む)にリクエストを送り、様々なタスクを実行することができます。
2.2 OpenAI APIキーの設定
インポートopenai
import os
from getpass import getpass
# 環境変数からAPIキーを取得する。
if not (openai_api_key := os.getenv("OPENAI_API_KEY")):: openai_api_key = getpass("ᖩ")
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_provider = trace_sdk.TracerProvider()
# エンドポイントを持つOTLP Spanエクスポータを定義する
span_exporter = OTLPSpanExporter(endpoint)
#スパンを処理してエクスポートするためにスパンプロセッサをセットアップする
span_processor = SimpleSpanProcessor(span_exporter)
# トレーサ・プロバイダにスパン・プロセッサを追加する
tracer_provider.add_span_processor(span_processor)
# グローバルトレーサープロバイダの設定
trace_api.set_tracer_provider(tracer_provider)
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実装が含まれています。トレーサプロバイダ
.使用状況::トレーサプロバイダ
Tracerインスタンスを管理し、トレースで収集されたスパン(作業単位)のエクスポートを担当します。シンプルスパンプロセッサー
エクスポート・スパンを同期させてデータを処理し、エクスポータに送信するプロセッサ。
opentelemetry.sdk.trace.export
:は英語の -ity、-ism、-ization に対応する。トラッキングデータをエクスポートするためのクラスを提供します。使用状況::シンプルスパンプロセッサー
スパンを処理し、指定されたエクスポーターを使用してエクスポートすることで、データが分析のためにバックエンドに送信されることが保証されます。
2.4 OpenInferenceによるOpenAIのインスツルメンテーション
OpenTelemetryをOpenAIに統合し、OpenAIモデルのインタラクションのトラッキングを可能にするには、以下のデータを使います。 オープンカンファレンス
図書館 OpenAIInstrumentor
.
from openinference.instrumentation.openai import OpenAIInstrumentor
#はOpenAIのインスタンスを作成し、インスツルメンテーションを適用します。
OpenAIInstrumentor().instrument()
OpenAIInstrumentor
よりオープンカンファレンス
OpenAIのAPIコールをインスツルメンテーションするためのライブラリクラスで、トラッキングと観測を可能にします。instrument()
: このメソッドは、OpenAI API クライアントが自動的にトレースデータを生成し、OpenTelemetry バックエンドに送信するように設定します。設定されたトレース設定を統合し、OpenAIのモデルとのインタラクションプロセスを監視・分析することができます。
このコードを実行することで、すべてのOpenAI APIコールが追跡され、モデルの使用状況やパフォーマンスに関する詳細な洞察を得ることができます。
2.5 OpenAI APIにリクエストする
OpenAIのAPIとやりとりしてレスポンスを得るには、以下のコードを使います。この例では、チャット完了リクエストを作成し、OpenAI API 経由で結果を表示する方法を示します:
インポートopenai
# OpenAIクライアントのインスタンスを作成する
client = openai.OpenAI()
#がOpenAI APIにチャットの完了をリクエストする
response = client.chat.completions.create(
model="gpt-4o"、
messages=[{"role": "user", "content": "俳句を作ろう"}]、
)
# 回答内容を印刷する
print(response.choices[0].message.content)
openai.OpenAI()
OpenAI APIとの対話に使用できるOpenAIクライアントのインスタンスを初期化します。client.chat.completions.create()
: OpenAI APIにリクエストを送り、チャットの補足を作成します。model="gpt-4o"
補集合の生成に使用するモデルの名前を指定します。モデル名が正しく、OpenAI API アカウントで有効になっていることを確認してください。メッセージ
:: 対話履歴を含むメッセージのリスト。この例では、ユーザーによって送信された1つのメッセージリクエストが含まれています。
response.choices[0].message.content
モデルによって生成されたコンプリメントを抽出し、印刷します。
3.ラマ指数追跡
3.1 必要なライブラリのインストールとインポート
!pip install llama-index
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-インデックス-LLMS-OPENAI
Llama IndexとOpenAIのモデルを統合するパッケージ。openinference-instrumentation-llama-index==2.2.4
ラマ指数相互作用の計測ツールを提供。llama-index-callbacks-arize-phoenix
Arize Phoenixコールバックとの統合を提供します。アリゼ・フェニックス[ラマ・インデックス]
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_provider = trace_sdk.TracerProvider()
# トレーサ・プロバイダにスパン・プロセッサを追加する
tracer_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))
Tracer Providerを使用したLlama Indexの# Instrumentation
LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)
ラマ指数計測器
よりopeninference.instrumentation.llama_index
ラマ・インデックスのトラッキングと観測可能性を計測するクラス。trace_sdk.TracerProvider()
トレースデータを作成・管理するための新しいトレーサープロバイダを初期化する。シンプルスパンプロセッサー
スパンのエクスポートを同期し、バックエンドにデータを送信するために使用されます。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("ポール・グラハムは")
# レスポンスを表示する
print(resp)
from llama_index.llms.openai import OpenAI
よりラマ・インデックス
パッケージを使って、OpenAIのクラスをインポートすることができます。OpenAI(モデル="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()
# ChatMessageを定義する
メッセージ = [
ChatMessage(
role="system", content="あなたはカラフルな性格の海賊です"
),
ChatMessage(role="user", content="あなたの名前を教えてください"), ].
]
# モデルの応答結果の取得
resp = llm.chat(messages)
オープンAI
OpenAIのモデルと対話するためのクラスです。チャットメッセージ
チャットメッセージをフォーマットするクラス。オープンAI()
OpenAIクラスのインスタンスを初期化します。チャットメッセージ
役割("system"、"user "など)とメッセージの内容を指定する。role="システム"
システムメッセージを定義し、モデルのコンテキストやパーソナリティを設定する。role="ユーザー"
ユーザーが送信したメッセージを表す。
llm.chat(メッセージ)
定義されたメッセージをモデルに送信し、応答結果を受信する。
このコードは、チャットのシステム設定とユーザーメッセージ設定を通じて、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 Index 機能のコアパッケージ。llama-index-vector-stores-qdrant。
QdrantをLlama Indexのベクトルストアとして統合。llama-index-readers-ファイル
Llama Indexのファイル読み込み機能を提供します。llama-index-embeddings-fastembed。
ベクトル埋め込みを生成するLlama IndexのFastEmbedサポート。LLAMA-インデックス-LLMS-OPENAI
OpenAIのモデルをLlama Indexに統合。qdrant_client
ベクトル検索エンジン Qdrant と対話するためのクライアントサイドライブラリ。ファストベッド
埋め込みベクトルを高速に生成するライブラリ。
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
: ベクトルストア・インデックスを作成・管理するためのクラス。このインデックスは文書ベクトルに基づいて効率的な類似検索と検索を行う。シンプルディレクトリリーダー
指定されたディレクトリから文書を読み込み、読み込んだファイルをインデックス作成のために前処理するクラス。ファストエンベッド
FastEmbed ライブラリを使ってテキスト埋め込みベクトルを生成するための埋め込みモデルクラスです。モデル名は"BAAI/bge-base-en-v1.5"
.from llama_index.embeddings.openai import OpenAIEmbedding
::OpenAIEエンベッディング
OpenAIのエンベッディングサービスでベクトルを生成するためのエンベッディングモデルクラスです。デフォルトではコメントアウトされています。FastEmbedの代わりにOpenAIのモデルを使いたい場合は、コメントを外して、以下のようにパラメータを設定します。埋め込みバッチサイズ
.
設定
埋め込みモデルのグローバルな設定を行うクラスです。これは埋め込みモデル
属性の割り当てで、使用する埋め込みモデルを指定します。Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5")
グローバル使用の設定ファストエンベッド
を埋め込みベクトルモデルとする。documents = SimpleDirectoryReader("data").load_data()
カタログより「データ
文書データを読み込み、前処理を行う。ディレクトリ名をプロジェクトの実際のパスに合わせる。index = VectorStoreIndex.from_documents(documents)
前処理された文書に基づいてベクトルストア・インデックスを作成する。このステップでは、ドキュメントのベクトル化表現を実装し、ベクトルベースのクエリを可能にする。
4.3 クエリーベクトル記憶インデックス
ベクトルストア・インデックスが設定されると、それを使ってクエリーを実行し、関連情報を取り出すことができる。
query_engine = index.as_query_engine()
response = query_engine.query("著者は子供の頃何をしていましたか?")
response = query_engine.query("What did the author do growing up?") print(response)
as_query_engine()
:: ウィルVectorStoreIndex
クエリーエンジンに変換する。このエンジンは、インデックスに格納された文書のベクトル表現に基づいて検索を実行し、情報を取得することができます。クエリー()
ベクトルストアのインデックスに対してクエリを実行する。クエリー文字列 "What did the author do growing up? "を使って関連文書を検索し、ベクトル埋め込みによって提供されるコンテキストに基づいて情報を取得する。
最後に応答
クエリーとインデックス・ドキュメントに基づいて生成されたベクトル・ストレージ・インデックスから取得された情報が含まれる。
評決を下す
このガイドでは、Llama Indexを使用したRAG(Retrieval Augmented Generation)プロセスをセットアップし、様々なコンポーネントと統合してその機能を観察します。まず、Llama Index、OpenTelemetry、様々な埋め込みモデルなど、必要なライブラリを設定し、インストールしました。
私たちは次に次のことを行った:
- 必要に応じて、FastEmbedまたはOpenAIのモデルを使用して、エンベッディングモデルの初期化と設定を行います。
- カタログから文書を読み込んでインデックスを作成し、クエリー用のデータを準備する。
- インデックス化された文書に基づいて検索を実行し、関連情報を取得するためのクエリーエンジンを設定する。
以上の手順により、効率的な文書検索とクエリ処理を可能にするRAGプロセスの準備が整いました。このセットアップにより、ベクトルベースの埋め込みと索引付けを使用した高度な検索と情報検索の機能が提供されます。
様々な設定やクエリーを自由に試して、RAGプロセスの機能をさらに探求してください。ご不明な点やカスタマイズが必要な場合は、ご使用のライブラリのドキュメントをご参照ください。