Skip to main content

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

笔记

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

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

为确保此操作发生,您可以选择以下任一方式:

  • 设置一个名为的环境变量LANGSMITH_TRACING_BACKGROUND to "false"这将导致您的被追踪函数在返回前等待追踪完成。
    • 请注意,此名称与 LangChain.js 中的环境变量不同,因为 LangSmith 可以在不依赖 LangChain 的情况下使用。
  • 将自定义客户端传入您的追踪运行,并调用 client.awaitPendingTraceBatches(); 方法,其中 await 为参数。

以下是一个将 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 用户界面中,直到您调用 .flush()


这个页面对你有帮助吗?


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