LangGraph で構築されたオブザーバーエージェント
LangGraph LangChain を使用して、ステートフルなマルチエージェント・ワークフローを構築するためのフレームワークです。 これにより、循環的な実行フロー、状態管理、およびエージェント間の条件付きルーティングを備えた複雑なエージェントシステムの構築が可能になります。
Instana LangGraph アプリケーションの可観測性を提供し、マルチエージェントワークフロー、状態遷移、およびLLMとのやり取りをリアルタイムで監視できるようにします。
前提条件
以下の前提条件が満たされていることを確認してください。
Python 3.8 以降がインストールされている。
Anthropic、 OpenAI,、または LangGraph でサポートされているその他のLLMプロバイダーなどのLLM API キー。
検索 API キー(オプション。検索ツール機能用 - Tavilyまたは DuckDuckGo )。
Instana アプリケーションに合わせて設定されているか確認するには、 「はじめに」 を参照してください。
LangGraph アプリケーションへの計測機能の組み込み
LangGraph アプリケーションに Instana を導入するには、以下の手順を実行してください:
LangGraph および OpenLLMetry に必要なパッケージをインストールしてください。
pip install langgraph langchain-anthropic duckduckgo-search traceloop-sdkLLMプロバイダーと検索ツールの認証情報を設定してください。
export ANTHROPIC_API_KEY="<your-api-key>" export TAVILY_API_KEY="<your-tavily-api-key>"注:別のプロバイダーを使用している場合は、そのプロバイダーの環境変数に置き換えてください(例: OpenAI
OPENAI_API_KEYの場合)。 別の検索ツールを使用している場合は、Tavilyの API キーは任意です。LangGraph アプリケーションを作成してください。
以下の例は、研究者とライターによるマルチエージェント・ワークフローを示しています:
import os from typing import Literal from langchain_anthropic import ChatAnthropic from langchain_community.tools import DuckDuckGoSearchRun from langchain_core.messages import BaseMessage, HumanMessage from langgraph.prebuilt import create_react_agent from langgraph.graph import MessagesState, StateGraph, START, END from langgraph.types import Command from traceloop.sdk import Traceloop from traceloop.sdk.decorators import workflow # Initialize OpenLLMetry Traceloop.init(app_name="langgraph_demo") # Define search tool search_tool = DuckDuckGoSearchRun() # Define LLM llm = ChatAnthropic( model="claude-3-5-sonnet-20241022", temperature=0.7, max_tokens=600 ) def get_next_node(last_message: BaseMessage, goto: str): if not last_message.content: return END return goto # Research agent and node research_agent = create_react_agent( llm, tools=[search_tool], state_modifier="You are a research assistant. Your job is to conduct thorough research." ) def research_node(state: MessagesState) -> Command[Literal["writer", END]]: result = research_agent.invoke(state) goto = get_next_node(result["messages"][-1], "writer") result["messages"][-1] = HumanMessage( content=result["messages"][-1].content, name="researcher" ) return Command( update={"messages": result["messages"]}, goto=goto ) # Writer agent and node writer_agent = create_react_agent( llm, tools=[search_tool], state_modifier="You are a blog writer. Your task is to create a well-structured blog post." ) def writer_node(state: MessagesState) -> Command[Literal[END]]: result = writer_agent.invoke(state) result["messages"][-1] = HumanMessage( content=result["messages"][-1].content, name="writer" ) return Command( update={"messages": result["messages"]}, goto=END ) # Define workflow graph workflow = StateGraph(MessagesState) workflow.add_node("researcher", research_node) workflow.add_node("writer", writer_node) workflow.add_edge(START, "researcher") graph = workflow.compile() # Execute workflow @workflow(name="langgraph_multi_agent_workflow") def run_workflow(): events = graph.stream( { "messages": [ ( "user", "First, research AI trends in 2025. " "Then, based on that research, create a well-structured blog post." ) ] }, {"recursion_limit": 150} ) # Print workflow execution steps for event in events: print(event) print("----") if __name__ == "__main__": run_workflow()LangGraph アプリケーションを実行してください。
python langgraph_app.pyこのアプリケーションはマルチエージェント・ワークフローを実行し、実行手順を表示します:
図 1. LangGraph 出力 
Instana でデータを表示します。
アプリケーションを実行すると、データが Instana のGen AI可観測性ダッシュボードに表示されます:
図 2. LangGraph Instana 内の痕跡 
ダッシュボードには次のように表示されます:
マルチエージェントによるワークフローの実行
エージェント間の状態遷移
ツールの実行(検索操作)
LLMの応答における遅延とトークン使用量
条件付きルーティングの決定
トラブルシューティング
トレースが表示されない、または接続エラーが発生するなどの一般的な問題については、 「トラブルシューティング」 を参照してください。
create_react_agent によるインポートエラー
問題 :. を使用すると create_react_agent、メトリクスまたはトレースが不完全になる。
考えられる原因 :データが間違ったパッケージからインポートされています。
この問題の解決には、以下から create_react_agent インポートしてみてください langgraph.prebuilt:
# Correct import
from langgraph.prebuilt import create_react_agent
# Don't use this
from langchain.agents import create_react_agent
ワークフローの実行エラー
問題 :再帰制限エラーによりワークフローが失敗する。
この問題を解決するには、ワークフローの複雑さに応じて、呼び出し stream() 内のパラメータ recursion_limit を調整してみてください。 複雑なマルチエージェント・ワークフローの場合、デフォルト値よりも大きく設定する必要がある場合があります。
次のステップ
Instana がサポートする AIエージェントフレームワークをご覧ください
LLMの利用にかかる費用の計算方法について
LangGraph のワークフローにアラートを設定する