跳到主要内容

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

注意

本节内容适用于使用 LangSmith JS SDK 0.2.0 及更高版本的用户。如果您在无服务器环境中使用 LangChain.js 或 LangGraph.js 进行跟踪,请参阅本指南

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

为了确保这种情况发生,您可以选择

  • 将名为 LANGSMITH_TRACING_BACKGROUND 的环境变量设置为 "false"。这将导致您跟踪的函数在返回之前等待跟踪完成。
    • 请注意,这与 LangChain.js 中的环境变量命名不同,因为 LangSmith 可以在没有 LangChain 的情况下使用。
  • 将自定义客户端传递到您跟踪的运行中,并 await client.awaitPendingTraceBatches(); 方法。

以下是将 awaitPendingTraceBatchestraceable 方法一起使用的示例

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 客户端将在您的跟踪运行执行时批量处理操作,每隔几毫秒发送一个新批次。

这在大多数情况下都运行良好,但如果您的跟踪函数运行时间较长且并发性非常高,您也可能会遇到与总体请求计数相关的速率限制。

如果您看到与此相关的速率限制错误,您可以尝试在您的客户端中设置 manualFlushMode: true,如下所示

import { Client } from "langsmith";

const langsmithClient = new Client({
manualFlushMode: true,
});

const myTracedFunc = traceable(
async () => {
// Your logic here...
},
{ client: langsmithClient }
);

然后在您的无服务器函数关闭之前手动调用 client.flush(),如下所示

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

请注意,这会阻止运行显示在 LangSmith UI 中,直到您调用 .flush()


此页内容是否对您有帮助?


您可以留下详细的反馈 在 GitHub 上.