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を使用した例を紹介します.




可観測性

LlamaIndexは,ワンクリックで可観測性を提供し,原則に基づいたLLMアプリケーションを運用環境で構築できるようにします.

この機能により,LlamaIndexライブラリとパートナーが提供する強力な可観測性・評価ツールをシームレスに統合できます.変数を一度設定すると,つぎのようなことができるようになります.

  • LLM,プロンプト入力,出力の表示

  • コンポーネント(LLM, 埋め込み)の出力が期待通りに実行されているか確認します.

  • インデックス作成とクエリの両方の呼び出し追跡を表示する

詳細は可観測性に関するドキュメントで確認できます.

まとめ

  • デバッグログを有効にすることでロギングが可能になる

  • コールバックハンドラはライブラリの内部動作の理解のために必要に応じて追加できる

  • TokenCountingHandlerは,トークン数のカウントに使用できるコールバック

  • LlamaIndexでは,入力出力の表示,インデックスとクエリの呼び出しの追跡などで可観測性のある構築ができる

次に読む記事

一連の流れを知りたい方は「評価」についてのドキュメントを確認します.

可観測性について深く知りたい方は,詳しいドキュメントに進んでください.


支援のお願い

ここまで読んでいただきありがとうございます。「スキ」で反応をいただけると励みになります。

また、継続的な記事の公開のために、支援をしていただけると幸いです。

https://note.com/rhe/n/n01096a6aed38


この記事が気に入ったらサポートをしてみませんか?