AI 软件物料清单 (AIBOM):当采购部门问起时,你的依赖树长什么样
当监管机构、企业客户的采购团队,或者你自己的法务团队第一次要求“向我们展示你们的 AI 依赖树”时,大多数公司的回答通常是一段 Slack 会话。平台频道的某人呼叫模型团队。模型团队呼叫 Prompt 负责人。Prompt 负责人抄送给数据负责人。两天后,一份填了一半的电子表格出现在审计员的收件箱里,里面充满了“待定”单元格和一条脚注:“我们认为这是截至上周的最新数据。”
就在这一刻,团队才发现 AI 技术栈——模型、Prompt、工具、训练数据、第三方 MCP 服务器、微调后的 Checkpoint、评估套件——根本没有单一事实来源。软件供应链合规产生了 SBOM 作为监管机构和客户期望的产物。AI 产品具有类似的暴露面,但 SBOM 的概念仅止于代码依赖。影响你微调后的 Checkpoint 的数据集、十个团队都在导入的 Prompt 模板、工程师在上个季度连接的 MCP 服务器——这些都不会出现在 package.json 中。
解决方案是 AI 软件物料清单(AI Bill of Materials),简称 AIBOM:一份持续更新的、机器可读的 库存清单,记录了你产品依赖的每一个 AI 组件,它是通过自动化检测而非凭记忆生成的。这不只是一个文档编写工作。它正成为“下一个续约周期”时间线上的合同交付项,以及 2026 年 8 月《欧盟 AI 法案》对高风险系统核心义务生效时的合规产物。
为什么 SBOM 的概念无法涵盖 AI
SBOM 是为代码设计的:库、版本、许可证、漏洞。其模型是“哪些二进制文件进入了此次构建,其中哪些具有已知的 CVE”。这之所以有效,是因为软件行为是由代码决定的。
但 AI 系统并非如此。前沿模型的行为取决于其训练数据、训练后的处理程序、分词器(tokenizer)、随附的系统 Prompt、你设置的 Temperature、你连接的工具、它查询的检索语料库,以及你指定的版本锁定——如果你指定了的话。这些都不在你的依赖清单中。一个仅捕获推理服务所导入的 Python 包的 SBOM,遗漏了行为的实际来源。
这种差距以具体的方式显现出来。模型提供商发布了一个“小更新”,你的拒绝回复模式一夜之间发生了变化。一个微调数据集包含了来自你的合同未涵盖的许可证桶中的抓取内容。一名工程师添加了一个第三方的 MCP 服务器,而该服务器悄悄地获取了你 CRM 的凭据。一个 Prompt 模板在没有升级版本号的情况下被修改了,导致十个下游功能开始产生不同的输出。传统的供应链工具无法捕获这些情况,因为它们根本不知道 Prompt、数据集或模型 Checkpoint 的存在。
这就是为什么标准组织已经开始采取行动。OWASP AIBOM 项目正在现有的 CycloneDX 1.6 和 SPDX 3.0 模式之上构建开源实现,这两者现在都有专门针对 AI/ML 的组件类型。CycloneDX 规范——最近作为 Ecma 国际标准 ECMA-424 发布——支持将 AI/ML-BOM 作为与 SBOM 和 SaaSBOM 并列的一等文档类型。SPDX 3.0 增加了 AI 配置文件,以捕获模型元数据、训练数据引用和评估结果。格式之争基本已经尘埃落定。团队现在缺少的是生成流水线。
你必须追踪的四个维度
一个有用的 AIBOM 必须覆盖四个维度,而大多数团队至少低估了其中两个。
模型 (Models):生产环境中的每一次模型调用,包括提供商、模型 ID、锁定的版本以及调用它的功能。这听起来很简单,直到你意识到“锁定版本”在多少情况下其实只是“提供商当前的 latest 别名”。我最近交谈过的一个团队发现,生产环境中同时运行着三个不同版本的同一个 Claude 模型,因为三个不同的服务是在不同时间部署的,且都没有锁定版本。他们的 AIBOM 缺少一行“跨服务的版本漂移”。当他们滚动注册表时,其中两个功能出现了他们此前未曾追踪的可测量行为差异。
提示词 (Prompts):每一个系统 Prompt、每一个模板化的用户 Prompt、每一个助手预填(assistant pre-fill)。这些需要 ID、版本历史和明确的负责人。需要负责人的原因是 Prompt 已成为关键的业务逻辑,但在组织中没有明确的归属——有时归产品部门,有时归工程部门,有时两者都不归。如果没有负责人,变更管理就变成了“谁最后修改的就归谁” 。一个真正的 Prompt 注册表会将这些存储为配置而非代码,并配备像数据库迁移一样的 Git 式 Diff 对比和 CI 门禁。MLflow 的 Prompt 注册表、LaunchDarkly 的 Prompt 管理以及 Vertex AI 的 Prompt 注册表都趋向于同一种形态:将 Prompt 作为版本化的、环境晋升的产物。
工具 (Tools):每一个函数调用工具、每一个 MCP 服务器、每一个 Agent 可以访问的插件。能力范围(只读?写入?哪些资源?)、身份验证路径、弃用状态。这就是影子 AI(shadow AI)存在的地方。一次企业库存普查发现官方名单上有 150 个 Agent,而实际部署的超过 500 个。另一项针对 2240 万条企业 Prompt 的审计识别出企业环境中存在 665 种不同的生成式 AI 工具——其中大多数未经授权。如果你的工具注册表只是 tools.py 中的一个对象数组,那么你根本没有注册表。
数据集和 Checkpoint (Datasets and checkpoints):每一个训练集、每一个微调数据集、每一个检索语料库、每一个评估集。溯源信息、许可证、最后更新时间戳,以及它产出的 Checkpoint。针对广泛使用的微调数据集血统的研究发现,许可证误分类率超过 50%,许可证信息遗漏率超过 70%。如果你在一个许可证分类错误的数据集上进行微调,你的模型就会带着一个你看不到的问题发布——而且如果没有将 Checkpoint、数据集和许可证关联起来的 AIBOM,你就无法修复它。
团队常犯的错误是将这四者视为四个独立的电子表格。但它们不是。一个生产环境中的 AI 功能是这四者的笛卡尔积:这个 Prompt,在那个模型版本上,调用这些工具,针对这个检索语料库。改变其中任何一个,行为都会改变。AIBOM 必须记录这种绑定关系,而不仅仅是零散的部件。
