在无服务器环境中跟踪 JS 函数
注意
本部分适用于使用 LangSmith JS SDK 版本 0.2.0 及更高版本的用户。 如果您在无服务器环境中使用 LangChain.js 或 LangGraph.js 进行跟踪,请参阅本指南。
在跟踪 JavaScript 函数时,LangSmith 将默认在后台跟踪运行,以避免增加延迟。 在执行上下文可能突然终止的无服务器环境中,请务必确保在函数完成之前正确刷新所有跟踪数据。
要确保发生这种情况,您可以:
- 设置名为
LANGSMITH_TRACING_BACKGROUND自"false".这将导致跟踪的函数等待跟踪完成,然后再返回。- 请注意,此名称与 LangChain.js 中的环境变量不同,因为 LangSmith 可以在没有 LangChain 的情况下使用。
- 将自定义客户端传递到跟踪的运行中,并将
await这client.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().