LangChainアプリ向けSplunk Agent Observability計装
LangChain Callbackの追加
Galileoの GalileoCallback は標準的なLangChainコールバックハンドラーです。LangChainまたはLangGraphの実行にアタッチすると、プロンプト、レスポンス、モデル名、トークン使用量、タイミング、各ステップのネストを自動的にキャプチャします。
トラベルプランナーはLangGraphワークフローであるため、すべてのノードを編集する必要はありません。代わりに、コンパイル済みグラフをストリームする際にrun configで単一のコールバックを渡します。Splunk Agent Observabilityはリクエストごとに1つのTraceを記録し、各エージェントノード(coordinator、flight、hotel、activity、synthesizer)にネストされたLLM Spanを含めます。
コールバックのインポート
main.py の他のLangChainインポートと一緒にコールバックのインポートを追加します。
from galileo.handlers.langchain import GalileoCallbackグラフのrun configにコールバックをアタッチ
plan_travel_internal() でコールバックを作成し、compiled_app.stream(...) に渡すrun configにアタッチします。既存のコードは以下のようになっているはずです。
for step in compiled_app.stream(initial_state, config):
node_name, node_state = next(iter(step.items()))
final_state = node_stateGalileoコールバックを含むconfigを構築するように更新します(アプリが既に渡しているconfigとマージします)。これにより、エージェント内の各ノードの実行がSplunk Agent Observabilityに送信されます。
# One callback per request keeps each travel plan in its own trace.
callback = GalileoCallback()
run_config = {**config, "callbacks": [callback]}
for step in compiled_app.stream(initial_state, run_config):
node_name, node_state = next(iter(step.items()))
final_state = node_stateグラフレベルでコールバックを渡すことで、すべてのノードの llm.invoke(...) 呼び出しに自動的に伝播します。追加の計装は不要です。
LangGraphワークフローで GalileoCallback をどこにアタッチしますか?
非同期ワークフロー
compiled_app.astream(...))、GalileoCallback の代わりに GalileoAsyncCallback を使用します。トラベルプランナーは同期的に実行されるため、ここでは GalileoCallback が正しい選択です。
