关于 instrumenting-with-mlflow-tracing
instrumenting-with-mlflow-tracing 是用于为应用配置和核验 MLflow tracing 的技能,涵盖框架集成、手动 span、追踪读取和超时约束。它强调沿用现有后端与目标,并核实已持久化的应用追踪。
主要功能
- 01检查运行环境与追踪目标
- 02配置匹配的框架追踪
- 03为关键应用操作添加 span
- 04运行请求并保存追踪 ID
- 05限时读取并检查持久化追踪
适用场景
- 01为应用请求捕获 LLM 与工具调用
- 02检查检索和路由步骤的追踪
- 03验证 Databricks 上的追踪读取
- 04遇到权限或仓库超时时报告未验证结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mlflow/ skills --skill instrumenting-with-mlflow-tracing安装后在 Claude Code 中输入/instrumenting-with-mlflow-tracing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-patterns.mddatabricks.mddistributed-tracing.mdfeedback-collection.mdproduction.mdpython.mdroot-span-previews.mdtypescript.md详细介绍
埋点 MLflow 跟踪
复用有效的跟踪来进行调查或评估。
前提条件
- 检查入口点、语言/框架、SDK 版本、跟踪 URI、实验和部署身份。
- 保留目标位置和提供方。显式应用目标会覆盖继承的环境值;助手遥测可能使用另一个实验。
- 根据运行时阅读 Python 或 TypeScript。
第 1 步:检查目标位置(仅限 Databricks)
对于 OSS 或 SageMaker,保留已配置的后端并继续执行第 2 步。
- 编辑前阅读 UC 设置;验证身份验证和工作区。
- 复用显式指定的目标位置;否则,在预配前确定架构选项。
- 自动发现可访问的数据仓库。默认使用 UC;只有在明确请求时才使用旧版存储。
第 2 步:启用框架跟踪
- 在执行前启用对应的集成。LangGraph 使用
mlflow.langchain.autolog(),而不是mlflow.langgraph.autolog()。 - 不要再次包装已自动跟踪的节点、工具或模型。仅对未捕获的工作或外层应用边界使用手动 span。
第 3 步:捕获应用工作
- 跟踪有意义的根、LLM、检索、工具、路由和外部 I/O(文件/队列)。 跳过工具函数、配置和日志噪声。
- 对手动 span 显式捕获实际相关的输入/输出;导出前进行脱敏。
第 4 步:运行一个请求
- 运行一个有代表性的请求;记录开始和结束的纪元毫秒时间戳。
- 在进程内立即保存其跟踪 ID:Python 中使用
mlflow.get_last_active_trace_id();TypeScript 中使用活动 span 的 ID。 - 在回读前将跟踪 ID 写入文件或捕获的标准输出;如果进程被取消,则保留该 ID。 不要为了找回 ID 而重新运行。
验证
-
获取一条已持久化的应用跟踪,而不是本地 span 或旧跟踪。
-
为回读设置 60 秒的实际运行时间进程截止时间,包括刷新、SDK 重试、请求和退避。 到期后终止,除非用户明确要求进行更深入的故障排查。
-
工具执行超时/线程等待超时不会取消调用。若无法取消,请说明未执行后端验证。
-
刷新一次(
mlflow.flush_trace_async_logging()/await mlflow.flushTraces());获取已保存的 ID。 -
如果没有 ID,则在已配置的实验中搜索一次,并设置运行时边界、
max_results=1,且包含 spans。 -
每次 UC 搜索都需要
trace.timestamp_ms;结果数量上限不会限制扫描范围。Python 的search_traces()没有start_time关键字参数。
对于 Python 回读,请根据已保存的运行值调整此配方,并在外部强制执行截止时间:
mlflow.flush_trace_async_logging()
if trace_id:
trace = mlflow.get_trace(trace_id)
else:
traces = mlflow.search_traces(
locations=[experiment_id],
filter_string=(f"trace.timestamp_ms >= {run_start_ms} "
f"AND trace.timestamp_ms <= {run_end_ms}"),
max_results=1, return_type="list", include_spans=True,
)
trace = traces[0] if traces else None
assert trace is not None, "No persisted trace read back"
assert run_start_ms <= trace.info.request_time <= run_end_ms
assert trace.data.spans, "No spans captured"
-
检查预期的根/图、模型、检索和工具 span,以及实际 I/O。确认是应用的请求,而不是评分器或助手遥测。
-
根据返回的元数据检查实验/位置;如果没有实验 ID,则检查已绑定的 UC 位置。
-
复用返回的 spans;成功后停止。可用的
agent-evaluation/scripts/validate_tracing_runtime.py脚本可以在相同截止时间内替代此检查,但不要再额外执行一次审计。 -
只有在原定时间预算内出现明确且快速的修复方案时,才最多重试一次。
-
遇到提供方密钥缺失、身份验证/权限错误、数据仓库超时或
RESOURCE_EXHAUSTED/429 时停止。 -
不要并行搜索、重复运行 Agent、直接执行 UC SQL、调用原始 REST、使用替代凭据或回退到其他数据仓库。
-
报告操作/错误、已捕获的 ID、成功项和未验证结果。请求缺失的前提条件,不要索要密钥。
-
如果后端验证受阻,保留埋点更改;在跟踪验证通过前暂停评估。
返回已验证的跟踪 ID/链接和观察到的 spans。对于 Databricks,请使用已验证跟踪的 URL 规则,不要只提供实验链接。不要将未经验证的链接标记为证明。