洞察 AI 的视觉:针对图像、音频和文件的多模态追踪
你的智能体可以分析图像、转录音频并处理 PDF。但当出现问题时,追踪记录中往往只剩下晦涩难懂的 base64 字符串:JSON 中埋藏着数兆字节的 iVBORw0KGgo...。你可以看到发送了图像,但无法看到图像内容;你可以看到返回了音频,但无法播放。而且,每一条这样的超大字符串都会直接存储在你的追踪数据库中,不仅占用了大量存储空间,还拖慢了查询速度。
今天,我们宣布在 MLflow 中正式推出多模态追踪功能。二进制内容将从追踪记录中自动提取,高效地存储为工件(Artifacts),并直接在 UI 中按模型所见的形式渲染出来。

为什么纯文本追踪存在局限性
随着大模型应用超越文本范畴(视觉模型分析照片、音频模型转录通话、智能体生成图像),三个问题随之加剧:
- 数据库臃肿:单次图像生成响应会将约 1.8MB 的 base64 内容直接嵌入 span JSON 中。在成千上万条追踪记录中,这意味着数 GB 的二进制数据存储在你的跟踪数据库中,而这些数据本不应存在于关系型存储中。
- 查询与 UI 缓慢:加载追踪列表意味着要抓取所有内嵌的二进制数据。这会导致追踪搜索变慢、UI 卡顿,使得浏览生产环境的追踪记录变得异常痛苦。
- 盲目调试:当视觉模型误分类图像时,你需要看到图像与模型响应的对比,而不是一堆编码后的字节墙。纯文本追踪让多模态调试变得不可能。
多模态追踪解决了以上三个问题。
工作原理
当 MLflow 在 span 中检测到二进制内容时,它会提取这些字节并将其存储在你现有的工件存储中(S3、Azure Blob、GCS、DBFS 或本地文件系统),这与 MLflow 存储模型工件的方式相同。span 只保留一个轻量级的引用 URI,因此追踪数据库保持精简,查询速度得以维持。当你打开追踪记录时,UI 会按需获取并渲染这些二进制内容。

自动提取:零代码变更
如果你已经在使用 OpenAI、Anthropic、Gemini、Bedrock 或 LangChain 的 MLflow 自动记录功能,多模态追踪开箱即用。无需修改代码,无需任何配置。MLflow 会自动检测并提取二进制内容。
import mlflow
import openai
mlflow.openai.autolog()
client = openai.OpenAI()
# Image data is automatically extracted, no code changes needed
response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_b64}"}},
],
}],
)
MLflow 可识别各提供商的 8 种多模态数据模式
| 模式 | 提供商 | 内容类型 |
|---|---|---|
数据 URI (data:image/png;base64,...) | 全部 | 图像、音频 |
input_audio | OpenAI | 音频输入 |
b64_json | OpenAI | 生成图像 |
音频输出 (audio.data) | OpenAI | 音频响应 |
| Anthropic 图像块 | Anthropic | 图像 |
| Bedrock 图像格式 | AWS Bedrock | 图像 |
Gemini inline_data | Google Gemini | 图像、音频 |
Responses API image_generation_call | OpenAI | 生成图像 |
自定义内容的手动附件
对于无法通过自动记录流程的内容(PDF、自定义文件类型或你自行生成的图像),请使用 Attachment 类
import mlflow
from mlflow.tracing.attachments import Attachment
with mlflow.start_span(name="analyze_document") as span:
pdf = Attachment.from_file("report.pdf")
span.set_inputs({"document": pdf, "question": "Summarize the key findings"})
span.set_outputs({"summary": "Q3 revenue was $4.2M, up 18% YoY..."})
Attachment 对象会获得与自动提取内容相同的处理:二进制数据存储为工件,而 span JSON 中仅包含引用 URI。
追踪 UI 中的富渲染
多模态追踪可同时在摘要 (Summary) 和 详情与时间轴 (Details & Timeline) 视图中渲染
- 图像显示为紧凑的缩略图。点击可展开为全屏预览。
- 音频可使用标准浏览器音频控件直接播放。
- PDF 在嵌入式查看器中渲染。
- 其他文件类型显示为下载链接。
聊天视图同样支持多模态内容内嵌渲染。视觉模型输入会显示图像与文本提示词的对比,音频响应在转录文本下方包含可播放的音频组件。
入门
多模态追踪功能现已集成于 MLflow 3.11+ 版本。开始在追踪中捕获多模态内容:
- 升级 MLflow:
pip install --upgrade mlflow - 启用自动记录: 为你的提供商启用自动记录功能(
mlflow.openai.autolog(),mlflow.anthropic.autolog()等)。多模态提取将自动完成。 - 查看追踪: 在 MLflow UI 中查看追踪。图像、音频和文件将直接内嵌渲染。
有关手动创建附件以及支持模式的完整列表,请参阅 多模态内容与附件文档。
如果你觉得有用,请在 GitHub 上为我们点个星:github.com/mlflow/mlflow ⭐️
