1. クエリログを取る目的
-
性能の可視化: レイテンシやトークン消費量を定量化し、ボトルネックを特定する
-
品質評価: 生成テキスト、取得ノード、プロンプト/コンテキストの対応関係を後で再検証できる
-
本番デバッグ: 例外・失敗パターンを再現しやすくする
2. ログ出力のレイヤー
| レイヤー | 代表機能 | 典型的な用途 |
|---|---|---|
Python標準 logging |
DEBUG 〜 WARNING のストリーム/ファイル出力 | まずは動きをざっくり追う |
| LlamaIndex コールバック | イベントツリー・経過時間・ペイロード | 詳細トレースとメトリクス蓄積 |
| OpenTelemetry 系統 | 分散トレース・外部ダッシュボード | 本番観測・多サービス横断分析 |
2-1. 最低限の DEBUG ログ
これだけで各種コンポーネントの実行順序と簡易メッセージを取得できる docs.llamaindex.ai
2-2. CallbackManager とハンドラ群
実行後に 階層化されたイベントツリー と各区間の秒数が標準出力に現れる docs.llamaindex.ai
主なイベント種別 (CBEventType) |
例 |
|---|---|
LLM / EMBEDDING |
モデル呼び出しと埋め込み生成 |
RETRIEVE |
ベクトル検索など |
SYNTHESIZE |
回答生成ステップ |
イベント種別一覧は公式ノートブックで確認できる docs.llamaindex.ai
トークン使用量の計測
埋め込み・プロンプト・補完それぞれの累積トークン数を取得でき、reset_counts() でリセット可能 docs.llamaindex.ai
カスタムハンドラ
BaseCallbackHandler を継承し、start_trace, end_trace などをオーバーライドすれば
JSON 形式で S3 に書き出す、SQL に流す──など自由に実装できる。
3. ログの永続化とフォーマット例
-
時系列 DB(InfluxDB, TimescaleDB など)にメトリクスだけ投入
-
オブジェクトストレージに “生成テキスト+取得ノード+LLM 入出力” を残して再評価材料に
4. ログ解析の実務フロー
-
指標集計
-
EventStats経由で平均/最大レイテンシを取得し、異常スパイクを検知
-
-
再現テスト
-
ログ内の
prompt,context,retrieved_nodesを使い “同一条件で再推論”
-
-
品質評価
-
LlamaIndex の
Evaluatorモジュールや外部評価サービスで BLEU, faithfulness などを算出
-
-
コスト分析
-
TokenCountingHandler の値 × 料金表 → 月次コストを見積もり、max-token や top-k を調整
-
5. 外部オブザーバビリティ連携
| ツール | 連携方法 | 強み |
|---|---|---|
| Arize Phoenix / OpenInference | pip install arize-phoenix-otel → LlamaIndexInstrumentor().instrument(...) |
OpenTelemetry 準拠の分散トレースと RAG 向け評価テンプレート arize.com |
| Graphsignal | pip install graphsignal → graphsignal.configure(...) |
レイテンシ・トークン・例外を自動収集しダッシュボード表示 docs.llamaindex.ai |
| Langfuse / W&B / MLflow | set_global_handler("langfuse") など |
A/B テストや実験メタデータとの紐付け |
各ツールは CallbackHandler 方式 か OTel インストルメンテーション 方式を採用しているため、
同じコードに複数ハンドラを併用しても衝突しにくい。
6. ベストプラクティス
-
本番ではサンプリング+PII マスキング
-
全量ログは高コストかつ個人情報リスクがある
-
-
CI で“再現テスト+品質スコア”を自動実行
-
回帰バグを早期に検知
-
-
バージョン固定
-
llama-index>=0.11系とarize-phoenix-otel>=0.5など、互換性を明示
-
-
コールバックの粒度を要件に合わせる
-
開発中:
LlamaDebugHandler(print_trace_on_end=True) -
本番:
TokenCountingHandlerと OTel だけ有効にしてオーバーヘッド最小化
-
まとめ — 導入ステップ早見表
-
DEBUG ログをオン
-
CallbackManager に
-
LlamaDebugHandler → 時間・階層トレース
-
TokenCountingHandler → コスト指標
-
-
必要に応じて 自作ハンドラ で JSON へ永続化
-
本番では Phoenix/Graphsignal などを 1 行で装着
-
ログから 性能・品質・コスト を継続的にフィードバックし、Prompt/Retriever 設定を最適化
これで LlamaIndex アプリケーションのクエリ挙動を“見える化”し、品質と運用コストを両立させたデバッグ/評価基盤を構築できます。
ChatGPT4o 生成日:2025/06/14