大模型 Agent 这股火从写代码一路烧到跑流程,烧到今天,有人想过另一个问题吗:BIOS 里面能不能有一个大模型?
技术上当然可以。固件有自己的网络栈,模型在云上,用 HTTPS 就能触达。真正要回答的是另一个更根本的问题:BIOS 里摆一个大模型 Agent,到底能带来什么价值?
我的理解是,它和其他 Agent 在本质上没有区别:用自然语言交互,调用底层工具取数据,做分析,再给出综合结果。换句话说,就像有一个 BIOS 高级工程师坐在你旁边。你这台机器的毛病可以直接问他,他手头还有一堆工具——ACPI、PCI、SMBIOS、内存映射、物理地址转储,随叫随到。这些工具还能用 skill 扩展,类似把做法写成操作手册交给模型,它会自己照着走。碰上超出 skill 和手头工具的问题,他还会自己联网查。
拔高一点来看,高冷生僻的 BIOS 知识从此可以普及化、小白化。不懂固件的人,也能借此对 BIOS 和硬件建立深入认知,不再容易被糊弄,甚至可以对 BIOS 选项进行高级定制。固件工程师同样受益:不用再换另一台机器查资料、模糊 debug,连 Shell 命令都可以模糊调用。
为什么我敢这么说?因为我已经在 BIOS 里引入了大模型,把基础工具做了出来,还能用 skill 扩展,基本功能和使用体验已达到一般 Agent 的水准。它叫 biosllm。我分别以小白和普通工程师的角色体验过,感觉确实有用。更妙的是,工具放在 GitHub 上,大家可以一起尝试,免费、个人非商业用途随便用,不收费、不注册。
在我知道的范围内,它是第一个跑进 BIOS 的大模型 Agent。而且它完美使用了我之前做的 BIOS 中文输入法(见 谁说BIOS没有中文输入法?我做了一个,共享给你!),让中文自然语言与大模型在固件里的交流成为可能。
biosllm 跑起来是下面这样,我整了一个 GIF:

biosllm 功能演示:中文提问、工具调用、作答,约 43 秒。
它是什么,怎么用?
它是一个 UEFI 应用。用固件自己的 SimpleNetwork、TCP4、HTTP、TLS 协议栈去访问大模型接口,用 LVGL 画界面,用 EFI_ACPI_SDT_PROTOCOL、EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL、GetMemoryMap() 这些固件自身的接口取数据。
它把固件的接口做成十三个只读工具交给模型:ACPI 表、PCI 设备树、SMBIOS、EFI 内存映射、任意物理地址的十六进制转储、块设备清单、网卡与 IP 配置、EFI 变量、目录与文本文件,外加 CPUID 和一条默认特权级的 Shell 命令。
这些是模型的内置工具箱,由模型决定调哪个,程序把工具输出回灌给大模型,它再作答。这是典型的 Function Calling 模式,只不过跑在固件环境里。
开机后的欢迎块长这样:

启动界面:版本号、构建时间、模型 id、端点、max_tokens、超时与本机 IP。
电脑小白的利器:一句中文,它自己去调工具
从普通消费者的角度讲,进 BIOS 一般是了解硬件配置、设置 BIOS 选项和启动顺序。这种情况下,普通用户可以直接用中文自然语言查询。
比如问"这台机器什么配置",模型不会凭空回答,它会去读随包的 bios-report 技能,按里面写好的顺序连调 SMBIOS、CPUID、内存映射、PCI、块设备,最后整理成一张表:

一句"硬件信息"触发 bios-report 技能:一个回合里连调多个工具,输出整理成表。图里能看到完整往返——它请求了什么工具、工具返回多少字节,然后才是它的总结。
## 这种符号也会原样显示在屏幕上,因为工具输出里的 Markdown 我没有过滤。这样反而可以让人一眼分清哪句是固件输出、哪句是模型输出。
想知道有什么硬盘连接吗?直接自然语言问。容量、块大小、可移动、只读、整盘还是分区,大模型会调用工具并总结给你。末尾还不忘补一句大模型经典回答:"如果需要分区信息或文件系统内容,请进一步说明。"

dump_disk:两台块设备的容量、块大小与只读标志。
小白常见的经典问题也可以直接问:"如果我要在 BIOS 设置里面设置 VT,一般在哪里能找到?"这种通用问题不需要调工具,它会直接把各家厂商的菜单路径列给你:AMI 走 Advanced → CPU Configuration,Phoenix 走 Advanced → CPU Settings,Insyde 走 Advanced → Processor,有些厂商把它塞在 Security 底下。末尾还给了找不到时的兜底办法。当然,不同大模型的输出会有些差异。

通用性问题不调工具,直接列出各家 BIOS 里 VT 设置的常见菜单路径。
工程师的福音:模糊调用
如果你是工程师,Shell 命令肯定很熟,但时不时还是会忘了命令怎么写。有了 biosllm,你不需要记起命令的具体写法。
比如:"我想看 bus 0 device 1 func 1 的那个 pci 设备"。这句话没有主语,没有格式,甚至中英混着。它听懂之后自己去执行,再把 989 字节的输出翻译成人话:那是 PCI 拓扑中的 00:01.1,一块 IDE 控制器,Intel 出品,编程接口 0x80 表示本机模式。它还加上了一句:"如需查看其完整的配置空间或其他细节,请告诉我具体想查看的寄存器范围。"

一句中文提问,自动执行并解释 PCI 设备的类别、厂商与设备 ID。
ACPI 表也是同理。问一句"acpi 的内容看一下",七张表连同长度、修订版、OEM ID 列出来,它还告诉你 BGRT 来自 Intel 的引导图形资源表:

dump_acpi:七张 ACPI 表的表名、长度、修订版与 OEM ID。
调试时经常用 dh 来查看各种 handle,但通常列出来一大堆,要花时间搜索目标。现在可以用自然语言询问:"dh 和 GOP 相关的 handle",大模型就能理解你的意图,帮你找出需要的数据:

dh 与 GOP 相关的 handle:GraphicsOutput、SimpleTextOut 与 GraphicsConsoleDxe。
物理地址也可以用自然语言查。读 0x1000000 和 0x10000000,它告诉你这 256 字节全是零,属于空闲 RAM 区域;读 0xFFFFFFF0,它说这里不是全零,是可执行代码和数据,位于固件的 ROM/BIOS 区域,也就是 4GB 物理地址空间顶端那块由固件映射的只读区域,还顺手解释了为什么开机指令序列会出现在这个位置。

read_mem:0x1000000 与 0x10000000 处的内容,均判定为空闲 RAM。

read_mem:0xFFFFFFF0 处的 256 字节,判定为固件 ROM/BIOS 区域。
总结一下 biosllm 带来的便利:

同一个问题,两条路:自己敲命令与在 biosllm 里问一句的逐项对照。
特权指令,得你点头
run_command 默认关闭,要设置 "allow_shell": true 才启用。即便如此,每一次执行前都会弹一个确认框,写清要执行的命令是什么,给你三个选择:允许一次、本次会话都允许、拒绝。

run_command 执行前的确认框:列出即将执行的 UEFI Shell 命令。这是现在大模型 Agent 的标准做法,就不展开解释了。
工具箱还能自己扩:Skill 扩展
本 app 自带十三个工具,但真正让它贴合你手头工作的,是技能。技能不执行任何代码,只是一份写给模型看的操作手册。本质上是一件事按什么顺序做、每一步取哪个工具、取不到的时候该怎么办,这样一个用自然语言描述的操作流。
和其他大模型一样,一个技能就是一个目录加一个 SKILL.md。前置段里,name 是技能名,description 是触发条件,也是模型决定要不要用它的唯一依据:
---
name: boot-audit
description: 审计这台机器的启动配置与安全状态(启动项、SecureBoot、SetupMode、启动顺序)。
用户问"它会启动什么""能不能装别的系统""安全启动开了吗"时使用。
---
正文是纯 Markdown:
# 启动审计
这台机器"会怎么启动"不写在磁盘上,也不写在 SMBIOS 里,它在 EFI 变量里。
`read_env` 是唯一能看到它的工具。
## 步骤
1. `read_env`,参数 {"name":"Boot"} —— 拿到全部 Boot#### 启动项与 BootOrder。
2. `read_env`,参数 {"name":"Secure"} —— SecureBoot / SecureBootEnable。
3. `read_env`,参数 {"name":"SetupMode"} —— 为 1 表示平台密钥可写。
步骤、判据、取不到怎么办,都用 Markdown 写清楚。启动时程序读入目录清单写进系统提示词,模型觉得需要时再取全文。所以 Skill 再长也占不了多少上下文。
还有些顺手的小功能
Agent 本身的基本功能我也做齐了。/clear 清空当前会话并删掉存档,/resume 把上次的会话原样接回来,问一半被打断也不怕。输入历史用上下键翻,草稿单独存着,上翻不会把你没发出去的那半句弄丢。Tab 补全斜杠命令和 provider 名,PgUp/PgDn 整屏翻页,滚轮也可以翻页。Ctrl+L 清屏但不动对话,请求中按 Esc 只取消本轮,已经收到的字还留在屏幕上。
想换个模型不必退出程序。/model 列出配置里的全部 provider 并标出当前那个,/model deepseek 就地切换,立即生效,但不改配置文件,重启回到默认值。/ctx 看上下文占了多少,/compact 手动把对话压成一段摘要。
另外 uIME 这个中文输入法,如果觉得它挡住视线了,可以鼠标拖动。
哪里下载,怎么用
发布在 GitHub: https://github.com/MikeWuPing/biosllm ,Releases 里找 v0.1.0.105,这是 Free 版的第一个公开二进制发布。许可为专有软件,Free 版免费授权个人用户用于个人、非商业用途;商业用途与 Pro 版需作者书面授权。
最省事的是那个 zip。解压到 FAT32 U 盘根目录,记事本打开 biosllm.json,把 api_key 换成你自己的,开机从那个盘启动,固件加载 UEFI Shell,startup.nsh 先加载输入法,再进 biosllm。
那张 ISO 留着应急。它可以直接启动、能看界面,不需要先有一个 UEFI Shell 环境,但介质是只读的,盘上的 biosllm.json 里只有一个占位密钥,发不出请求,点发送会返回 401。Secure Boot 打开时请先在固件里关掉,镜像没有签名。
模型侧有三个典型配法:DeepSeek 直连用 deepseek-flash,根证书已随包;想不花钱就用 OpenRouter 的免费池;本地回归可以跑宿主机上的 mock。如果不想自己折腾 API 直连,也可以试试 RouteFast.ai 这类模型 API 中转服务,接入成本会低一些。
说在最后
回到开头那个问题:BIOS 里摆一个大模型 Agent,到底带来什么价值?说实话我想了很久,一直觉得好像没啥用处。直到真正把它做完、用起来,反倒觉得有点意思。大家也可以试试,说不定有意外之喜。如果你对这类 BIOS 与大模型结合的尝试感兴趣,欢迎到 云栈社区 与其他开发者一起讨论。