探索更确定性的 AI 辅助代码生成方法
Source: Dev.to
引言
AI 编码代理的表现出乎意料地好。在小型项目中,你可以让它们添加功能、修复 bug,甚至编写测试——它们往往能成功。然而,随着项目规模的扩大,问题开始显现。我的经验是,问题不在于模型的能力,而在于 提示不稳定性。
大多数编码代理会动态构建提示,使用:
- 聊天历史
- 代码库的部分内容
- 内部启发式规则
由于最终的提示并非完全受你控制,同一请求可能产生不同的输出,代码库中意想不到的地方会出现更改,行为也变得更难以推理。在小项目中这还能应付,但难以扩展。
确定性提示
我尝试将提示视作源代码来处理,而不是依赖动态构建的提示:
- 提示是显式的
- 提示是可复用的
- 提示可以由其他提示组合而成
- 提示构建是确定性的
- 提示是唯一的真相来源,而不是生成的代码
这将工作流从“与代理聊天”转变为更接近系统架构设计的方式。
SVI 工具
为了探索确定性提示,我构建了一个小工具,叫 SVI。SVI 能根据结构化规范文件(.svi,采用类 Markdown 格式)生成源代码。
核心思路
- 每个
.svi文件定义如何生成特定的源文件。 - 提示可以导入并复用其他提示。
- 最终提示以完全受控且可预测的方式构建。
- 与典型的编码代理不同,SVI 不依赖聊天历史或隐式上下文。
示例 .svi 文件
# Destination File
hello.js
# Output
function hello()
# Options
ProgrammingLanguage=Node.js
Active=True
# Prompt
Create a function that prints "Hello World", and call this function
使用以下命令生成代码:
svi run
输出由基于该规范的 LLM 生成。
实际收益
- 可预测的结果 – 你确切知道是哪条提示生成了哪个文件。
- 可复用性 – 提示可以在项目之间共享和组合。
- 降低模型需求 – 更小、更确定的提示让你可以使用更便宜甚至免费的模型;你可以根据所用 LLM 调整提示的大小和复杂度。
局限性
- 需要更多前期结构化工作。
- 灵活性不如自由形式的提示。
- 工作流从交互式转为更声明式。
对于大型项目而言,这些权衡是值得的,因为 AI 编码代理在规模化时更易于控制。
结论
AI 编码代理功能强大,但其当前的设计使其在大型代码库中难以管理。将提示视为确定性、可复用的规范——SVI 工具即是一个示例——提供了一种更可控的替代方案。
GitHub 仓库: