如何在LangSmith中传递自定义运行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 图实现了LanChain 可运行接口,并在如 invoke
、ainvoke
、stream
等方法中接受第二个参数(RunnableConfig
)。
LangSmith 平台将允许您根据 run_name
、run_id
、tags
和 metadata
搜索和筛选跟踪。
简要说明¶
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密钥
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")
为LangGraph开发设置LangSmith
注册LangSmith可以快速发现并解决您的LangGraph项目中的问题,并提高性能。LangSmith允许您使用跟踪数据来调试、测试和监控使用LangGraph构建的LLM应用程序——更多关于如何开始的信息,请参阅这里。
定义图¶
在这个示例中,我们将使用预构建的ReAct代理。
API Reference: 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
# First we initialize the model we want to use.
model = ChatOpenAI(model="gpt-4o", temperature=0)
# For this tutorial we will use custom tool that returns pre-defined values for weather in two cities (NYC & SF)
@tool
def get_weather(city: Literal["nyc", "sf"]):
"""Use this to get weather information."""
if city == "nyc":
return "It might be cloudy in nyc"
elif city == "sf":
return "It's always sunny in sf"
else:
raise AssertionError("Unknown city")
tools = [get_weather]
# Define the graph
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”的运行。
此外,您还可以使用提供的标签或元数据在事后过滤跟踪信息。例如,