文章摘要
AI技术普及打破了传统Web软件功能固定、小众个性化需求因投入产出比低无人开发的行业死结,普通用户无需专业编程能力就能定制专属软件功能。目前自定义代码仍存在部署、安全等难题,业内已提出对应解决方案,Cloudflare也开源了相关项目,可自定义软件被认为是未来软件的发展方向。

不少开发者都有过类似的个性化需求:把收藏的长文自动推送到专属阅读器

每周自动筛选相关领域的学术论文,贴好标签分类整理

针对常访问的乱码网站,单独编写专属的解析脚本

Cloudflare的首席工程师Jeremy Morrell坦言,他常用的阅读应用完全无法满足这些个性化诉求。他理想中的软件,应该能实现这样的场景:只需要简单描述需求,就能自动生成对应的代码片段,挂载到软件预留的扩展接口后直接运行,还能便捷地分享给有同样需求的用户。这就是他心中的可扩展软件。

在Morrell看来,当前绝大多数Web软件都是“静态”的——这里的静态并非指网页技术本身,而是指软件的逻辑无法被用户修改,功能在发布时就已经定型,用户只能被动使用,无法自定义。而AI技术的普及正在改变这一现状,让普通用户也能定制属于自己的应用,不再是遥不可及的梦想。

小众功能的死结:为什么你想要的功能永远无人开发

很多时候,你在某个应用里想要的小功能,并不是技术上做不到,而是投入产出比太低。因为全世界可能只有你一个人需要这个功能,开发者的时间和精力有限,只会优先服务最大的用户群体。

即便开发者想覆盖所有需求,也会受到界面复杂度的限制:每新增一个功能,都会给不需要该功能的用户增加使用负担。如果一个功能的受众只有几百人,却会让数百万普通用户的产品体验变差,这显然是不划算的。这两条约束,就是过去二十年来产品经理一直难以解开的行业死结。

以地图应用为例,绝大多数用户的核心需求都是基础导航服务,但右侧的长尾需求则是每个人各不相同的个性化设置,比如定制化的路线偏好、小众地点标注、专属的导航播报规则等等。

不过随着AI辅助编程的普及,这种局面正在被打破。用户不再需要成为工程师就能打造专属工具,制作只服务少数人的小软件的成本已经低到可以忽略不计,Y Combinator的Pete Koomen将这类工具称之为“小软件”。

无论是会计、医生、律师还是其他数千种职业,都可以拥有完全贴合自身工作流的专属小软件。显然,想让更多人用上智能体工具,不能指望把所有人都培养成工程师,真正需要改变的是软件本身的形态。

自定义代码的门槛降低,但部署的难题仍在

当普通用户也能通过AI快速生成自定义代码后,新的问题随之而来:写完的代码该放在哪里?目前不少Web产品提供的webhook接口门槛极高,需要开发者独立搭建整套服务,还要处理投递过程中的各类异常问题。

Morrell指出,要让陌生代码在系统中安全运行,需要突破五道关键关卡:

第一关:成本控制

如果有百万用户都挂载了自己的代码,给每个用户单独分配容器的成本完全无法负担。Morrell提出的标准是:代码未被调用时成本趋近于零,每次调用的成本压低到几分之一美分,还要兼顾编译、存储文件、日志收集等额外开销,最终单台服务器能承载的用户数量完全取决于内存占用。

第二关:冷启动速度

用户代码如果卡在请求响应的关键路径上,不能等待数分钟启动容器,理想的启动时间应该控制在个位数毫秒。当然,如果只是运行定时任务或事件回调,这个要求可以适当放宽。

第三关:资源限额

永远无法预判用户会写出什么样的代码。Morrell分享了一个在Heroku听到的真实案例:一份热门的入门教程教新手部署第一个程序,代码只有两行,一个死循环不断打印hello world。一个应用上线后瞬间开始每秒输出数百万行日志,且永不停歇,而新手还在等待屏幕上出现正常的日志内容。因此,必须对CPU占用、内存使用、网络请求数量、请求大小、日志输出频率等各项指标设置严格上限。

第四关:双层隔离

用户的代码如果出现崩溃、死循环或过度占用内存的情况,不能影响其他用户。恶意代码不能突破隔离边界窥探其他租户的数据,还要防范Spectre这类推测执行攻击。

第五关:代码的实用性

不能让用户的代码只能空转,必须让它能够访问到必要的系统资源和数据,否则就毫无价值。

从给钥匙到给权限:安全的代码调用模式

如何让不可信的代码正常工作,又不会泄露系统的核心权限?Morrell拆解了业内的三代解决方案:

第一代:直接暴露API密钥

这种方式的灵活性极强,但风险极高。拿到密钥的代码可以随意向第三方服务发起请求,即便代码本身没有恶意,也可能被用于发起分布式拒绝服务攻击。

第二代:添加中转代理层

用户拿到的是不透明的令牌,仅对代理服务有意义。代理验证令牌后替换为真实凭据转发请求,同时可以添加白名单和限流规则。这种方式比直接暴露密钥更安全,但维护成本很高:要将权限收窄到允许特定操作,需要在代理中编写复杂的过滤逻辑,还要随着上游API的更新持续维护。Morrell曾展示过一段示例代码,仅仅实现“读取一封已批准的邮件”这一个操作,代码就已经冗长且难以维护。而且这类过滤逻辑永远无法覆盖所有用户的使用场景,你永远猜不到用户会如何使用权限。

第三代:能力模型(Capability)

这才是真正的解决方案:不提供密钥,也不暴露服务地址,而是直接给用户代码传递一个预先定义好的专属函数。比如只开放“取回已批准的邮件”这一个动作,用户的代码只能执行这一项操作,无法访问其他任何资源。用户代码手中只有这些有限的函数,系统凭据从未进入用户代码的执行环境,即便拿到了数据也没有通道可以向外传输。

这种模式还有一个额外的好处:将TypeScript编写的能力定义提交给大模型,比传递OpenAPI格式的JSON更节省令牌且结果更准确。因此,真正的门槛不再是让AI生成代码,而是决定这段代码能够访问哪些资源。

四种实现路径,没有绝对的最优解

其实让软件支持自定义扩展的思路已经存在了二十年,但大模型的出现改变了谁能够编写扩展代码。Morrell列出了四种主流的实现路径:

最轻量级:嵌入式解释器

比如Lua、QuickJS这类轻量级解释器,也可以根据需求自定义开发。这种方案的资源占用极低,但安全性和隔离性相对较弱。

V8 Isolates

Google在V8的安全加固上投入了大量资源,直接使用V8 Isolates可以省去自行开发安全隔离层的成本。目前Cloudflare Dynamic Workers、Node的isolated-vm、Rivet的secure-exec都是基于这种方案。

MicroVM

这类方案砍掉了完整虚拟机中不必要的硬件模拟,比如USB、显卡、磁盘等,只保留核心运行环境。隔离性极强,可以运行二进制代码并支持完整的POSIX标准,但资源开销明显更大。Firecracker、libkrun都属于这一类。

WASM + WASI

WebAssembly从设计之初就没有内置网络请求、环境变量读取等能力,所有权限都需要宿主程序显式授予。从安全角度看这是最理想的起点,但对应的工具链复杂度也更高。

这四种方案并非互斥的,可以组合使用:比如WASM可以运行在V8 Isolates或MicroVM中,即便使用V8或WASM作为隔离边界,MicroVM也可以在编译打包、测试扩展的环节发挥作用。Morrell自己就曾将静态博客改造成一个演示平台,自嘲为“世界上最小的vibe coding平台”,本质上是一个可定制的网页抓取工具,用户可以输入URL,抓取内容后结合预先授予的工具运行自定义代码。

十年前的失败构想,被AI重新激活

十年前,现任Cloudflare Workers技术负责人的Kenton Varda就曾推出过Sandstorm.io创业项目。该项目的核心主张在当时显得有些超前:用户打开的每份文档都运行在专属的沙箱实例中,程序只能获取用户主动授予的权限,不发放密钥,只提供有限的能力。但这个项目最终未能成功,Varda后来复盘认为,失败的原因是当时没有足够的自动化工具,用户需要手动打包软件,极大的学习门槛劝退了大多数人。

2026年8月5日,Cloudflare以Apache 2.0协议重新开源了这套方案,命名为Cloudflare OS。当年缺失的自动化能力,如今已经被AI技术补上。Varda当天在社交平台上表示,这几乎是他酝酿十年的计划的最终落地。

软件正在变得更“柔软”

OpenAI在《Codex as a Platform》中提出的智能体框架也表达了同样的思路:与其让每个团队都使用通用的编码助手,不如将智能体嵌入到他们日常使用的软件中。无论是工程流程工具、运维仪表盘、安全调查平台还是客服控制台,都可以快速集成智能体功能。

这种模式的分工非常清晰:应用方负责提供界面、业务上下文、工具和审批边界,框架则负责智能体循环和沙箱执行。OpenAI的示例应用Relay将智能体集成在货运仪表盘旁,接入平台自带的MCP工具,改签机票前必须经过人工审批,完美展示了这种模式的应用场景。

现在不少公司都在鼓励员工通过vibe coding打造专属工具,但方向正确不代表没有后续难题:当企业内部出现成百上千个自定义工具后,谁来维护?如何保证工具只访问必要的数据?访问令牌的权限范围由谁制定、如何定期轮转?会不会有工具偷偷将客户信息写入第三方日志?如何符合GDPR等数据合规要求?

Morrell给出的答案是:为用户提供一个根本没有令牌可以泄露的部署环境,将数据访问的权限交给平台团队统一管理,确保合规性。

如果这种模式真的普及,产品经理的工作也将发生改变:他们不需要再覆盖所有的长尾用户需求,但必须设计稳定的扩展点、能力接口,并长期保证兼容性。如果厂商不主动开放扩展入口,用户就无法自定义软件。

Morrell在平台行业已经深耕近十年,他坦言平台的设计、运维和调试都极具挑战性:对外暴露API意味着需要大量的前期规划和长期的技术支持。但他依然认为这是值得的,因为用户的创造力会远超你的想象,他们开发出的功能可能是你从未设想过甚至认为不可能的。

或许在不久的将来,判断一款应用好坏的标准之一,就是看它允许用户自定义修改的程度有多深。

以上内容不代表本平台立场,仅供读者参考