有时,你需要跨多个服务追踪一个请求。 LangSmith 开箱即用地支持分布式追踪,通过上下文传播标头(langsmith-trace,以及用于元数据/标签的可选 baggage)关联跨服务的追踪运行。 客户端-服务器设置示例:
  • 追踪从客户端开始
  • 在服务器上继续
只接受来自受信任服务的分布式追踪标头。 langsmith-trace 和 baggage 标头会被当作受信任的追踪上下文使用。不要在直接接收不受信任的第三方或公共互联网请求的服务上添加 TracingMiddleware(或将传入请求标头作为追踪的 parent 传入)。请将分布式追踪限制在内部服务间调用,并在网关或代理处移除来自不受信任请求的这些标头。信任来自外部调用方的 baggage 会让对方影响运行记录方式。

Python 中的分布式追踪

然后,服务器(或其他服务)可以通过适当处理这些标头来继续追踪。如果你使用的是 ASGI 应用 Starlette 或 FastAPI,可以通过 LangSmith 的 TracingMiddleware 连接分布式追踪。
TracingMiddleware 类是在 langsmith==0.1.133 中添加的。
使用 FastAPI 的示例:
或者使用 Starlette:
如果你使用的是其他服务器框架,也可以通过将标头传入 langsmith_extra 来“接收”分布式追踪:
上面的示例使用了 tracing_context 上下文管理器。你也可以在使用 @traceable 包装的方法的 langsmith_extra 参数中直接指定父运行上下文。

TypeScript 中的分布式追踪

TypeScript 中的分布式追踪要求 langsmith 版本为 >=0.1.31
首先,我们从客户端获取当前运行树,并将其转换为 langsmith-trace 和 baggage 标头值,然后将这些值传递给服务器:
然后,服务器会将这些标头转换回运行树,并使用该运行树继续追踪。 要将新创建的运行树传递给可追踪函数,我们可以使用 withRunTree 辅助函数,它会确保运行树在可追踪调用中传播。