每个AI编程工具都有同一个安全模型,而这个模型的核心假设是"会有人类来读代码"。模型生成源代码,你扫一眼,然后运行它。你唯一的防线就是代码审查,但凡是审过生成代码的人都知道,注意力大概在第四个文件之后就崩了。当输出只是一个React组件时,这套逻辑还凑合;当输出是带着数据库凭据的服务端代码时,这套逻辑就相当不靠谱了。
我们换了一条路。不是去约束模型,而是去约束输出。这个思路可以推广到我们的产品之外,值得展开说说。
![]()
把输出语言锁死,而不是去管模型
核心做法是:模型不生成源代码,而是生成一棵可执行的AST(抽象语法树)。Hyperlambda就是这样一个可执行的AST。模型输出的不是我们再去解析、再去祈祷的文本,而是树里的节点,运行时直接执行这棵树。
关键属性在于:只存在白名单里的节点类型。没有哪个节点能调用shell。不是被禁用,不是被沙箱隔离,也不是靠某个可能被配错的安全策略层来拦截——这个操作在语言层面就不存在。所以那个经典故障模式——模型被提示词注入骗去生成破坏性操作——在这里根本没有落点。当语法里压根没有shell的概念时,你没法靠提示词注入搞出rm -rf。
这和沙箱有什么本质区别
沙箱是减法逻辑。你从一个什么都能干的通用运行时出发,然后花一辈子去删能力、补漏掉的洞。每一次逃逸,都是某个默认开启、被忽略掉的东西。白名单是加法逻辑。你从什么都没有开始,刻意地添加操作。一次逃逸需要我们在明确构建的东西里出bug,而不是某个忘了删的东西。
两种方式都有失败模式,区别在于犯错要付出什么代价。忘了删一个能力,是安全事故;忘了加一个能力,顶多是一张工单。
白捡的校验步骤
因为输出是树而不是文本,你可以在执行之前检查它。不是用正则去扫源代码——那是个必输的游戏——而是结构化地看:这棵树用了哪些节点?它碰了什么?它有没有读一个不该读的表?这个检查是确定性的,跑一次只要几毫秒。你试试给任意生成的Python写个等价检查。
我们在这之上做了什么
实际效果是:你可以用大白话描述一个应用,然后得到一个不需要审查瓶颈的真实后端。数据库支持SQLite、MySQL、PostgreSQL或SQL Server;安全的CRUD REST API;认证支持Google、GitHub、OAuth和OIDC;SPA托管;定时任务。几分钟就能生成,而且可以安全执行——因为它生成进去的那个语言,表达不出危险的事。
用测试说话
架构上的主张应该用测试来验证,而不是靠信任。所以我们设了一个常驻的沙箱逃逸赏金,至今没人领走。运行时是MIT许可的,想读代码或者自己跑一遍,去hyperlambda.dev就行。评论区欢迎来吵tradeoff。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.