Skip to main content
LangSmith 集成会自动处理追踪。自定义插装允许你精确定义哪些函数被追踪,控制记录哪些输入和输出,并构建你的追踪层次结构,而无需重写应用程序逻辑。
如果你正在使用 LangChain(Python 或 JS/TS),请直接前往 LangChain 专用说明

前提条件

开始追踪前,请设置以下环境变量:
  • LANGSMITH_TRACING=true:启用追踪。设置此变量可以在不更改代码的情况下开启或关闭追踪。
  • LANGSMITH_API_KEY:你的 LangSmith API 密钥
要禁用追踪,请移除 LANGSMITH_TRACING 环境变量。这不会影响 RunTree 对象或直接 API 使用,它们是底层操作,不受追踪开关控制。
默认情况下,追踪记录会记录到名为 default 的项目中。要记录到其他项目,请参阅 将追踪记录到特定项目

使用 @traceable / traceable

推荐的方法是使用 @traceable 装饰器(Python)或 traceable 包装器(TypeScript)。将其应用于任何函数,使其成为被追踪的运行,LangSmith 会自动处理嵌套调用间的上下文传播。 以下示例追踪一个简单的流水线:run_pipeline 调用 format_prompt 构建消息,调用 invoke_llm 调用模型,并调用 parse_output 提取结果。 每个函数都被单独追踪,并且由于它们是从 run_pipeline(同样被追踪)内部调用的,LangSmith 会自动将它们嵌套为子运行。invoke_llm 使用 run_type="llm" 将其标记为 LLM 调用,以便 LangSmith 能正确渲染令牌计数和延迟:
在 LangSmith 中,你将看到一个 run_pipeline 追踪,其中包含嵌套为子运行的 format_promptinvoke_llmparse_output
当你用 traceable 包装一个同步函数时(例如,前面示例中的 formatPrompt),调用时请使用 await 关键字,以确保追踪被正确记录。

使用 trace 上下文管理器(仅限 Python)

在 Python 中,你可以使用 trace 上下文管理器将追踪记录到 LangSmith。这在以下情况下很有用:
  1. 你想为特定的代码块记录追踪。
  2. 你想控制追踪的输入、输出和其他属性。
  3. 使用装饰器或包装器不可行。
  4. 以上任意或全部情况。
该上下文管理器与 traceable 装饰器和 wrap_openai 包装器无缝集成,因此你可以在同一个应用程序中一起使用它们。 以下示例展示了三者一起使用的情况。wrap_openai 包装了 OpenAI 客户端,使其调用自动被追踪。my_tool 使用 @traceable 并设置 run_type="tool" 和自定义 name,以便在追踪中正确显示。chat_pipeline 本身没有装饰——相反,ls.trace 包装了调用,让你可以显式传递项目名称和输入,并通过 rt.end() 手动设置输出:

使用 RunTree API

另一种更显式地将追踪记录到 LangSmith 的方式是通过 RunTree API。这个 API 让你对追踪有更多控制权——你可以手动创建运行和子运行来组装你的追踪。你仍然需要设置 LANGSMITH_API_KEY,但 LANGSMITH_TRACING 对于此方法不是必需的。 此方法不推荐使用,因为在传播追踪上下文时更容易出错。

使用示例

你可以扩展前面章节中解释的工具来追踪任何代码。以下代码展示了一些扩展示例。 追踪类中的任何公共方法:

确保所有追踪在退出前提交

LangSmith 在后台线程中执行追踪,以避免阻塞你的生产应用程序。这意味着你的进程可能在所有追踪成功发布到 LangSmith 之前就结束了。以下是确保在退出应用程序前提交所有追踪的一些选项。

使用 LangSmith SDK

如果你独立使用 LangSmith SDK,可以在退出前使用 flush 方法:

使用 LangChain

如果你正在使用 LangChain,请参考我们的 LangChain 追踪指南 如果你更喜欢视频教程,请查看 LangSmith 入门课程中的 追踪基础视频