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。这类问题最好一次改到位,反复小改反而容易把原因搅混。
