在无服务器环境中跟踪 JS 函数
注意
本节适用于使用 LangSmith JS SDK 0.2.0 及更高版本的人员。如果您在无服务器环境中使用 LangChain.js 或 LangGraph.js 进行跟踪,请参阅本指南。
在跟踪 JavaScript 函数时,LangSmith 默认会在后台跟踪运行以避免增加延迟。在无服务器环境中,执行上下文可能会突然终止,因此在函数完成之前确保所有跟踪数据正确刷新非常重要。
为确保这一点,您可以选择
- 将名为
LANGSMITH_TRACING_BACKGROUND
的环境变量设置为"false"
。这将使您的被跟踪函数在返回之前等待跟踪完成。- 请注意,这与 LangChain.js 中的环境变量的命名不同,因为 LangSmith 可以独立于 LangChain 使用。
- 将自定义客户端传入您的跟踪运行中,并
await
client.awaitPendingTraceBatches();
方法。
以下是与traceable
方法一起使用 awaitPendingTraceBatches
的示例
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()
。