LangChain 0.2 的链式调用在 LangSmith 里显示成两条独立 trace,子链的 parent_run_id 是空的,检索节点和生成节点串不起来。

一开始怀疑是「只在一个进程里开了追踪开关」,查了一圈,方向不对。

把日志和配置对完,能解释这个现象的基本就这几处。子链跑在线程池里 上下文没有透传。还有一种是手动创建 run 时没有传 parent。

还有一种情况,异步任务没有 await 导致提前结束。

第一件事是把 run 的父子字段打出来

python -c "from langsmith import traceable;print('run ok')"

异步场景沿用同一个 contextvar

python ctx_util.py --copy-context

手动 run 显式传 parent_run_id

python patch_run.py --with-parent

末了重跑链式调用看树结构

python chain.py --trace --n 3

同事提醒我看一下最近一次发布,时间点确实对得上。

命令输出我都留了记录,免得改完记不清原来的值。

改之前先确认了最近有没有人动过配置,避免白查一遍。

改完先别撤,确认这几项。一次请求只产生一条根 trace,子节点层级完整,检索与生成在同一棵树下。

补一句。跨线程要显式传递上下文,线程池不会自动继承父 span。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189