写点什么

Magika 1.0:基于 Rust 与 AI 的更智能、更高速文件类型识别

  • 2025-12-22
    北京
  • 本文字数:1456 字

    阅读完需:约 5 分钟

大小:685.80K时长:03:54
Magika 1.0:基于 Rust 与 AI 的更智能、更高速文件类型识别

谷歌刚刚发布了 Magika 1.0 版本,这是其开源文件类型检测系统的一次重大重写。新版本引入了 AI 技术,以支持更广泛的文件类型,并使用 Rust 实现以获得更高的性能和安全性。

 

Magika 1.0 支持的文件类型数量已超过 200 种,相比此前基于 Python 的版本(约 100 种)实现了显著提升。

 

谷歌指出,新增的许多文件类型都是此前难以识别的、较为专业的文本类格式,包括 Dockerfile、TOML、HCL、Bazel 文件等。Magika 1.0 还能够区分使用 Swift、Kotlin、TypeScript、Dart、WebAssembly 以及 Zig 编写的源代码文件。此外,它也支持数据科学领域常见的文件类型,例如 Jupyter Notebook、NumPy 数组、PyTorch 模型、ONNX 文件等。

 

除了覆盖更广的文件类型范围外,Magika 1.0 还提供了细粒度更高的识别能力,能够区分过去常被归为一类的相似格式,例如 TypeScript 与 JavaScript、C++ 与 C、TSV 与 CSV 等。

 

为了让工具能够识别如此多样的格式,谷歌的工程师们构建了一个规模庞大的文件格式样本数据集,用于训练专用的 AI 模型,其数据规模本身就构成了一项挑战:

我们的训练数据集在未压缩状态下增长到了 3TB 以上,这对处理流程提出了很高的效率要求。为此,我们使用了近期发布的 SedPack 数据集库。该工具允许在训练过程中将大规模数据集直接流式传输并解压到内存中,从而绕过潜在的 I/O 瓶颈,使整个过程成为可能。

 

与此同时,一些较新的、遗留的或高度专业化的格式在数据集中明显样本不足。谷歌通过 Gemini 来解决这一问题,利用其“将现有代码和其他结构化文件从一种格式转换为另一种格式”,生成高质量的合成训练数据。

 

谷歌表示,Magika 在平均精确率和召回率上都达到了约 99%,在文本类内容的识别上的表现明显优于现有方案。

 

Magika 1.0 的另一项重要优势在于其核心系统被完全重写:采用 Rust 实现,在最大化性能的同时提升了内存安全性。这个基于 Rust 的新引擎是 Magika 命令行工具的核心,使其能够在单个 CPU 上每秒扫描数百个文件:

借助高性能的 ONNX 运行时进行模型推理,以及使用 Tokio 实现异步并行处理,Magika 可以在单核 CPU 上每秒识别数百个文件,并在现代多核处理器上轻松扩展到每秒数千个文件。

 


根据谷歌的基准测试结果,这种方案使得在一台 MacBook Pro (M4) 上几乎可以达到每秒处理 1,000 个文件的速度。Reddit 用户 robertknight2 对该工作流的解释是:

在这个流程中,Rust 负责从文件中提取特征向量,只使用内容的一小部分,并通过基于 Tokio 的循环来驱动扫描过程。而基于这些特征预测文件类型的机器学习推理,则是由 ONNX 运行时使用 C++ 实现的(通过 ort crate 调用)。

 

该工具在首次加载模型时会产生一次性的性能开销,但之后每个文件的处理时间约为 5 毫秒,而且推理时间几乎不随文件大小变化。

 

尽管有人对 Rust 的采用持保留态度,但 X 用户 Caleb Maclennan 指出,“在需要通过启发式方式猜测如何处理输入的场景下,其安全的影响使得 Rust 成为一个很好的选择”。另一位用户 Mazzarito 补充道:

当文件扩展名缺失,或者在文件上传等场景下扩展名不可信时,这类程序其实非常有价值。文件类型本质上只是约定俗成的规则——而除了尝试用相应的解码器去读取文件之外,并不存在一种标准的方法可以确定文件的真实类型。

 

你可以通过执行以下命令来安装 Magika 的命令行工具:

curl -LsSf https://securityresearch.google/magika/install.sh | sh
复制代码

 

或者通过安装包含 CLI 工具的 Python 包来使用:

pipx install magika
复制代码

 

原文链接:

https://www.infoq.com/news/2025/12/magika-rust-file-type-detector/

2025-12-22 11:301

评论

发布
暂无评论

适合初学者的Web Components教程[2019](译)

西贝

Java Web Component 组件

过滤Spark数据集的四种方法

大数志

大数据 spark 数据分析 数据科学

在历史的天空重逢!大话鲲鹏上海记

脑极体

8.6非阻塞网络I/O

张荣召

va_list 可变长参数原理

liu_liu

c 可变参数 va_list

训练营第4周作业

爱码士

训练营

第5周 技术选型(一)-作业

SuGeek

极客大学架构师训练营

架构师训练营第 1 期 第 8 周作业

李循律

极客大学架构师训练营

面试官:Redis 主从复制时网络开小差了怎么整?

redis 学习 面试

每个程序员都应该知道的数字

多颗糖

数据库 计算机基础 存储

Java 集合(4)-- iterable和iterator异同分析

秦怀杂货店

Java Iterator和Iterable 集合 iterable

第 4 周作业

Steven

极客大学架构师训练营

超赞!吃透这份Github点赞120k的Java知识面试笔记Offer拿到手软

比伯

Java 编程 程序员 架构 面试

【薪火计划】02 - 一将功成万骨枯

码上生长

管理

高性能-Nginx多进程高并发、低时延、高可靠机制在百万级缓存(redis、memcache)代理中间件中的应用

gmoy-tencent

nginx memcached 分布式缓存 redis cluster 分布式数据库mongodb

Java集合(3)-- iterable接口超级详细解读

秦怀杂货店

Java 源码 Iterator和Iterable 集合 iterable

SpringBoot系列(5)- 自定义配置

引花眠

springboot

高可用可伸缩微服务架构:基于Dubbo、SpringCloud和ServiceMesh完整蓝光版PDF分享

Java架构追梦

Java 微服务 dubbo Service Mesh SpringCloud

Spring改变版本号命名规则:此举对非英语国家很友好

YourBatman

Spring Boot 语义化 Spring Framework 日历化

flink-sql流计算可视化UI平台

无情

sql flink 实时计算 平台

限流、熔断与降级

idonkeyliu

后台开发 熔断 限流 降级

8.5网络通信基本原理与性能优化

张荣召

架构师训练营 1 期 - 第八周总结(vaik)

行之

极客大学架构师训练营

训练营第四周学习总结

爱码士

训练营

Java 集合(5)-- Collections源码解析

秦怀杂货店

Java 集合 Collections

【干货】内存条的基础讲解,够用绝大多数情况

亚兰—硅的传奇official

计算机基础 内存 装机 硬件

我画着图,FluentAPI 她自己就生成了

newbe36524

C# .net .net core netcore

Java集合(1)-- 俯瞰Java集合源码以及分类

秦怀杂货店

Java 源码 Iterator和Iterable JAVA集合

学习总结--week08

张荣召

机器学习的产业化变革中,华为云ModelArts的新成绩单

脑极体

Java集合(2)-- Iterator接口超级详细解读

秦怀杂货店

Java 源码 Iterator和Iterable 集合 Iterator

Magika 1.0:基于 Rust 与 AI 的更智能、更高速文件类型识别_Google_Sergio De Simone_InfoQ精选文章