本帖最后由 云栈大前端 于 2025-12-18 17:37 编辑
Google 发布了开源文件类型检测系统 Magika 1.0。该版本属于一次大幅重写:在能力上引入 AI 覆盖更广的文件类型,在性能与安全性上以 Rust 作为核心实现,以获得更高吞吐与更强的内存安全保障。
Magika 1.0 有什么变化?
支持类型从 100 提升到 200+
Magika 1.0 将可识别的内容类型扩展到 200+,相比此前的 Python 版本(约 100 种)覆盖范围翻倍。
Google 提到,新增类型里有不少是“专门的文本类文件”,过去难以可靠识别,例如:
- Dockerfiles、TOML、HCL、Bazel 文件等
- 多种语言源码:Swift、Kotlin、TypeScript、Dart、WebAssembly、Zig 等
- 数据科学相关文件:Jupyter Notebooks、Numpy arrays、PyTorch models、ONNX files 等(涉及 Python 生态)
识别粒度更细:相近格式可区分
除了新增类型,Magika 1.0 也提升了“细粒度区分能力”,把之前容易被归为同一类的格式拆分开来,例如:
- TypeScript vs JavaScript
- C++ vs C
- TSV vs CSV
数据与模型:3TB 训练集与合成数据补齐
为了覆盖如此多样的格式,工程团队构建了大规模文件格式样本数据集训练专用 AI 模型。训练数据量本身就带来工程挑战:
未压缩训练集增长到 3TB 以上,需要高效的处理流水线。为此使用 SedPack 数据集库,在训练时将数据流式解压并直接送入内存,绕开潜在 I/O 瓶颈,让训练变得可行。
同时,部分“新式、遗留或强专业性”的格式样本占比过低,Google 通过 Gemini 生成合成训练集:把现有代码及结构化文件从一种格式“翻译”到另一种格式,以获得高质量的补充样本。
Google 表示,Magika 在平均 precision 和 recall 上达到约 99%,尤其在文本内容类型上表现优于已有方案。
性能与架构:Rust 核心 + ONNX Runtime + Tokio 并行
Magika 1.0 的另一项关键变化是核心引擎彻底重写,使用 Rust 提升性能并强化内存安全。Rust 引擎也是 Magika CLI 的核心,使其在单 CPU 上就能达到很高的扫描吞吐:
Magika 在单核上可识别每秒数百个文件;借助高性能 ONNX Runtime 推理与 Tokio 异步并行处理,在现代多核 CPU 上可轻松扩展到每秒数千个。

根据 Google 的基准测试,这一方案在 MacBook Pro(M4)上可处理接近 1,000 文件/秒。Reddit 用户 robertknight2 对工作流的拆分做了说明:
Rust 负责从文件中抽取特征向量(只读取少量内容)并用基于 tokio 的循环驱动扫描;真正用于预测文件类型的 ML 推理由 ONNX Runtime 在 C++ 中完成(通过 ort crate 调用)。
需要注意的是:首次加载模型会有一次性开销,但完成加载后,处理可达到 约 5ms/文件,且推理时间基本不随文件大小变化。
为什么这类工具在上传场景很重要?
有观点指出,当文件扩展名缺失、或扩展名不可信(例如文件上传)时,这类“基于内容识别”的工具非常有价值:文件类型更多是约定俗成,但没有统一标准能仅凭外观可靠确定类型,通常只能尝试按某类解码器去读。
安装与使用(CLI)
你可以通过脚本安装 Magika 的命令行工具:
curl -LsSf https://securityresearch.google/magika/install.sh | sh
或安装包含 CLI 的 Python 包:
pipx install magika
来自圈子: 云栈大前端 |