LlamaIndex v0.10のTracingとDebuggingをためす+Callback
2024/02/28
こちらの公式ドキュメント(v0.10.13)を参考にトレースとデバッグについてまとめていきます.
更にこちらのコールバックについてのドキュメントもまとめます
はじめに
アプリケーションのデバッグを行いトレースすることは,アプリケーションを理解して最適化する重要なカギです.LlamaIndexでこれを行うための方法を紹介します.
基本的なロギング
アプリケーションの動作を調べるもっとも簡単な方法は,デバッグログを有効にすることです.これは,次のコードでアプリケーション内のどこでも実行できます.
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
基本的なロギングを含めた,すべての実行コードは以下で公開します.
コールバックハンドラ
LlamaIndexは,ライブラリの内部動作のデバッグ,追跡,トレースに役立つコールバックを提供します.コールバックマネージャを使用すると,必要なだけコールバックを追加できます.
イベントに関連するデータのログに加えて,各イベントの期間と発生回数を追跡することもできます.
さらに,イベントのトレースマップも記録され,コールバックはこのデータを自由に使用できます.例えば,LlamaDebugHandlerはデフォルトで,ほとんどの操作の後にイベントのトレースを出力します.
次のような単純なコールバックハンドラーを取得できます.
import llama_index.core
llama_index.core.set_global_handler("simple")
独自のカスタムコールバックハンドラーを構築する方法もあります.
Callbacks
そもそも,「コールバック」とは,ある関数が別の関数を引数と受け取り,ある時点でその引数として受け取った関数を実行するプログラミングパターンのことを指します.
def my_callback_function():
print("コールバック関数が呼ばれました")
def process_data(callback):
print("データを処理中...")
# ここで何らかのデータ処理を行う
for i in range(5):
print(i)
# データ処理が完了した後、コールバック関数を呼び出す
callback()
# process_data関数を呼び出し、その引数としてmy_callback_functionを渡す
process_data(my_callback_function)
## 出力
# データを処理中...
# 0
# 1
# 2
# 3
# 4
# コールバック関数が呼ばれました
このようにコールバックを使用することで,非同期処理の完了時や特定のイベントが発生したときに追加の処理を行うことができます.
よって,LlamaIndexではライブラリの内部動作のデバッグに役立つコールバックというのは,好きなタイミングで関数を実行しデバッグに使用できる関数ということです.
コンセプト
イベントに関連するデータのログ
各イベントの期間と発生回数
イベントのトレースマップ
等を記録,利用することができます.
たとえば,`LlamaDebugHundler`はデフォルトで,ほとんどの操作の後にイベントのトレースを出力します.
コールバックイベントタイプ
各コールバックは各イベントタイプを利用しない場合がありますが,次のイベントを追跡できます.
CHUNKING
テキスト分割前後のログNODE_PARSING
ドキュメントとドキュメントが解析されるノードのログEMBEDDING
埋め込まれたテキストの数のログLLM
LLM呼び出しのテンプレートと応答のログQUERY
各クエリの開始と終了の追跡RETRIEVE
クエリに対して検索されたノードのログSYNTHESIZE
合成呼び出しの結果のログTREE
生成された概要と,そのレベルのログSUB_QUESTION
生成されたサブ質問と回答のログ
独自のコールバックを実装してこれらのイベントを追跡することも,既存のコールバックを使用することもできます.
モジュール
現在サポートされているコールバックは次の通りです.
TokenCountingHandler -> プロンプト、完了、および埋め込みトークンの使用のための柔軟なトークン カウント。移行の詳細を確認する
LlamaDebugHanlder -> イベントの基本的な追跡とトレース。
WandbCallbackHandler -> Wandb Prompts フロントエンドを使用したイベントとトレースの追跡。詳細については、Wandbを参照してください。
AimCallback -> LLM 入力と出力の追跡。
OpenInferenceCallbackHandler -> AI モデル推論の追跡。
OpenAIFineTuningHandler -> すべての LLM 入出力を記録します。そして、save_finetuning_events()入出力をOpenAIでのfinetuningに適した形式で保存する機能を提供します。
ここでは,TokenCountingHandlerを使用した例を紹介します.
可観測性
LlamaIndexは,ワンクリックで可観測性を提供し,原則に基づいたLLMアプリケーションを運用環境で構築できるようにします.
この機能により,LlamaIndexライブラリとパートナーが提供する強力な可観測性・評価ツールをシームレスに統合できます.変数を一度設定すると,つぎのようなことができるようになります.
LLM,プロンプト入力,出力の表示
コンポーネント(LLM, 埋め込み)の出力が期待通りに実行されているか確認します.
インデックス作成とクエリの両方の呼び出し追跡を表示する
詳細は可観測性に関するドキュメントで確認できます.
まとめ
デバッグログを有効にすることでロギングが可能になる
コールバックハンドラはライブラリの内部動作の理解のために必要に応じて追加できる
TokenCountingHandlerは,トークン数のカウントに使用できるコールバック
LlamaIndexでは,入力出力の表示,インデックスとクエリの呼び出しの追跡などで可観測性のある構築ができる
次に読む記事
一連の流れを知りたい方は「評価」についてのドキュメントを確認します.
可観測性について深く知りたい方は,詳しいドキュメントに進んでください.
支援のお願い
ここまで読んでいただきありがとうございます。「スキ」で反応をいただけると励みになります。
また、継続的な記事の公開のために、支援をしていただけると幸いです。
https://note.com/rhe/n/n01096a6aed38