Skip to content
LangSmith 文档版本 跟随上游 源快照 87237a15 更新于 2026-10-18

在无服务器环境中追踪 JS 函数

NOTE

本节适用于使用 LangSmith JS SDK 0.2.0 及以上版本的用户。如果你在无服务器环境中使用 LangChain.js 或 LangGraph.js 进行追踪,请参阅本指南。

追踪 JavaScript 函数时,LangSmith 默认会在后台追踪运行,以避免增加延迟。在执行上下文可能被突然终止的无服务器环境中,务必确保在函数完成之前正确刷新所有追踪数据。

为确保做到这一点,你可以采取以下任一方式:

  • 将名为 LANGSMITH_TRACING_BACKGROUND 的环境变量设为 "false"。这会让被追踪的函数在返回前等待追踪完成。
    • 注意,它的名称与 LangChain.js 中的环境变量不同,因为 LangSmith 可以在不使用 LangChain 的情况下使用。
  • 将自定义 client 传入被追踪的运行,并 await client.awaitPendingTraceBatches(); 方法。

以下示例展示了如何将 awaitPendingTraceBatches 与 traceable 方法一起使用:

typescript
import { Client } from "langsmith";
import { traceable } from "langsmith/traceable";
const langsmithClient = new Client({});
const tracedFn = traceable(
  async () => {
    return "Some return value";
  },
  {
    client: langsmithClient,
  }
);
const res = await tracedFn();
await langsmithClient.awaitPendingTraceBatches();

高并发下的速率限制

默认情况下,LangSmith client 会将追踪运行执行中的操作分批处理,每隔几毫秒发送一个新批次。

这在大多数情况下都很好用,但如果被追踪的函数长时间运行且并发量非常高,你也可能触及与总请求数相关的速率限制。

如果你因此看到速率限制错误,可以尝试在 client 中这样设置 manualFlushMode: true:

typescript
import { Client } from "langsmith";
const langsmithClient = new Client({  manualFlushMode: true,});
const myTracedFunc = traceable(
  async () => {
    // Your logic here...
  },
  { client: langsmithClient }
);

然后在无服务器函数关闭前,像这样手动调用 client.flush():

typescript
try {
  await myTracedFunc();
} finally {
  await langsmithClient.flush();
}

注意,在你调用 .flush() 之前,运行不会显示在 LangSmith UI 中。


BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。