去年有个数据在硅谷工程师圈子里传疯了:同一段提示词,在不同时间、不同模型版本下,生成的代码一致性不到40%。这不是幻觉问题,是自然语言的先天缺陷。
一位从OpenAI出来的工程师最近开源了一套新思路,试图终结这种"拉一下拉杆,出什么都看运气"的困境。他的核心发现很扎心:我们不是在工程化,是在赌博。
老虎机困境:为什么你的提示词越写越长,结果越不稳定
想象这个场景:你让AI"实现一个带验证的用户资料页"。听起来够清楚了吧?但这句话至少埋了12个未定义变量——用什么框架?验证规则写在哪?错误状态怎么管理?加载时显示什么?
人类工程师会下意识做一堆假设,AI也会。问题是你们的假设很少对齐。
结果是:今天给你React+Zod,明天换成Vue+Yup,变量命名风格像换了个程序员。软件工程里管这叫"模糊税"(Ambiguity Tax)——你为自然语言的弹性支付的隐性成本。
行业现在的解法是"提示工程":加角色设定、给示例、调温度参数。但这位工程师说得很毒:"在提示词里写'你是世界级开发者',跟穿幸运袜子没区别,都是迷信。"
如果你的构建流程依赖一个概率模型的"心情",你搭的不是流水线,是老虎机。
ISL的解法:把"怎么说"变成"必须做什么"
他提出的ISL(Intent Specification Language,意图规范语言)不是更好的提示词,是构建系统。类比一下:提示工程是口头描述你想吃什么,ISL是直接把菜谱的化学方程式甩给厨房。
具体跑起来分五步:
第一步,写规格文件(.isl.md),不是写提示词。每个组件独立成文,定义行为、约束、验收标准——但绝不碰实现细节。换句话说,你说"门必须能开",不说"用合页还是滑轨"。
第二步,Builder解析整个项目图谱。它扫描所有规格文件,识别依赖关系,做拓扑排序。不是把"整个项目"塞给AI赌它理解,而是精确投喂当前组件所需的上下文,顺序正确、分量刚好。这叫上下文手术,不是文本垃圾场。
第三步,Compiler生成代码——不是猜测。它把精确限定范围的上下文传给LLM,此时大模型充当的是编译器后端:把确定性规格映射成目标语言的惯用写法。React、Vue、Python、Go,同一套规格,同一套行为,不同语法皮肤。
第四步,代码变成只读构建产物。每个生成文件带加密签名,人工修改会破坏构建。文档(ISL)和代码强制同步,"无文档遗留代码"这个概念直接消失。
第五步,Auditor验证行为而非语法。它跑生成的代码,检查状态转换是否符合规格——比如加载标志是否永远重置不了,人在看代码之前就被拦住。
从谈判到编译:工程文化的硬切换
这套机制最狠的地方在于权力关系的翻转。以前工程师和AI是谈判关系:你改提示词,它改输出,来回拉扯。现在你是产品经理写PRD,AI是执行团队,中间隔着一层严格的规格契约。
这位工程师的原话是:「我们在用自然语言告诉AI怎么做——通过示例、语气、角色扮演——而不是正式定义必须发生什么。我们在和语言模型谈判,本该是在编译一份规格。」
这种切换的代价是前期思考成本飙升。写ISL规格比写提示词慢得多,你得把模糊直觉翻译成精确约束。但一旦跑通,后续迭代是确定性的:改规格,重新编译,行为可预期。
对比现在的主流工作流:改提示词,跑五次取最好结果,祈祷下次模型更新别翻车。
开源社区的反应很分裂。一派觉得这是"把简单问题复杂化",提示词调调就能用,何必搞新语言;另一派在复杂项目里吃够了苦,正在把ISL往CI/CD流水线里塞。
有个细节很有意思:ISL的Auditor会抓逻辑死胡同,比如"加载中"状态永远跳不到"成功"或"失败"。这类bug在代码审查里很难发现,因为人的注意力在语法和架构上,不是状态机的完备性。
如果这套思路被验证,AI代码生成的竞争维度会从"谁的模型更聪明"转向"谁的规格生态更完善"——就像编译器时代,C语言的标准比某个编译器的优化更重要。
你现在用AI写代码,是把它当老虎机拉杆,还是已经在找编译器的替代品了?
热门跟贴