用途:把 MLflow 轨迹转换为规范 ATIF,每个 trace 生成一个所有者私有的 .atif.json 文件,并只打印不含内容的摘要,供 Harbor 或 Eval Author 审计覆盖使用。此转换不经过 Intake;如需共享的归一化 span 证据,应改用 NeMo Compass 摄取及可选的 scripts/load_mlflow_trace.py,其输出不是 ATIF,也不能替代该转换与下游校验契约。
主要能力:从根 span 或 trace 输入恢复人类指令(无则失败,不虚构);把 LLM span 输出为 agent 步骤并保留 MLflow 记录的模型与 token 指标;把 tool、retriever、embedding、reranker、guardrail span 输出为带配对工具调用与观察的确定性 agent 步骤;按时间戳展平 span 树,同时在命名空间 mlflow 元数据下保留原始 ID、父 ID、属性、事件、状态与评估;在 extra.mlflow_to_atif.normalization_codes 记录时间单位归一化,在 extra.mlflow_to_atif.loss_codes 记录已知有损投影,并在 extra.mlflow.output_state 区分缺失、显式 null 与有值工具输出。拒绝未解析父节点、环和含非空 next_page_token 的导出页。输出 ATIF v1.7;v1.8 增加音频内容部分,但本转换仅投影文本与 JSON,因此 v1.8 不增加所需表示,不要将 v1.7 输出标为 v1.8。
使用方式:离线转换用 python scripts/convert_mlflow_to_atif.py --input <private-export.json> --output-dir <private-atif-dir> --agent-name <stable-agent-name> --agent-version <agent-version>。实时存储需显式 experiment 与有界时间范围,使用已具备 MLflow 的环境,不代为安装或更改认证:--tracking-uri、--experiment-id、--since、--until。远程 tracking 服务器要求 HTTPS,HTTP 仅限 loopback,拒绝禁用 TLS 校验,不跟随 HTTP 重定向,使用分页 MlflowClient.search_traces()。已有轨迹除非显式要求替换同一转换并加 --overwrite,否则拒绝覆盖。可用 --validate-with-harbor(需已装 Harbor)。
适用场景与限制:需要将受限 MLflow trace 转换为规范 ATIF 并交由下游消费者时使用。源文件与转换后文件默认按受限数据处理,输出目录权限 0700、轨迹文件 0600,不要打印载荷、放入 Git 或写入公共/共享目录。离线需 Python 3.11+ 与完整本地 Trace.to_dict() 导出;实时还需 MLflow、所选存储访问、experiment ID 与显式时间界限。限制:仅投影文本与 JSON 到 ATIF v1.7 并保留已知损失,无法恢复未记录的人类输入、工具输出或多媒体;转换不证明任务正确性或覆盖度;实时读取限定于给定 experiment 与时间范围且不更改认证。故障处理:缺人类指令应获取完整导出而非虚构;next_page_token 非空须先收齐分页;父节点未解析或成环应获取一致导出而非删 span;TLS/重定向被拒应使用授权 HTTPS 且开启校验,HTTP 仅限 loopback;输出已存在应换目录,仅在明确要求替换同一转换时用 --overwrite。