Python
以下概述了使用 Python 构建时导致追踪“分裂”的常见原因。使用 asyncio 的上下文传播
在 Python 版本 < 3.11 中使用异步调用(尤其是流式调用)时,可能会遇到追踪嵌套问题。这是因为 Python 的asyncio 仅在 3.11 版本中才完全支持上下文传递。
原因
LangChain 和 LangSmith SDK 使用 contextvars 隐式传播追踪信息。在 Python 3.11 及以上版本中,这可以无缝工作。然而,在较早版本(3.8、3.9、3.10)中,asyncio 任务缺乏适当的 contextvar 支持,可能导致追踪断开。
解决方法
- 升级 Python 版本(推荐) 如果可能,升级到 Python 3.11 或更高版本,以获得自动的上下文传播。
-
手动传播上下文 如果无法升级,您需要手动传播追踪上下文。具体方法取决于您的设置:
a) 使用 LangGraph 或 LangChain 将父级
config传递给子调用:b) 直接使用 LangSmith 直接传递运行树:c) 将装饰代码与 LangGraph/LangChain 结合使用 结合使用多种技术进行手动传递:
使用线程的上下文传播
通常,在启动追踪后,可能希望在一个追踪内对子任务应用某种并行处理。Python 标准库的ThreadPoolExecutor 默认会破坏追踪。
原因
Python 的 contextvars 在新线程中初始为空。以下是两种保持追踪连续性的方法:解决方法
-
使用 LangSmith 的 ContextThreadPoolExecutor
LangSmith 提供了
ContextThreadPoolExecutor,可自动处理上下文传播: -
手动提供父运行树
或者,您可以手动将父运行树传递给内部函数:
在这种方法中,我们使用
get_current_run_tree()获取当前运行树,并通过langsmith_extra参数将其传递给内部函数。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

