使用 LangGraph 构建的观察器

LangGraph 这是一个用于使用 LangChain 构建带状态的多代理工作流的框架。 它支持创建具有循环执行流程、状态管理以及代理间条件路由功能的复杂代理系统。

Instana 为 LangGraph 应用程序提供可观测性,支持对多代理工作流、状态转换以及大型语言模型交互进行实时监控。

先决条件

请确保满足以下先决条件。

  • Python 3.8 已安装该版本或更高版本。

  • 一个 LLM API 密钥,例如 Anthropic、 OpenAI, 或 LangGraph 支持的任何 LLM 提供商。

  • 搜索 API 键(可选,用于搜索工具功能——Tavily或 DuckDuckGo )。

  • Instana 已根据您的应用程序进行配置,请参阅 “入门指南 ”。

对 LangGraph 应用程序进行性能监控

要为您的 LangGraph 应用程序配置 Instana ,请完成以下步骤:

  1. 安装 LangGraph 和 OpenLLMetry 所需的软件包。

    pip install langgraph langchain-anthropic duckduckgo-search traceloop-sdk
  2. 请设置您的 LLM 提供商和搜索工具的凭据。

    export ANTHROPIC_API_KEY="<your-api-key>"
    export TAVILY_API_KEY="<your-tavily-api-key>"
    注:

    如果使用其他提供商,请替换为您的 LLM 提供商的环境变量(例如, OPENAI_API_KEYOpenAI )。 如果您使用的是其他搜索工具,则 Tavily API 键为可选项。

  3. 创建您的 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()
  4. 运行您的 LangGraph 应用程序。

    python langgraph_app.py

    该应用程序执行多智能体工作流,并显示执行步骤:

    图 1. LangGraph 输出
    LangGraph 输出
  5. 在 Instana 中查看数据。

    运行应用程序后,数据将显示在 Instana 的Gen AI可观测性仪表盘中:

    图 2. LangGraph Instana 中的痕迹
    LangGraph Instana 中的痕迹

    仪表盘显示:

    • 多智能体工作流执行

    • 代理之间的状态转换

    • 工具调用(搜索操作)

    • LLM 与延迟及令牌使用量的交互

    • 条件路由决策

故障诊断

对于“轨迹未显示”或“连接错误”等常见问题,请参阅 “故障排除 ”。

使用 create_react_agent 时的导入错误

问题 :使用 create_react_agent. 时,指标或跟踪记录不完整。

可能原因 :数据是从错误的包中导入的。

要解决此问题,请尝试从以下位置 create_react_agentlanggraph.prebuilt 导入:

# Correct import
from langgraph.prebuilt import create_react_agent

# Don't use this
from langchain.agents import create_react_agent

工作流执行错误

问题 :工作流因递归限制错误而失败。

要解决此问题,请根据您的工作流复杂程度,尝试调整 调用 stream() 中的 参数 recursion_limit 。 对于复杂的多代理工作流,您可能需要将其值调高至默认值以上。