[错误]: OpikTracer (与 LangChain 集成) 永远不会清除跟踪状态,内存增长无限
- 哪些组成部分受到影响?
- 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"运行:
""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}在一切构建之前注入假的
. . . . . . .内容来源: comet-ml/opik