使用 LangGraph 构建的观察器
LangGraph 这是一个用于使用 LangChain 构建带状态的多代理工作流的框架。 它支持创建具有循环执行流程、状态管理以及代理间条件路由功能的复杂代理系统。
Instana 为 LangGraph 应用程序提供可观测性,支持对多代理工作流、状态转换以及大型语言模型交互进行实时监控。
先决条件
请确保满足以下先决条件。
Python 3.8 已安装该版本或更高版本。
一个 LLM API 密钥,例如 Anthropic、 OpenAI, 或 LangGraph 支持的任何 LLM 提供商。
搜索 API 键(可选,用于搜索工具功能——Tavily或 DuckDuckGo )。
Instana 已根据您的应用程序进行配置,请参阅 “入门指南 ”。
对 LangGraph 应用程序进行性能监控
要为您的 LangGraph 应用程序配置 Instana ,请完成以下步骤:
安装 LangGraph 和 OpenLLMetry 所需的软件包。
pip install langgraph langchain-anthropic duckduckgo-search traceloop-sdk请设置您的 LLM 提供商和搜索工具的凭据。
export ANTHROPIC_API_KEY="<your-api-key>" export TAVILY_API_KEY="<your-tavily-api-key>"注:如果使用其他提供商,请替换为您的 LLM 提供商的环境变量(例如,
OPENAI_API_KEYOpenAI )。 如果您使用的是其他搜索工具,则 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_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 。 对于复杂的多代理工作流,您可能需要将其值调高至默认值以上。