#7516·opik

[错误]: OpikTracer (与 LangChain 集成) 永远不会清除跟踪状态,内存增长无限

作者: AnastasisB创建于 2026年7月18日更新于 2026年9月17日
标签JC
  • 哪些组成部分受到影响?
  • Opik Python SDK
  • [ Opi克 TypeScript SDK] (英语).
  • Opi克特工 优化者SDK
  • [ Opik UI ] (美国英语)
  • Opik 服务器
  • 文档

QQ Opik 版本

  • Opik版本:2.1.31(截至2026-07-16,Ca22d81ac215d965172286f4f0fe942cbb818c1) -Python: 3.10.12 - (英语).
  • LangChain核: 1.4.9
  • 说明问题

LangChain. Opik Tracer ' 的每笔账面记录中只添加过任何内容,

  • `` span data map'(run id- > Spandata,包括全部即时/完成/工具有效载荷)
  • 已创建 traces data map' (运行 id - > traceData)
  • 已创建的跟踪对象列表
  • 外部创建 traces ids (一组微量标识)
  • ` skipped lagraph root run ids' (一组已运行的编号)
  • XQLanggraph parent span ids' (运行 id - > 父跨 id)

条目在运行时启动( 创建 root trace and span' , + attach span to parent span' , + save span trace data to local maps ) , 并且从未被带出去 。 在 " persist run " 、 " flush() " 或任何近道上没有驱逐。 " opik tracer.py " 中唯一的 " pop " 呼叫是在上下文存储堆上,而不是在这些地图上。

期望:一次建造并用"configQQ"调用回转的追踪器:每一次引用(所记录的图案)的[tracer]}`会释放出追踪状态,当追踪完成后,记忆在稳定的请求率下保持平稳.

实际:每个追踪状态在过程寿命期间都保持固定状态,包括保留Spandata物体所引用的全部即时/完成有效载荷。 因此增长是数据大小的,而不只是输入计算.

在存储器上方, * is opik trace create by This tracer' 和 * is opik span create by this tracer' 在运行启动时扫描这些地图, 因此每个请求的CPU也随着过程的老化而爬升.

我们在生产LangChain服务中击中了这个,每道流有一个长寿命的追踪器. 在50项请求之后,一个单一的追踪器持有了300个XX-span data map的条目,350个XX-create traces data map的条目,50个微量物体和~311 KiB的即时/完成有效载荷字节. 25个要求的检查站拥有所有东西的一半,因此增长严格是线性的,没有限制。 这在1.10.32中衡量,但账簿编码在2.1.31和目前的 " 主要 " 之间没有变化。

复制步骤和代码片段

完全离线再现,没有密钥,也没有网络:Opik客户端是"不"-op假,LLM是"假ListLM". 与"opik=2.1.31","LangChain-core=1.4.9"运行:

8zz
""Repro: opik. 整合. LangChain. Opik Tracer从不逐一逐一驱逐".

从类型导入简单Namespace


类( F):
log  start  trace span = 虚假


类( F):
""不 -op站立为opik。 Opik:吸收微量/散射的呼声。"

配置 =   假配置 ()

def 内部  api  trace (本身, ** kwargs) :
返回简单Namespace(id=kwargs.get ("id"))

df  内部  api  span ( 自, ** kwargs) :
无

def 冲号( 自定义) :
通过


{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}在一切构建之前注入假的
. . . . . . .