标签和元数据分组
LangSmith 一直支持监控图表,用于展示您的 LLM 应用程序随时间推移的重要性能和反馈指标(请参阅任何项目详细信息页面中的“监控”部分)。但是,直到现在,还无法比较包含不同标签或元数据的已记录追踪(traces)的指标。在 LLM 应用程序中,通常会有许多可供您调整的“旋钮”(模型参数、提示、分块策略、回看窗口),每个旋钮都可能对您的应用程序产生巨大的影响。
通过标签和元数据分组,LangSmith 的用户现在可以使用不同的标识符标记其应用程序的不同版本,并使用新的监控功能并排查看它们的性能。
发送带标签和元数据的追踪
LangSmith 现在支持在监控图表中按标签和元数据进行分组。以下是有关如何记录带标签和元数据的追踪的快速回顾。有关更多信息,请查看我们的文档。
LangChain
如果使用 LangChain,可以在 invoke 中向任何 Runnable 发送一个包含标签和/或元数据的字典。同样的概念也适用于 TypeScript。
chain.invoke({"input": "What is the meaning of life?"}, {"metadata": {"my_key": "My Value"}}) # sending custom metadata
chain.invoke({"input": "Hello, World!"}, {"tags": ["shared-tags"]}) # sending custom tagsLangChain Python
LangSmith SDK / API
如果您不使用 LangChain,可以使用 SDK 或 API 来记录带有自定义标签和/或元数据的追踪。
# Using the Python SDK
import openai
from langsmith.run_helpers import traceable
@traceable(
run_type="llm"
name="My LLM Call",
tags=["tutorial"],
metadata={"githash": "e38f04c83"},
)
def call_openai(
messages: List[dict], model: str = "gpt-3.5-turbo", temperature: float = 0.0
) -> str:
return openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=temperature,
)Python SDK
// Using the TypeScript SDK
import { RunTree, RunTreeConfig } from "langsmith";
const parentRunConfig: RunTreeConfig = {
name: "My Chat Bot",
run_type: "chain",
inputs: {
text: "Summarize this morning's meetings.",
},
extra: {
metadata: {"githash": "e38f04c83"}
},
tags=["tutorial"]
};
const parentRun = new RunTree(parentRunConfig);
await parentRun.postRun();TypeScript SDK
# Using the REST API (in Python)
requests.post(
"https://api.smith.langchain.com/runs",
json={
"id": run_id,
"name": "My Run",
"run_type": "chain",
"inputs": {"text": "Foo"},
"start_time": datetime.datetime.utcnow().isoformat(),
"session_name": project_name,
"tags": ["langsmith", "rest", "my-example"],
"extra": {
"metadata": {"my_key": "My value"},
},
},
headers={"x-api-key": _LANGSMITH_API_KEY},
)REST API(在 Python 中)
案例研究:在 Chat LangChain 中测试不同的 LLM 提供商
Chat LangChain 是一个由 LLM 驱动的聊天机器人,旨在回答有关 LangChain 的 Python 文档中的问题。我们已使用 LangServe 将该聊天机器人部署到生产环境,并启用了 LangSmith 追踪以获得一流的可观测性。我们允许用户选择四种 LLM 提供商之一(Claude 2.1、Fireworks 上的 Mixtral、Google Gemini Pro 和 OpenAI GPT 3.5 Turbo)来支持聊天体验,并通过 metadata 中的 "llm" 键发送模型类型。
假设我们有兴趣分析每个模型在延迟和首次标记时间(time-to-first-token)等重要指标上的表现。
我们可以在这里看到,我们已按 llm 元数据键对监控图表进行了分组。通过分析图表,我们可以识别模型之间的任何差异或偏差,并做出数据驱动的应用程序决策。
LLM 延迟

在这里,我们看到由 Fireworks 上的 Mixtral 驱动的响应完成速度比其他提供商快得多。
首次标记时间

此图表显示了不同 LLM 提供商随时间的首次标记时间。有趣的是,尽管 Google Gemini 的整体完成时间比 Claude 2.1 快,但首次标记时间却趋于更慢。
反馈

监控部分还显示了不同标准下的反馈随时间变化的图表。尽管在此期间我们的反馈数据比较混乱,但您可以想象,看到不同模型提供商的聊天机器人响应的用户满意度出现清晰的趋势,可以帮助评估模型延迟与响应质量之间的权衡。
其他用例
在这里,我们展示了如何在 LangSmith 中使用元数据和标签将数据分组到不同的类别中,每个类别对应一种模型类型,然后并排分析每个类别的性能指标。这种模式可以轻松应用于其他用例。
- A/B 测试修订版本:想象一下,您正在发布应用程序中的不同功能修订版本或版本,并希望将它们并排进行测试。通过在元数据中发送
revision标识符并在图表中按此修订版本进行分组,您可以清楚地看到每个版本相对于其他版本的性能。 - 增强用户体验:通过在元数据中使用
user_id或conversation_id对数据进行分组,您可以深入了解不同用户如何体验应用程序,并识别任何特定于用户的问题或趋势。
这些示例仅仅触及了 LangSmith 新分组功能的可能性。