Skip to main content

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

注意

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

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

要确保发生这种情况,您可以:

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

下面是一个使用awaitPendingTraceBatches除了traceable方法:

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()在 Serverless 函数关闭之前,如下所示:

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

请注意,这将阻止运行出现在 LangSmith UI 中,直到您调用.flush().


这个页面有帮助吗?


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