LangChainアプリ向けSplunk Agent Observability計装

アプリの実行とTraceの確認

5 minutes

トラベルプランナーを実行し、リクエストを送信して、マルチエージェントのTraceがSplunk Agent Observabilityに記録されることを確認します。

Exercise アプリの実行とTraceの確認
1

環境の確認

base-appディレクトリに移動します:

bash
cd ~/workshop/agentic-ai/base-app
2

アプリの実行

アプリを起動します:

bash
python3 main.py

同じ環境にサインインした2つ目のターミナルで、旅行プランニングのリクエストを送信します。コールバックが接続された状態でワークフローがエンドツーエンドで動作していることを確認するため、計画された旅程が返されます。

3

アプリへのリクエスト送信

2つ目のターミナルで、旅行プランニングのリクエストを送信します。コールバックが接続された状態でワークフローがエンドツーエンドで動作していることを確認するため、計画された旅程が返されます:

bash
curl http://localhost:8080/travel/plan \
  -H "Content-Type: application/json" \
  -d '{
    "origin": "Philadelphia",
    "destination": "Florida",
    "user_request": "Planning a two day long trip from Philadelphia to Florida. Looking for a boutique hotel, business-class flights and unique experiences.",
    "travelers": 2
  }'

Splunk Agent Observabilityコンソール(https://console.multitenant.galileocloud.io/ )で、Traceが記録されたプロジェクトとログストリームを開きます。.envGALILEO_PROJECTGALILEO_LOG_STREAMのコメントを解除した場合は Workshop19 / TravelPlanner に、そうでない場合は default プロジェクトと default ログストリームに記録されています。

4

Traceの確認

最新のTraceを開きます。コールバックはグラフレベルで接続されているため、リクエストに対する1つのTraceの中に、各エージェントノードのネストされたLLM Spanが表示されます:

  • coordinator
  • flight_specialist
  • hotel_specialist
  • activity_specialist
  • plan_synthesizer
5

Spanの検査

任意のSpanを展開し、 system and human messagesmodel responsemodel nametoken countslatency がキャプチャされていることを確認します。

Traceが表示されない場合

  • リクエストペイロードを送信する前に、別のターミナルセッションを使用して同じ環境にログインできたことを確認してください。
  • アプリが実行されている環境でGALILEO_API_KEYが設定されていることを確認してください(load_dotenv()経由で.envを読み込みます)。
  • 正しいプロジェクトとログストリームを表示していることを確認してください: GALILEO_PROJECT / GALILEO_LOG_STREAMを設定した場合はその値、設定していない場合は default / default です。
  • プロジェクトが表示されない場合は、正しい権限がない可能性があります。
  • python3 main.pyを実行しているbashで、Splunk Agent Observabilityのエラーがアプリログに出力されていないか確認してください。
  • Webページの左上で正しいorganizationにいることを確認してください。

1つの旅行プランニングリクエストが、5つの別々のTraceではなく、5つのネストされたLLM Spanを含む1つのTraceを生成するのはなぜですか?

回答を表示
LangGraphワークフロー全体がリクエストごとに1つのルートランとして実行され、コールバックがそのランのconfigに接続されているためです。LangGraphは5つのノード(coordinator、flight、hotel、activity、synthesizer)をその単一のラン内で実行するため、各ノードの llm.invoke(...) は同じTraceの下の子Spanになります。代わりに各ノードに新しいコールバックと新しいランを作成した場合、5つの切断されたTrace(とセッション)が生成され、リクエストのエンドツーエンドのビューが失われます。