監視 LangGraph

LangGraph は、ステートフルなマルチエージェントワークフローを構築するために使用できるフレームワークです LangChain。 LangGraph 大規模言語モデル(LLM)である WatsonX,OpenAI, や Claude と統合します。

Instanaを使用して LangGraph 監視し、トレース、メトリクス、ログをキャプチャできます。 このデータは、AIエージェントの対話、実行パス、およびシステムパフォーマンスに関するリアルタイムの洞察を提供します。

LangGraph 非線形実行によるマルチエージェントワークフローを実現する。 したがって、LLMの相互作用とAPI呼び出しを追跡するには、分散トレースが必要です。 (OTel)と OpenTelemetry Traceloopを統合することで、ワーク OpenLLMetry, フローに LangGraph 計測機能を組み込み、スパンとトレースをキャプチャできます。これにより、Instana内で実行フローを可視化することが可能になります。 リアルタイムの可観測性は、リソース利用率とパフォーマンスの傾向を分析することで、ワークフローの最適化をさらに強化します。 この統合により、AI駆動の自動化を微調整することが可能となり、アプリケーション LangGraph-based の信頼性と効率性が向上します。

アプリケーションの LangGraph 計測

アプリケーションを LangGraph 計測するには、次の手順を完了してください:

環境がすべての前提条件を満たしていることを確認してください。 詳細については、 「前提条件」 を参照してください。

  1. 依存関係をインストールするには、次のコマンド LangGraph, を実行してください:

    pip3 install langgraph langchain_ibm duckduckgo_search
    
  2. サンプル LangGraph アプリケーションで使用されているモデルと WatsonX 検索ツールにアクセスするための以下の認証情報をエクスポートします。

    export WATSONX_URL="<watsonx-url>"
    export WATSONX_PROJECT_ID="<watsonx-project-id>"
    export WATSONX_API_KEY="<watsonx-api-key>"
    export TAVILY_API_KEY="<tavily-api-key>"
    
  3. 以下のコードを実行してサンプル LangGraph アプリケーションを生成します:

    import os
    from langchain_community.tools.tavily_search import TavilySearchResults
    from langchain_community.tools import DuckDuckGoSearchRun
    from typing import Literal
    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 langchain_ibm.chat_models import ChatWatsonx
    
    from traceloop.sdk import Traceloop
    from traceloop.sdk.decorators import workflow
    
    # Initialize Traceloop
    Traceloop.init(app_name="langGraph_sample_app")
    
    # Define external tools
    tavily_tool = TavilySearchResults(max_results=10)
    duckDuckGoSearchRun_tool = DuckDuckGoSearchRun()
    
    # Define LLM
    parameters = {
        "decoding_method": "sample",
        "max_new_tokens": 600,
        "min_new_tokens": 1,
        "temperature": 0.5,
        "top_k": 50,
        "top_p": 1,
    }
    llm = ChatWatsonx(
        model_id="ibm/granite-3-2b-instruct",
        url="https://us-south.ml.cloud.ibm.com",
        project_id=os.getenv("WATSONX_PROJECT_ID"),
        apikey=os.getenv("WATSONX_API_KEY"),
        params=parameters,
    )
    
    
    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=[tavily_tool],
        state_modifier="You are a research assistant. Your ONLY job is to conduct thorough research. ",
    )
    
    
    def research_node(
        state: MessagesState,
    ) -> Command[Literal["blogger", END]]:
        result = research_agent.invoke(state)
        goto = get_next_node(result["messages"][-1], "blogger")
        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=[duckDuckGoSearchRun_tool],
        state_modifier="You are a blog writer. Your task is to create a well-structured blog",
    )
    
    
    def writer_node(state: MessagesState) -> Command[Literal["researcher", END]]:
        result = writer_agent.invoke(state)
        result["messages"][-1] = HumanMessage(
            content=result["messages"][-1].content, name="blogger"
        )
        return Command(
            update={
                "messages": result["messages"],
            },
        )
    
    
    # Define workflow graph
    workflow = StateGraph(MessagesState)
    workflow.add_node("researcher", research_node)
    workflow.add_node("blogger", writer_node)
    
    workflow.add_edge(START, "researcher")
    graph = workflow.compile()
    
    # Execute workflow
    events = graph.stream(
        {
            "messages": [
                (
                    "user",
                    "First, conduct a research on AI trend in 2025 "
                    "Then, based on that research, create a well-structured blog post.",
                )
            ],
        },
        {"recursion_limit": 150},
    )
    
    # Print workflow execution steps
    for s in events:
        print(s)
        print("----")
    
  4. アプリケーション LangChain を実行するには、次のコマンドを実行してください:

    python3 ./<langGraph-sample-application>.py
    

LangGraph 以下の例に示すような応答を生成します:

監視を設定すると、Instanaはアプリケーション LangGraph から以下のトレースとメトリクスを収集します:

LLMから収集されたメトリクスを確認するには、[ メトリクスの表示] を LangGraph, 参照してください。