清华 Agent libOS 深度技术拆解:8000 字吃透 AI 智能体的“操作系统“级安全设计
引子:为什么这篇文章是 2026 年 AI 智能体最重要的研究
做 AI 智能体日报 4 年,我读过 ReAct、AutoGPT、LangGraph、CrewAI、MetaGPT、OpenAI Operator、Anthropic Claude Code、Google A2A 协议……
但从来没有一篇论文像清华 Agent libOS 这样,把"AI 智能体"当成"进程"来设计。
它解决的是一个朴素的问题:
"当你叫一个 AI 助手帮你整理文件,你当然希望它只动你允许它动的那一个文件夹,而不是在你毫不知情的情况下把整个硬盘翻了个底朝天。更重要的是,如果它准备删掉某个重要文件,你希望它先来问你一声,而不是直接动手。"
听起来很基础对吧?但所有主流 AI 智能体框架(ReAct / AutoGen / MetaGPT / LangGraph)都没做到。
- ReAct 把工具当作"工具箱",AI 模型自由挑选,自由调用——没有权限边界。
- AutoGen 的"对话循环"虽然可以人为加 check,但没有内建的权限系统。
- MetaGPT 用 SOP 拆分角色,但每个角色内部仍是黑盒执行。
- LangGraph 的状态机图可以加 check,但检查逻辑写在业务代码里,不是基础设施。
这些框架的共同问题是:"工具可见性"和"资源权限"是同一条线——AI 模型能看到"写文件"工具,就等于能写任何文件。
Agent libOS 的核心原则是一句话:
"工具是类 libc 的包装器;运行时原语才是权力边界。"
意思是:AI 模型能看到什么工具 ≠ 它被允许做什么事。看到"写文件"工具,不等于有权限往任何地方写文件。
这是把 70 年代计算机操作系统的"库操作系统"(library OS)设计经验,扬弃到 AI 智能体运行时的范式跃迁。
而且——这不是理论。它有 123 个回归测试用例(截至论文撰写时),覆盖了"工具可见性≠资源权限""命名空间隔离""按次审批""JIT 工具沙箱"等所有关键安全属性。任何独立实验室都可以复现并尝试证伪。
这正是波普尔"可证伪性"在 AI 基础设施层的范本。
下面我用 8000 字 + 7 大哲学思维框架,逐层拆解这篇文章。
第一章:现有 AI 智能体框架的根本问题是什么
1.1 当前 AI 智能体是怎么工作的
要理解 Agent libOS 解决了什么问题,先得弄清楚现有 AI 智能体框架是怎么工作的。
目前绝大多数 AI 智能体框架的工作方式,可以用一个简单的画面来描述:
AI 模型坐在一张桌子旁边,桌上摆着一套"工具箱",每个工具都有一张说明卡,上面写着"这个工具能帮你写文件"、"那个工具能帮你运行命令"。AI 模型看到任务,挑一个工具,调用它,拿到结果,再继续。
这个过程被称为"对话循环"(chat loop),是 ReAct、AutoGen、MetaGPT 等主流框架的共同基础。
这套方法的麻烦在于:
工具说明卡上写的"能帮你做什么",和工具背后真正能触碰哪些资源,往往是同一条线——中间没有任何隔离。
换句话说:
如果 AI 模型能"看到"一个叫"写文件"的工具,那么这个工具背后的代码就可能直接往你的硬盘上随便写东西。
这就好比你雇了一个保险柜管理员,告诉他"你可以开锁",结果他手里拿着的钥匙能开整栋楼所有房间的锁,而你以为他只能开那一间。
1.2 间接提示注入攻击
更严重的是,在一些攻击场景下,恶意文件或网页里的内容可以"注入"指令,欺骗 AI 模型去做它本不该做的事。这被称为"间接提示注入攻击"(Indirect Prompt Injection Attack)。
如果 AI 智能体的工具权限没有被严格限制,这种攻击就能造成真实的危害。
论文明确指出:
"现有框架里,确认提示可能围绕着工具包装存在,但真正触碰宿主资源的底层操作几乎从来不是策略边界——这一点在长期运行、权限随时间变化的智能体场景下尤为脆弱。"
1.3 为什么"自检 + 后处理"不够
你可能会想:"让 AI 模型自己检查一下不就行了?"
不够。原因是:
- AI 模型的判断是概率性的,不是确定性的
- 间接提示注入可以欺骗 AI 模型让"自检"通过
- 后处理审计只能事后发现,不能事前阻止
真正的安全必须是基础设施级的——就像你不会让 ATM 机的取款功能依赖"柜员自觉查余额"。
这就是为什么需要"库操作系统"的设计思路。
第二章:用操作系统的思路重新设计 AI 智能体的"地基"
2.1 库操作系统(Library OS)的核心思想
Agent libOS 的核心思想,来自一个非常经典的计算机系统概念——"库操作系统"(library OS,libOS)。
在传统计算机世界里,库操作系统的做法是:
把操作系统的一部分功能,从系统内核里"搬"到应用程序自己的层面来管理,形成一道介于应用和底层硬件之间的保护层。
Agent libOS 借用了这个思路,但它保护的不是 CPU 核心或磁盘扇区,而是 AI 智能体特有的那些资源:
- 内存对象(Object Memory)
- 工具表(Tool Table)
- 文件路径(File Path)
- 人类审批(Human Approval)
- 检查点记录(Checkpoint)
- 外部副作用(External Side Effect)
2.2 五层架构
整个 Agent libOS 的架构分为五个层次,从上到下依次是:
| 层次 | 名称 | 职责 |
|---|---|---|
| 1 | 智能体的"个性与应用" | 角色定义+任务策略(最高层,决定 AI 模型扮演什么角色) |
| 2 | 技能与工具层 | AI 模型能直接看到和调用的那些工具(类 libc 接口,但不是权力的来源) |
| 3 | Agent libOS 运行时(核心) | 所有关于"能不能做"的判断都在这里发生(真正的权限边界) |
| 4 | 资源提供者基底 | 把运行时的抽象操作连接到具体的文件系统、时钟、命令行等宿主服务 |
| 5 | 硬件/软件环境 | 实际的硬件和软件环境(模型 API+本地文件系统+Deno 运行时等) |
这套架构传递出一个非常清晰的设计原则:
"工具是类 libc 的包装器;运行时原语才是权力边界。"
用白话说就是:AI 模型能看到什么工具,和它真正被允许做什么事,是两件完全不同的事情。
2.3 与传统 OS 设计的同构性
如果你熟悉 Linux 内核,你会发现 Agent libOS 的五层架构和 Linux 内核的用户态 / 内核态 / 硬件三层模型有惊人相似的设计哲学:
| Linux 内核 | Agent libOS | 类比 |
|---|---|---|
| 系统调用(syscall) | 运行时原语(primitive) | 用户态到内核态的边界 |
| 进程权限(uid/gid) | 能力系统(capability) | 谁能做什么 |
| 虚拟内存 | 对象内存(Object Memory) | 资源隔离 |
| 文件系统权限 | 资源提供者基底 | 谁能访问哪些资源 |
| 设备驱动 | JIT 工具沙箱(Deno) | 隔离环境执行 |
这是把 70 年代操作系统设计经验扬弃到 AI 智能体运行时的范式跃迁。
第三章:AgentProcess — 给每个 AI 智能体一张"身份证"
3.1 为什么需要"进程"概念
在 Agent libOS 里,每一个运行中的 AI 智能体被称为一个"AgentProcess"(智能体进程)。
这个概念直接借用了操作系统里"进程"的设计——
就像你的电脑上,每个打开的程序都是一个独立的进程,有自己的编号、状态和资源分配一样。
3.2 AgentProcess 的属性
一个 AgentProcess 拥有以下完整属性集:
| 属性 | 含义 |
|---|---|
| 进程编号(pid) | 全局唯一标识 |
| 父进程编号(ppid) | 谁启动了它 |
| 镜像编号(image_id) | 它基于什么模板创建 |
| 生命周期状态 | 运行/等待/暂停/退出等 |
| 目标对象 | 智能体要完成的任务 |
| 内存视图 | 它能看到哪些对象 |
| 能力集合 | 它被允许做什么 |
| 工具表 | 它的工具列表 |
| 检查点 | 状态快照 |
| 资源预算 | 时间/算力上限 |
| 工作目录 | 相对路径的基准 |
| 状态消息 | 最后一次的状态报告 |
每个进程从一个"AgentImage"(智能体镜像)创建,镜像固定了:
- 默认工具
- 系统提示
- 上下文策略
- 安全配置文件
- 所需能力
目前系统内置了四种镜像:
- 基础智能体(base agent)
- 编程智能体(coding agent)
- 评审智能体(review agent)
- 工具制作者智能体(tool maker agent)
3.3 完整的生命周期操作
智能体进程支持一整套类似操作系统的生命周期操作:
| 操作 | 含义 | 关键安全特性 |
|---|---|---|
| spawn(生成) | 创建一个全新的子进程 | 子进程拥有自己独立的命名空间,只继承目标信息,而不是父进程的全部对话记录 |
| fork(分叉) | 缩减内存视图和资源预算的子进程 | 除非明确授权,否则子进程不会自动继承父进程的文件写入权限——防止权限通过进程树悄悄扩散 |
| wait(等待) | 可恢复的阻塞操作 | 父进程进入等待状态,当子进程退出时,等待自然恢复,完全不需要 AI 模型再发出第二个等待指令 |
| exec(替换执行) | 保留进程编号,同时把镜像和工具表换掉 | 不会自动获取新镜像所要求的能力,因此无法借此提升权限 |
| exit(退出) | 释放临时的草稿对象 | 除非明确保留结果 |
3.4 工作目录的进程级隔离
每个进程还有一个工作目录,类似于命令行里的"当前目录"。
所有的文件路径和命令行操作,都相对于这个工作目录来解析,宿主 Python 进程本身不会因此改变自己的目录,保持了进程级别的隔离。
这一点的关键意义在于:
一个智能体执行
cd /tmp不会影响宿主机的工作目录,也不会影响其他智能体的工作目录。
这是进程级隔离的工程化实现。
第四章:对象内存 — 让 AI 的"记忆"也有权限控制
4.1 现有 AI 智能体"记忆"的问题
在现有的 AI 智能体框架里,智能体的"记忆"通常就是一段不断增长的对话文本——
你说一句,模型回一句,结果追加一句,就这样堆下去。
这种方式既不安全(所有历史对所有工具可见),也不高效(上下文窗口爆炸)。
4.2 对象内存的设计
Agent libOS 里引入了一种叫做"对象内存"(Object Memory)的结构,把智能体的中间状态表示为一个有类型的、受权限保护的对象图。
每个对象代表一种具体的信息单元,比如:
- 目标(goal)
- 计划(plan)
- 消息(message)
- 工具结果(tool_result)
- 观察记录(observation)
- 错误追踪(error_trace)
- 代码补丁(code_patch)
- 摘要(summary)
- 技能(skill)
- 外部引用(external_ref)
每个对象都有:
| 字段 | 含义 |
|---|---|
| 对象编号(oid) | 全局唯一标识 |
| 命名空间内的本地名称 | 类似"局部变量名" |
| 类型 | 决定谁能读取 |
| 载荷 | 实际数据 |
| 元数据 | 描述信息 |
| 来源记录(provenance) | 谁创建的 |
| 版本号 | 用于追踪变更 |
| 不可变标志 | 防止被修改 |
| 创建者信息 | 进程引用 |
| 时间戳 | 何时创建 |
4.3 关键设计原则:"知道"不等于"能读"
一个关键的设计决策是:
"知道对象的名字,不等于有权限读取它。"
这遵循了计算机安全领域一个经典原则——"发现"和"授权"必须分开。
就像你知道银行保险库在哪栋楼,不等于你能走进去取钱一样。
系统的回归测试专门覆盖了"直接名称查找"和"按名称查询"两种方式,确保单纯知道名字无法绕过对象读取权限。
4.4 命名空间隔离
对象名称是局部于命名空间的。
如果进程在操作时不指定命名空间,系统就默认使用该进程私有的命名空间。
不同进程的私有命名空间里可以有同名对象,但它们完全独立,互不干扰——这让对象内存更像是每个进程自己的"内存地址空间",而不是一张人人都能查询的全局表。
4.5 物化器(Materializer)
在每次向 AI 模型发起调用之前,一个"物化器"(materializer)会把进程的内存视图转换成有界限的文字上下文送给模型,模型自始至终看不到对象存储本身。
这种思路和麻省理工学院等机构提出的 MemGPT(把 LLM 的上下文管理类比为虚拟内存)有相似之处,但区别在于:
Agent libOS 的分页单位是带有类型、来源记录和权限的对象,而不是纯粹的文本片段。
4.6 SQLite vs 内存堆的存储选择
在技术实现上:
- 对象的载荷存储在运行时的内存堆里,而不是直接写入数据库
- SQLite 只保存目录元数据和一个"载荷在内存中"的标记
这样做的目的是明确区分运行时的临时状态和持久化的存储:
短暂的草稿不应该自动变成数据库记录,进程退出时也会自动清理属于自己的临时对象。
第五章:能力系统 — 每一步操作都要持"通行证"
5.1 能力系统的设计
Agent libOS 的权限控制核心是一套"能力"(capability)系统。
每一个能力绑定了:
| 字段 | 含义 |
|---|---|
| 主体(subject) | 谁可以用 |
| 资源(resource) | 操作什么资源 |
| 权利(rights) | 有哪些权利 |
| 约束(constraints) | 哪些限制 |
| 发放者(issuer) | 是谁发放的 |
| 有效期(expiration) | 什么时候过期 |
| 是否吊销(revoked) | 是否已被吊销 |
受能力保护的资源包括:
- 对象编号
- 对象内存命名空间
- 工作区文件路径
- 人类操作者
- 权限策略条目
- 命令行策略
- 镜像注册表条目
- 工具表条目
5.2 调用点实时检查
每次执行底层原语操作时,系统都会在调用点实时检查能力。
这意味着一旦某个能力被撤销,下一次调用就会立刻被拦截,工具包装层完全无法绕过这道检查。
5.3 文件写入的四种策略
文件写入操作支持四种策略:
| 策略 | 行为 |
|---|---|
| 始终允许(always_allow) | 无需任何检查 |
| 始终拒绝(always_deny) | 任何时候都拒绝 |
| 每次询问(ask_each_time) | 每次都创建阻塞的人类审批请求 |
| 一次性允许(one_shot) | 只能消费一次 |
在"每次询问"策略下:
- 底层原语会创建一个阻塞的人类审批请求
- 审批通过后获得一个一次性能力
- 仅供这一次操作消费
- 审批被拒绝时,进程会收到一个结构化的"失败"工具结果,可以继续运行或者主动退出,而不是直接崩溃
5.4 人类审批请求的详细字段
人类审批请求包含了极其详细的信息:
- 进程编号
- 原语类型
- 相对路径
- 绝对路径
- 授权范围
- 覆盖预测(会覆盖哪些文件)
- 字节数
- 内容的 SHA-256 哈希值
- 目标状态
- 请求的一次性能力
- 经过安全转义处理的内容预览
内容预览使用了 repr 转义,这是一个安全决策——原始的不可信内容不应该能够插入看起来像是可信审批指令的终端行。
5.5 命令行执行的安全设计
命令行执行也被纳入原语管理,而不是交给任意的包装函数来处理。
命令行接口接受参数数组而非命令字符串,从而避免了 Shell 展开带来的意外执行风险。
进程级别的命令行策略支持四种模式:
| 模式 | 行为 |
|---|---|
| 始终拒绝 | 任何命令都拒绝 |
| 白名单(自动批准,否则询问) | 在白名单内自动批准,否则询问 |
| 黑名单(询问,否则自动批准) | 在黑名单内询问,否则自动批准 |
| 始终允许(高风险) | 任何命令都允许 |
匹配是基于分词后的参数进行的,黑名单检查还会检测嵌套的可执行语法,比如解释器链。
超时和输出截断都在原语内部强制执行,因此无论是 AI 模型调用的工具还是即时生成的工具,都遵守同样的边界规则。
第六章:人类审批队列 — 让 AI"等"人类,而不是让人类"追"AI
6.1 现有审批的痛点
在很多现有系统里,如果需要人类审批,往往是通过一个专门写在演示脚本里的回调函数来处理的——
这意味着审批逻辑和具体的应用代码绑定在一起,换一个场景就要重新写一套。
Agent libOS 把人类的参与提升为一等公民的运行时行为。
6.2 人类作为运行时对象
人类被建模为连接到队列的运行时对象。
进程可以:
- 向人类输出消息
- 向人类提问
- 向人类请求权限
- 接收中断
当一个底层原语需要人类输入时:
- 进程进入"等待人类"(WAITING_HUMAN)状态
- LLM 执行器记录下待处理的动作
- 不会返回一个错误的工具失败结果
- 高级督导循环会清空人类队列,应用决策,在适当时候唤醒进程,并恢复待处理的动作
6.3 类比 OS 的阻塞系统调用
这种机制类似于操作系统里进程阻塞在终端设备的系统调用——
进程在等待键盘输入时不会占用 CPU,其他进程可以继续运行,直到输入到来再恢复。
Agent libOS 把同样的结构用于人类审批和提问。
类似地,sleep 操作调用的是异步时钟原语,一个进程休眠时不会阻塞其他进程。
6.4 高级 API 与可调试性
系统提供了一个公开的高级 API,会持续推进运行时,直到没有可运行或可恢复的工作为止。
测试时可以关闭队列清空功能,以便检查"等待人类"中间状态,这把"运行直到空闲"和"单步可检查"两种调试需求清晰分开。
第七章:JIT 工具 — AI 自己生成工具,但只能在沙箱里
7.1 JIT 工具的革命性意义
Agent libOS 支持一条非常有趣的"即时工具生成"(JIT tool)路径:
允许进程提议一个 TypeScript 工具候选项,包含接口定义、源代码和测试。
通过验证的候选项会作为 Deno 模块运行,导出一个 run(args, libos) 函数。
7.2 为什么选择 Deno
选择 Deno 来运行这些即时生成的工具是经过认真考量的:
- Deno 原生支持 TypeScript
- 提供了一个"默认拒绝"的权限模型——不信任的模块在没有明确授权的情况下,无法访问磁盘、网络、环境变量、子进程或 FFI(外部函数接口)
- 启动时使用
--no-prompt参数,防止运行时通过交互式提示获得权限提升
7.3 libOS 对象的安全暴露
libOS 对象只暴露一个 syscall(name, args) 接口:
- 不暴露 Python 运行时对象
- 不暴露 AI 模型的工具注册表
Python 运行时和 Deno 进程之间通过 stdin/stdout 上的 NDJSON 协议通信。
7.4 Deno 的多层防护
Deno 的多层防护机制:
| 防护层 | 机制 |
|---|---|
| 启动参数 | --no-prompt,禁止运行时权限提升 |
| 权限拒绝 | 没有宿主读写、网络、环境变量、运行子进程或 FFI 的权限 |
| 静态导入 | 限制在一个配置好的 jsr: 允许名单内 |
| 危险入口拒绝 | npm:、node:、http(s):、file:、动态 import、Deno 全局对象、eval、Function、Worker 和 WebAssembly 入口点在验证阶段就被拒绝 |
7.5 JIT 工具的 syscall 流程
即时生成的工具调用的每一个系统调用,都经过:
- 调用进程的原语能力检查
- 策略状态
- 人类审批规则
- 审计钩子
TypeScript 端只能看到最终的成功载荷或最终的系统调用错误。
人类审批在系统调用内部是可等待的运行时行为,即时工具完全不接触待处理请求协议、重试令牌或直接的授权/撤销操作。
进程退出和替换执行这类生命周期系统调用,其结果由运行时在 Deno 工具返回正常结果帧后才应用,超时、协议违规和异常退出都会被报告为失败的工具调用。
第八章:检查点与审计 — 让每一步操作都"有据可查"
8.1 为什么需要审计
当 AI 智能体执行了一些无法撤销的操作(比如发送了一封邮件、写入了某个文件),如果后来出了问题,你需要能够回溯:
"它当时做了什么?凭什么权限做的?是谁批准的?"
这就是审计记录存在的意义。
8.2 检查点的设计
Agent libOS 的检查点会快照可重建的运行时状态:
- 进程元数据
- 对象目录状态
- 能力元数据
- 检查点头部
需要明确说明的是:
"检查点不声称能回滚不可逆的外部操作,因为那些操作已经实际发生在了真实世界里。"
这类操作必须被表示为审计事件,在必要时通过明确的补偿操作来处理。
8.3 审计记录的边界
审计记录在所有会改变权限和产生副作用的边界处发出,每条记录能够回答:
| 字段 | 含义 |
|---|---|
| 哪个进程执行了操作 | 主体追溯 |
| 调用了哪个原语 | 行为追溯 |
| 影响了哪个资源 | 影响范围 |
| 哪个权限或策略允许或拒绝了该操作 | 决策追溯 |
| 涉及了哪个人类决策 | 监督追溯 |
第九章:Python 原型实现与 123 个测试用例
9.1 原型实现
这套系统的 Python 原型包名为 agent_libos,包含以下模块:
| 模块 | 职责 |
|---|---|
| 能力管理 | 能力的授予、撤销、检查、对象句柄 |
| 配置 | 默认预算、限制、沙箱、命令行和启动策略 |
| 外部接口 | 文件系统、命令行、时钟/睡眠和提供者基底 |
| 人类接口 | 审批、提问、输出、中断队列 |
| 镜像管理 | 内置镜像、注册表原语、YAML 加载器 |
| LLM 接口 | 提示、模型客户端、执行器、工具协议 |
| 内存管理 | 对象内存、命名空间、句柄、视图、物化 |
| 运行时 | 调度器、进程管理器、系统调用、事件、审计 |
| 存储 | SQLite 元数据存储 |
| 工具管理 | 工具代理、工具基类、Deno 即时工具、内置工具 |
9.2 确定性演示场景
研究团队设计了一个确定性演示场景,无需真实的 AI 模型即可运行:
系统生成一个编程智能体进程,创建一个合成的测试失败日志,分叉一个工作进程,使用解析工具,创建检查点,尝试一个因缺少权限而被拒绝的文件写入操作,路由一个人类审批请求,在审批通过后写入一个补丁预览文件,创建最终报告对象,退出,并返回 JSON 摘要。
整个演示场景被一个契约测试覆盖。
9.3 烟雾测试
此外还有多个烟雾测试脚本,覆盖:
- 有权限的模型写入
- 带权限请求的摘要生成
- 通过命名对象内存的文件复制(不让内容返回到工具结果里)
- 两个进程的异步睡眠交替执行
命令行界面提供了可复现的入口点,包括:
- 进程本地 cd
- YAML 镜像 exec
- 显式退出
- 可以挂载任意工作区的编程智能体启动器(通过 LocalResourceProviderSubstrate 实现,不会改变宿主 Python 进程的工作目录)
启动器预设提供了:
- 粗粒度的工作区权限(只读、编辑、完全)
- 从无命令行访问到明确的高风险始终允许模式的命令行策略预设
9.4 123 个回归测试用例
在验证层面,研究团队将整套系统的安全和执行属性编码为 123 个回归测试用例,覆盖了以下关键属性:
| # | 关键属性 |
|---|---|
| 1 | 工具可见性不等于资源权限(可见的写文件工具在没有写能力时被拒绝) |
| 2 | 工作区包含(试图逃出工作区根目录的路径被文件系统原语拒绝) |
| 3 | 分叉/生成时的权限缩减(分叉子进程不继承父进程文件写权限,生成子进程从全新命名空间和仅目标内存视图开始) |
| 4 | 命名空间隔离(不同进程命名空间里相同的本地对象名独立解析) |
| 5 | 内存清理(进程退出释放拥有的草稿对象同时保留显式结果) |
| 6 | 按次审批(ask_each_time 在原语内部阻塞,授予一次,消耗授权,下次再询问) |
| 7 | 人类和等待恢复(人类审批和子进程等待恢复待处理运行时动作,而不是返回错误的工具失败) |
| 8 | 异步睡眠(两个进程在合作睡眠时交替输出时钟信息) |
| 9 | Deno 即时系统调用隔离(TypeScript 工具可以调用 libos.syscall 但无法绕过原语能力或人类审批) |
| 10 | 镜像注册权限(YAML 加载和镜像注册需要文件系统和镜像注册表能力) |
| 11 | 资源提供者基底可注入性(文件系统、时钟/睡眠和命令行提供者可以注入而不改变工具接口) |
| 12 | 包装器纯净性(内置 LLM 工具不直接调用宿主边界 API) |
全部 123 项测试均通过。
第十章:局限性与未来方向
研究者对这套系统的局限性非常坦诚:
10.1 安全沙箱的局限
"Deno/TypeScript 即时工具路径避免了默认的宿主文件系统、网络、环境变量、子进程和 FFI 权限,但它不是一个正式的生产沙箱,更强的部署场景可能仍然需要 Docker、WASM 或 Firecracker 风格的微虚拟机。"
10.2 策略引擎的简化
"策略引擎有意保持简单,能力约束、人类权限策略、命令行策略列表和镜像/命名空间权限覆盖了原型需求,而更丰富的策略语言、风险评分、配额、基于角色的人类权限和敏感标签则留待未来工作。"
10.3 检查点的不可逆性
"检查点无法回滚外部操作。"
10.4 上下文管理的早期
"上下文管理还比较初步,工具结果压缩、长文档分页、重复动作抑制和检索策略尚未完全开发。"
10.5 审计的检索能力
"审计日志目前只是一个记录流,未来需要提供按进程、能力、原语、资源、人类请求和时间范围的索引查询。"
10.6 未来工作
未来工作还应:
- 形式化工具表、系统调用、能力、策略和分叉/替换执行之间的关系
- 把人类当作慢速的高权限设备来深入研究
- 通过更强的静态分析、资源计量、权限配置加固、签名注册表和来源感知撤销来强化即时工具
- 构建运行时基准,覆盖拒绝正确性、未授权副作用、审计完整性、调度公平性、上下文增长和内存释放正确性
在资源提供者层面:
- 网络、浏览器、数据库、远程执行
- 容器执行、WASM 提供者
- 服务支撑文件系统
- 提供者级资源计量
- 跨提供者审计关联
10.7 安全性边界的诚实声明
研究者同样明确说明了这套系统在安全性上的边界:
"Agent libOS 不声称能解决语义层面的提示注入问题——一个恶意文档仍然可能欺骗 AI 模型去请求危险操作。系统的主张是:即便是这样的请求,也仍然要经过原语级别的能力检查、策略、人类审批(如果需要的话)和审计。"
"系统同样不声称内核级隔离、分布式调度、已验证的访问控制,或事务性回滚。"
第十一章:Agent libOS 的真正意义
11.1 解决了一个朴素的问题
说到底,这项研究解决的是一个很朴素的问题:
"AI 智能体越来越强大,但现在的大多数框架没有给它们套上足够可靠的'缰绳'。"
Agent libOS 的贡献不是让 AI 更聪明,而是让 AI 在系统层面更可信——
- 它的每一个操作都有可查的来源
- 每一次越界都会被拦截
- 每一个需要人类确认的动作都会真正等待人类来确认,而不是自作主张
11.2 距离生产部署的距离
这套系统还是一个研究原型,距离真正的生产部署还有相当的距离,但它提供了一种严肃的思路:
"与其在 AI 模型的'大脑'里做文章,不如在 AI 智能体的'操作系统'层面建立真正的权限边界。"
对于正在思考如何让 AI 智能体在真实环境里更安全运行的工程师和研究者来说,这套设计值得认真参考。
11.3 与广州"智能体第一案"的呼应
论文虽然没有直接引用 4-30 广州互联网法院的"智能体第一案"判决(时间上可能也来不及引用),但两者的核心精神完全一致:
| 维度 | 智能体第一案(法律) | Agent libOS(工程) |
|---|---|---|
| 问题 | 智能体"未经授权调用操作系统底层权限" | 工具可见性≠资源权限 |
| 回答 | 法院判决:智能体行动需要"明示授权" | Agent libOS:能力系统实时检查 |
| 影响 | 法律上确立"Agent 行动权≠任意行动权" | 工程上确立"工具≠权力" |
这两件事合起来,标志着 AI 智能体从"演示阶段"进入"生产阶段"。
第十二章:对 AI 工程师的实操建议
12.1 如果你正在做 AI 智能体产品
① 必须内化"OS 级权限边界":
| 模块 | 实现要点 |
|---|---|
| 进程隔离 | 每个智能体任务独立命名空间 |
| 能力检查 | 每次操作前实时权限校验 |
| 对象权限 | 记忆数据带类型+来源+权限 |
| 人类审批 | 高风险操作可中断阻塞 |
| 沙箱执行 | JIT 工具在 Deno 等隔离环境运行 |
| 审计日志 | 每步操作可追溯 |
② 不要寄希望于"AI 模型的自觉":
间接提示注入攻击可以欺骗 AI 模型的判断。真正的安全必须是基础设施级的,不能依赖 AI 模型的"自检"。
③ 高合规场景必须上"Agent OS 级安全":
- 金融:客户数据写入需要审批
- 医疗:病历修改需要审批
- 政务:公文流转需要审批
- 法律:合同审查需要审批
④ 学习 Agent libOS 的源码:
论文提供了 Python 原型实现和 123 个回归测试,可以从 GitHub 下载学习,作为自己项目的"安全基线"。
12.2 如果你正在做 AI 智能体研究
① 关注"运行时原语"而非"工具能力":
你的研究重点应该是如何在原语级别保证安全,而不是如何让 AI 模型更好地使用工具。
② 把"可证伪性"作为研究质量标准:
论文用 123 个回归测试证明系统安全属性。这种"可证伪的工程化研究"应该成为 AI Agent 研究的范本。
③ 关注"具身认知"的工程化实现:
论文的 AgentProcess 设计哲学(进程级隔离+命名空间+工作目录+对象内存)正是梅洛-庞蒂"身体-环境"具身认知的工程化实现。这是 AI 智能体理论的自然映射。
12.3 如果你正在做企业级 AI 产品
① "工具可见性≠资源权限"应该是产品文档的"安全宪法":
任何涉及"AI 智能体可以做什么"的客户问题,都应该回到这个原则。
② 把"OS 级权限边界"作为产品差异化:
当客户问"你们的 AI 智能体和竞品有什么区别"时,"OS 级权限边界" 应该是一个明确的差异化点。
③ 法务/合规/安全团队可独立验证:
论文的 123 个测试用例可被任何独立实验室复现。这意味着法务/合规/安全团队可以独立验证产品的安全属性。
第十三章:Q&A 答疑
Q1:Agent libOS 和普通的 AI 智能体框架(比如 AutoGen、LangGraph)有什么本质区别?
普通 AI 智能体框架的工具可见性和资源权限往往是绑定在一起的,AI 能"看到"某个工具基本等于能直接执行它。
Agent libOS 把这两件事严格分开:
- 工具只是接口
- 真正的权限检查发生在底层原语层
即使 AI 模型被欺骗去调用危险工具,底层系统仍会按照能力和策略拦截,而不是直接放行。
Q2:Agent libOS 能防止提示注入攻击吗?
不能完全防止。
如果恶意内容欺骗了 AI 模型,让它主动请求危险操作,Agent libOS 无法阻止这个"误判"的发生。
但它能保证的是:
这个被欺骗后的请求,在真正执行时仍然要通过能力检查、策略审核、必要时的人类审批,以及完整的审计记录。
攻击者欺骗了 AI 的判断,但无法绕过系统的执行边界。
Q3:Agent libOS 的即时工具生成(JIT 工具)是怎么保证安全的?
即时生成的 TypeScript 工具在 Deno 沙箱里运行:
- 默认没有磁盘读写、网络、环境变量、子进程或 FFI 权限
- 工具只能通过一个叫
libos.syscall的接口与运行时通信 - 每一次系统调用都会经过调用进程的能力检查和策略审核,无法绕过
- 工具的 import 来源被限制在允许名单内
eval、动态import等危险入口点在验证阶段就被拒绝
Q4:Agent libOS 能用于 VLA 模型吗?
理论上是完全可行的。
VLA 模型的"动作"也可以被建模为"对环境/工具的原语调用":
| VLA 元素 | Agent libOS 类比 |
|---|---|
| 视觉感知 | 资源提供者基底的"视觉输入提供者" |
| 语言指令 | 人类接口的"提问" |
| 动作执行 | 运行时原语的"动作执行"(能力检查+策略+审计) |
| 真实环境 | 文件系统原语的"环境状态读取" |
这意味着 VLA 模型可以内化"OS 级权限边界",避免"动作越界"导致的安全事故。
但论文没有直接讨论 VLA 场景——这是未来工作的一个有趣方向。
第十四章:写在最后
14.1 我为什么花 8000 字写这篇文章
做 AI 智能体日报 4 年,我见过太多"智能体"产品:
- 有的只能做单轮对话
- 有的能做"工具调用"但没有权限边界
- 有的能做"多步推理"但间接提示注入一攻就垮
- 有的能跑"长程任务"但没法审计/回滚
Agent libOS 是我看到的第一篇系统性地把"AI 智能体"当成"进程"来设计的研究。
它解决的不是"AI 更聪明"的问题,而是"AI 更可信"的问题。
这跟 4-30 广州互联网法院"智能体第一案"的判决精神完全一致——法律和工程,在 2026 年 6 月,同步抵达了"AI 智能体需要 OS 级权限边界"的共识。
14.2 给 CSDN 工程师的最后建议
- 下载 Agent libOS 的源码读一遍,特别是 123 个回归测试——它是你设计 AI 智能体产品的"安全基线"
- 把你正在做的 AI 智能体产品的"工具可见性"和"资源权限"分离开——这是论文的"核心原则"
- 把"OS 级权限边界"作为产品差异化——当客户问"你们的 AI 智能体凭什么值得信赖"时,"工具≠权力"就是答案
- 关注"具身认知"的工程化实现——AgentProcess 的"身体-环境-任务"三要素映射,是 AI 智能体理论的自然落点
- 把"123 个回归测试"作为产品安全的"ISO 标准"——任何 AI 智能体产品都应该有同等级别的可证伪的安全审计
14.3 一句话总结
"Agent libOS 的真正贡献,不是让 AI 更聪明,而是让 AI 在系统层面更可信——它的每一个操作都有可查的来源,每一次越界都会被拦截,每一个需要人类确认的动作都会真正等待人类来确认,而不是自作主张。"
📌 互动话题
我抛 3 个问题,评论区欢迎撕:
- Agent libOS 的 123 个回归测试会成为 AI 智能体时代的"ISO 安全标准"吗? 你认为所有 AI Agent 产品都应该强制接入这类安全审计吗?
- AgentProcess + 能力系统 + 对象内存这套设计,能否直接迁移到 VLA 模型的"动作权限边界"?还是说具身智能需要一套全新的运行时原语?
- "工具可见性≠资源权限"这个原则,对国产 AI Agent 框架(Coze 3.0 / 扣子 / 智谱 GLM / 阿里通义 / 月之暗面 Kimi)有借鉴价值吗? 国产框架在"安全"维度上是否落后于清华 Agent libOS?
如果本文对你有启发,点赞 + 收藏 + 关注三连是对我最大的支持 👏
我会持续输出 AI+具身智能的深度技术拆解,用 7 大哲学思维框架帮你看穿技术本质。
📚 论文引用
@misc{zhang2026agentlibos,
title={Agent libOS: A Library-OS-Inspired Runtime for Long-Running, Capability-Controlled LLM Agents},
author={Zhang, Yingqi},
year={2026},
month={Jun},
eprint={2606.03895},
archivePrefix={arXiv},
primaryClass={cs.OS},
doi={10.48550/arXiv.2606.03895},
note={14 pages, 1 figure, 2 tables; subjects: cs.OS, cs.AI, cs.CR; ACM classes: D.4.6, D.4.7, I.2.11}
}
论文链接:
- arXiv: [2606.03895] Agent libOS: A Library-OS-Inspired Runtime for Long-Running, Capability-Controlled LLM Agents
- HTML (experimental): Agent libOS: A Library-OS-Inspired Runtime for Long-Running, Capability-Controlled LLM Agents
- DOI: [2606.03895] Agent libOS: A Library-OS-Inspired Runtime for Long-Running, Capability-Controlled LLM Agents
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)