关于 mlflow-trace-instrumentation
用于为 Python 和 TypeScript 应用添加并验证 MLflow 跟踪的技能,涵盖插桩选择、跟踪捕获和限时后端验证,并保留已配置的目标位置。
主要功能
- 01检查运行时、SDK 和跟踪设置
- 02按框架启用跟踪
- 03捕获应用及 I/O 跨度
- 04保存跟踪 ID 供读取
- 05在时限内验证已持久化跟踪
适用场景
- 01评估前为应用添加插桩
- 02调查代表性应用请求
- 03检查跟踪导出和持久化跨度
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mlflow/ skills --skill mlflow-trace-instrumentation安装后在 Claude Code 中输入/mlflow-trace-instrumentation确认已加载。
包含的文件
除 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 步:运行一次请求
- 运行一个有代表性的请求;记录开始和结束的 epoch 毫秒时间戳。
- 在进程内立即保存其追踪 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,并包含 Span。 -
每次 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 位置。
-
复用返回的 Span;成功后停止。
-
仅在原始时间预算内进行一次重试,且须先找到明确的快速修复方法。
-
如果缺少提供方密钥、出现身份验证/权限错误、数据仓库超时或
RESOURCE_EXHAUSTED/429,则停止。 -
不要并行搜索、重复运行 Agent、直接执行 UC SQL、使用原始 REST、改用其他凭据或回退到其他数据仓库。
-
报告操作/错误、捕获的 ID、成功项和未验证结果。请求缺少的前提条件,不要索要密钥。
-
如果后端验证受阻,保留插桩变更;在追踪得到验证前暂停评估。
返回已验证的追踪 ID/链接及观察到的 Span。对于 Databricks,请使用已验证追踪 URL 规则,不要使用仅指向实验的链接。不要将未验证的链接称为证据。