在无服务器环境中跟踪 JS 函数
笔记
本节适用于使用 LangSmith JS SDK 0.2.0 及更高版本的用户。 如果您在无服务器环境中使用 LangChain.js 或 LangGraph.js 进行追踪,请参阅 本指南。
在追踪 JavaScript 函数时,LangSmith 默认会在后台追踪运行过程,以避免增加延迟。 在无服务器环境中,执行上下文可能会被突然终止,因此必须确保函数完成前所有追踪数据均已正确刷新。
为确保此操作发生,您可以选择以下任一方式:
- 设置一个名为的环境变量
LANGSMITH_TRACING_BACKGROUNDto"false"这将导致您的被追踪函数在返回前等待追踪完成。- 请注意,此名称与 LangChain.js 中的环境变量不同,因为 LangSmith 可以在不依赖 LangChain 的情况下使用。
- 将自定义客户端传入您的追踪运行,并调用
client.awaitPendingTraceBatches();方法,其中await为参数。
以下是一个将 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():
try {
await myTracedFunc();
} finally {
await langsmithClient.flush();
}
请注意,这将阻止运行记录显示在 LangSmith 用户界面中,直到您调用 .flush()。