ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Agent为什么需要沙盒?产品经理必须理解的AI安全边界

Agent为什么需要沙盒?产品经理必须理解的AI安全边界 常使用户感到困惑的是, AI Agent 的权限弹窗, 在于让人不禁设问, 为何每一步操作都得进行确认呢? 实际上这是沙盒边界发挥着作用。本文会深入剖析, 文件、网络、进程这三类沙盒是怎样对 Agent 加以约束的, 并且给出设计权限表、规避常见误区的实操方面的建议, 以此来帮助你从底层领悟 Agent 的安全机制。刚刚开始去使用一种能够执行任务的AI Agent, 好多人碰到的首个困惑并非是它能够做些什么, 而是它为何老是在向我提问。是我让它去修改一个文件的, 它却问我是不是允许写入, 它那时准备着手运行测试, 还问我究竟是否准予执行命令, 当它需要安装依赖、读取网页或者调用外部服务的时候, 又会弹出要确认网络访问这么个情况。明明任务可是由我发起的, 为何每走一步流程都得重新去批准?这些弹窗看上去好似要打断工作, 实际上却是在向你发出提醒: Agent准备开展一项有可能对本地环境或者外部系统产生影响的动作。它所需要进行确认的, 通常并非「我是不是想要让它持续下去」, 而是「我是不是准许它跨越这一道权限边界」。即意味着, 系统并非于每一步之际重新问你「还要不要持续下去」, 而是在于判定Agent这一步之时是否仍旧处于被授予权力的范畴之内。此种范畴, 便是沙盒。可将所谓的沙盒, 先理解成一套门禁系统, Agent能够进入哪些目录, 能够修改哪些文件, 能够运行哪些命令, 能够连接哪些网络地址, 均由系统预先划定。它仅能在这个范围之内开展工作, 一旦超出此范围, 便会要么被拒绝, 要么停下来对你进行询问。所以, 审批弹窗呈现出的是沙盒边界于产品界面之上的表现形式。沙盒自身是由系统强制施行的, 它并非是模型自身于心里所记住的一句“不要越权”。它同样并不一定就意味着必须要启动一个虚拟机或者容器, 容器、虚拟机、操作系统权限、网络代理, 均可成为达成沙盒的技术方式。一、每一次确认实际上是在确认哪道边界Agent走到不同步骤时系统看到的风险并不一样并非每一个动作都必定要弹窗。一般而言, 处于当前工作区以及默认权限范畴内的低风险操作能够径直执行而超出该范围的操作, 才会被系统予以拦截、请求确认或者直接拒绝。如此这般去做的目的, 是为了让Agent能够连贯有序地完成日常任务, 与此同时将真正需要你进行判断的动作单独提取出来。在此处另外存在着一个极易致使混淆状况出现的示例。你于A文件夹之内启动一项工程, 那些终端设备的当下正在开展工作的目录极有可能是:/Users/you/A/这仅仅表明, 命令默认是从A文件夹起始执行的, 并非自动而然地就意味着Agent仅仅能够访问A。只要底层进程始终具备整个用户目录的权限, 那么在理论层面上, Agent依旧存有通过命令进行访问的可能性/Users/you/B//Users/you///Users/you/.ssh/真正的沙盒需要进一步规定允许读取A/允许写入A/允许运行项目所需的命令禁止访问A/之外的目录所以, “从何处启动”属于工作目录方面的问题, “能够访问哪里”属于权限边界方面的问题。它们常常会同时出现, 然而并非是同一回事。你于界面之中所见到的, 乃是一个确认弹窗, 然而系统在背后所处理的, 却是文件、网络、进程以及外部系统之间的边界, 明白了这一层面, 沙盒便不再是一个抽象的工程术语了。如下图所示的注释表明, Agent是从A目录开始启动的, 然而这并不意味着它就获取到了整台电脑的钥匙。二、沙盒到底是什么电脑能够被想象成一幢大楼, 大楼之中存在着项目文件, 还有个人文档, 另外有浏览器, 也有数据库, 并且有系统配置。行事者宛如那从事任务的工作者, 其要步入某些屋子, 运用一些器具, 然而绝不可手持能开启整座楼的通用钥匙。沙盒就是这套门禁系统于此存在着一项关键的区分, 沙盒自身主要承担着「技术层面上是否具备可行性」这一职责, 审批机制则负责「何时需要预先向你询问」之事。比如说, 要是 Agent 打算对当前项目之中的代码作出修改, 倘若这可能是处于已被授权的范围之内, 那么便能够直接去执行而当它准备对工作区以外的文件进行修改, 或者去访问网络, 又或者调用带有副作用的外部工具之际, 系统有也许会加以拒绝, 不然就是弹出审批请求。三、Agent是怎么被约束住的Agent并非是一个独立存在的模型, 具备能够开展真正操作能力的Agent, 起码还得要工具以及执行环境才行。由大模型担当判断「下一步想干何事」的职责, 诸如读取一份文件, 运行测试, 或者调用搜索工具。在真正执行以前, 工具执行层需检查此次调用是不是契合权限规则。最终, 操作系统, 容器, 或者其他运行时机制会将边界贯彻到实际执行进程里。所以产品里通常有几层东西一起工作用「运行测试」这一动作来做举例, 模型一般不会直接去接触操作系统, 而是会先提出一个关于工具调用的请求, 就如同这般:“tool”: “shell”,“”: “npm test”,“cwd”: “/Users/you/A”,“”: “off”实际字段会随产品不同而变化但执行链路大致相同大语言模型依据任务来判断是否需要运行测试, 将这个意图转化成结构化的工具调用, 权限层对命令、工作目录、文件范围以及网络状态实施检查, 操作系统或者运行时于受限环境里启动命令, 命令输出、错误信息以及生成的文件再返回到大语言模型处, 以供其决定下一步。在这儿存在着一个于产品之上具备相当重要性的细节, 就是npm test看上去好像仅仅是测试命令, 然而它极有可能持续去调用该项目的脚本代码, 接着将会创建新的子进程, 进而会去读取相应的配置文件, 随后还要去访问关联的依赖, 甚或启动相关的服务。所以呢, 系统绝对不能仅仅凭借命令的名字来进行判断, 一定要把工作所处的目录、相应的环境变量、网络所具有的权限以及子进程的规则等诸多方面结合起来一并加以判断。若是唯在其中书写「你仅能够操作当下项目」这般话语, 那仍旧不过是行为方面的协约规定。而切实的安全界限范围, 必然得经由运行之时、操作系统亦或者权限体系来予以强制地施行作用四、至关重要的三种沙盒边界, 其一为文件沙盒, 它关乎着Agent能够进入哪些房间。Agent能够通过文件沙盒限制来知晓哪些内容是可以看到的, 同时能明确哪些内容是能够进行修改的。而其中, 最为直观的规则是:A文件夹允许读取、创建和编辑B文件夹禁止访问系统目录和密钥目录禁止访问或额外保护对于这儿, 还得再对读权限以及写权限做更进一步区分。存在这样一种情况, 一个Agent有可能可以对整个项目进行读取, 然而却仅仅只能对某些子目录实施修改又存在另一种情况, 它也有可能能够创建全新的文件但是却不可以去删除已经存在的文件。文件沙盒所要防范的并非仅仅是「误删」这一情况, 项目当中的配置文件, 其有可能涵盖数据库地址这一内容, 也可能包含API Key, 还可能包含内部服务信息, 倘若Agent具备读取任意一个目录的能力, 那么它所接触到的敏感信息便会显著增多。哪怕是再往下面看那么一层, 文件沙盒可不是简简单单地在界面之上隐藏几个文件夹而已。执行层呢常常还得去处理路径解析、相对路径、软链接以及子进程继承权限这类问题。就比如说, 当Agent请求访问A/../B的时候, 系统可不是仅仅检查字符串当中有没有「A」, 而是得解析出其最终所指向的真实路径要是A里面存有一个指向B的软链接, 也绝不可以因为链接处于A内, 就认定允许它读取B并以此作为默认情况。这同样是为何「仅仅于里提示Agent切莫访问别的目录之举」并不充分的缘由。切实的文件边界需于操作系统或者运行时层面发挥效用, 并且最好具备日志记录, 即: Agent访问了哪条路径, 是读取操作还是写入操作, 以及是否遭到拒绝。2. 网络沙盒Agent能和谁通信网络权限不只是「能不能上网」还包括它能连接哪些目标要是网络全然开放, 那么风险就会从本地的文件延伸至外面的世界。Agent有犯下把代码、配置或者用户数据上传出去这般错误的可能性, 也存在安装不受其信任的依赖的可能, 还存在去访问本机或者内网服务的情形, 会调用那种会诱发产生费用现象或者带来真实附带后果状况的API。故而, 不少Agent产品会将命令的网络访问设定为默认关闭状态, 或者运用按域名放行的办法。比如说, 仅仅准许访问依赖源以及指定文档站点, 禁止访问随意的地址当涉及发布、删除、促使交出或变更生产数据的行为时, 还得进行额外的审批。有一个容易被忽视的网络沙盒边界: 本机服务, 即便Agent无法访问公网, 要是它能够连接上数据库、后台管理服务或者是其他项目, 那也极有可能跨越原本的任务范畴。网络的控制常分成两步, 第一步用来判定命令有无网络能力, 第二步则是确定它能够连接何等目标。常见的具体操作涵盖默认情况下关闭网络连线之功能, 依据域名设定允许访问的列表, 对本机及内网当中的网络地址予以限制, 以及伴随着代理的运用去记录向外埠发出的请求。之所以要如此这般去做, 其背后的缘由在于, 一旦网络权限被开启, 脚本以及经由它所创建的子进程一般而言同样会继承该项能力。因此, 用户所见到的那个显示为「允许访问网络」的弹窗背后, 或许牵涉着几个不一样的判断, 它究竟打算访问哪一个域名, 到底是想进行下载依赖的操作, 还只是读取文档或上传文件, 其目标场所是公网吗, 还是公司的内网环境, 这也正是为何普遍的那个「允许联网」表述在产品层面总体上显得不够精细精准的缘由所在。3. 进程沙盒Agent能启动和控制哪些程序要运行的程序, 就是进程, 像基于Node.js的服务, 还有脚本, 以及进行数据处理的数据库, 或者开展浏览器或测试命令运行的情况 , 都是进程的具体体现。进程沙盒通常限制Agent假如不存在这般的限制, 那么当Agent来执行一条清理、重启或者调试命令之时, 就有可能不小心关闭其他项目的服务, 去读取其他程序的运行当中的信息, 又或者可会由于持续地创建后台任务进而拖垮机器。对于产品经理而言, 并非一开始就要深入进入操作系统的进程模型之中。只要先记住一个判断即可, 那就是: Agent能够运行完成当下任务所必需的程序, 然而它不应该借助此而获取控制整台电脑上全部程序的能力。进程边界会对一个常见体验产生影响, 那就是: 为何由Agent启动的开发服务, 在任务结束之后, 有时仍会占用端口呢? 原因在于, 由Agent启动的并非单个孤立命令, 而是一棵进程树。一个Shell有可能继续启动Node.js服务, 而Node.js又有创建子进程的可能。倘若系统未对进程组、运行时长以及资源配额进行统一管理, 那么就很难确保在任务结束后, 所有后台进程都能被清理掉。所以, 进程沙盒, 除了存在「能不能对别的程序进行控制」这种情况之外, 还关联到了部分内容, 具体包括「自己启动的程序能够存活的时长是多少、会消耗何等数量的资源、当任务结束之后是否会被回收利用」。五、沙盒不等于容器也不等于虚拟机这几个概念经常被放在一起但它们解决的问题不同。可以把它们放进一个关系里以Codex作为例子, 官方文档将沙盒模式与审批策略进行分开描述, 本地运行的时候, 通常借助操作系统级机制, 来限制命令所访问的文件跟网络至于审批策略, 其作用是决定何时需要用户进行确认。常见的权限模式含有只读、工作区可写, 以及几乎取消沙盒限制的高权限模式。具体行为会跟随运行界面以及配置发生变化, 使用期间应该以对应产品的官方文档作为依据。科德克斯本地运行的官方说明, 涉及代理, 还有其他相关内容。六、如果从0到1做Agent却没有沙盒会发生什么假设你去做了一个, 名为「代码修改Agent」的东西。用户向其提出要求, 让它去修复, A项目里的一个登录页面Bug。设若你的系统将当下用户的Shell径直交予Agent, 与此同时把整个文件系统以及网络予以开放, 那么实际上它兴许具备如此之能力:
返回列表