跳转至

如何在 LangGraph 中为图运行传递自定义运行 ID 或设置标签和元数据

在 IDE 或终端中调试图运行有时可能很困难。LangSmith 让您可以使用跟踪数据来调试、测试和监控使用 LangGraph 构建的 LLM 应用程序 - 阅读 LangSmith 文档 了解如何开始。

为了更容易识别和分析图调用期间生成的跟踪数据,您可以在运行时设置额外的配置(参见 RunnableConfig):

字段 类型 描述
run_name str 此调用跟踪器运行的名称。默认为类名。
run_id UUID 此调用跟踪器运行的唯一标识符。如果未提供,将生成新的 UUID。
tags List[str] 此调用及任何子调用(例如,调用 LLM 的链)的标签。您可以使用这些标签来过滤调用。
metadata Dict[str, Any] 此调用及任何子调用(例如,调用 LLM 的链)的元数据。键应为字符串,值应为 JSON 可序列化的。

LangGraph 图实现了 LangChain Runnable 接口,并在 invokeainvokestream 等方法中接受第二个参数(RunnableConfig)。

LangSmith 平台将允许您根据 run_namerun_idtagsmetadata 搜索和过滤跟踪数据。

快速概览

import uuid
# 生成随机 UUID -- 必须是 UUID
config = {"run_id": uuid.uuid4()}, "tags": ["my_tag1"], "metadata": {"a": 5}}
# 适用于所有标准 Runnable 方法
# 如 invoke, batch, ainvoke, astream_events 等
graph.stream(inputs, config, stream_mode="values")

本指南的其余部分将展示一个完整的代理。

设置

首先,让我们安装所需的包并设置我们的 API 密钥

%%capture --no-stderr
%pip install --quiet -U langgraph langchain_openai
import getpass
import os

def _set_env(var: str):
    if not os.environ.get(var):
        os.environ[var] = getpass.getpass(f"{var}: ")

_set_env("OPENAI_API_KEY")
_set_env("LANGSMITH_API_KEY")

Tip

注册 LangSmith 以快速发现问题并改进您的 LangGraph 项目性能。LangSmith 让您可以使用跟踪数据来调试、测试和监控使用 LangGraph 构建的 LLM 应用程序 - 在 此处 阅读更多关于如何开始的信息。

定义图

在此示例中,我们将使用 预构建的 ReAct 代理

API Reference: ChatOpenAI | create_react_agent | tool

from langchain_openai import ChatOpenAI
from typing import Literal
from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool

# 首先我们初始化要使用的模型。
model = ChatOpenAI(model="gpt-4o", temperature=0)

# 对于本教程,我们将使用自定义工具,该工具返回两个城市(纽约和旧金山)的预定义天气值
@tool
def get_weather(city: Literal["nyc", "sf"]):
    """使用此工具获取天气信息。"""
    if city == "nyc":
        return "纽约可能多云"
    elif city == "sf":
        return "旧金山总是阳光明媚"
    else:
        raise AssertionError("未知城市")

tools = [get_weather]

# 定义图
graph = create_react_agent(model, tools=tools)

运行你的图

既然我们已经定义了图,让我们运行一次并在 LangSmith 中查看追踪信息。为了使追踪信息在 LangSmith 中易于访问,我们将在配置中传入一个自定义的 run_id

这假设你已经设置了 LANGSMITH_API_KEY 环境变量。

请注意,你也可以通过设置 LANGCHAIN_PROJECT 环境变量来配置要追踪的项目,默认情况下,运行将被追踪到 default 项目。

import uuid

def print_stream(stream):
    for s in stream:
        message = s["messages"][-1]
        if isinstance(message, tuple):
            print(message)
        else:
            message.pretty_print()

inputs = {"messages": [("user", "what is the weather in sf")]}

config = {"run_name": "agent_007", "tags": ["cats are awesome"]}

print_stream(graph.stream(inputs, config, stream_mode="values"))

输出:

================================ Human Message ==================================

what is the weather in sf
================================== Ai Message ===================================
Tool Calls:
  get_weather (call_9ZudXyMAdlUjptq9oMGtQo8o)
 Call ID: call_9ZudXyMAdlUjptq9oMGtQo8o
  Args:
    city: sf
================================= Tool Message ==================================
Name: get_weather

It's always sunny in sf
================================== Ai Message ===================================

The weather in San Francisco is currently sunny.

在 LangSmith 中查看追踪

既然我们已经运行了图,让我们前往 LangSmith 查看我们的追踪。首先点击你追踪到的项目(在我们的案例中是默认项目)。你应该会看到一个具有自定义运行名称 "agent_007" 的运行。

LangSmith Trace View

此外,你将能够使用提供的标签或元数据事后过滤追踪。例如,

LangSmith Filter View