要用Nova AI写出稳定、可交付的复杂代码,说白了,你得把它当成一个需要手把手带的初级工程师——明确角色、技术栈和版本号这三个要素,然后分步走,给出约束、上下文、范例,最后还要加上硬性输出要求。少了哪一环,代码都可能跑偏。

别指望一句“写个用户管理系统”就能搞定。Nova AI根本不知道你的数据库结构,也不了解你项目的错误处理风格,更不会自己猜你要用Redis还是本地缓存。所以,得把细节掰开揉碎,一步步喂给它。
明确角色+技术栈+版本号,三者缺一不可
第一步:提示词开头就锁定AI的身份和执行环境。比如:“你是一位有5年Spring Boot经验的后端工程师,正在为金融级风控系统编写代码,使用Spring Boot 3.3.0 + Ja va 21 + PostgreSQL 16。”这一步真不能省。Nova AI对框架版本极其敏感——Spring Boot 3.2和3.3在Security配置、依赖注入方式上存在实质性差异,【版本号写错会导致生成的SecurityConfig类直接编译失败】。
第二步:紧接着声明项目约束。比如:“所有接口必须返回Result
第三步:给出最小但关键的上下文片段。把当前模块的Entity类或DTO定义粘贴进去,哪怕只有三行字段声明——没有这个,AI会默认生成Lombok @Data,而你的项目可能禁用Lombok。这也算是个小坑,提前填上。
用少样本提示(Few-Shot)锚定输出风格
方法一:直接贴一段你项目里已有的、风格一致的代码作为范例。比如把这段Controller代码原样复制进提示词:“参考以下已上线的OrderController写法:@PostMapping(“/v1/orders”) public Result
方法二:没有现成代码时,用结构化模板代替。写清楚:“请严格按以下格式输出:① Controller类(含路径、参数校验、统一异常处理)→ ② Service接口与实现类(含事务边界、空值防护)→ ③ DTO与VO定义(字段命名与数据库列名一致,不加下划线)→ ④ 单元测试(使用@MockBean,覆盖成功流+参数校验失败+数据库异常)。”这一步的关键是让AI知道你不需要“伪代码”或“教学示例”,只要那种能直接扔进src/main/ja va里跑通的工程级代码。
拆解任务,分步喂给Nova AI
第一步:先让AI生成核心领域模型和数据库表结构。输入:“基于风控规则引擎需求,设计Rule、Condition、Action三张主表,要求Rule支持启用/停用状态、版本号、生效时间范围;Condition需关联到Rule并支持AND/OR嵌套;Action需支持HTTP回调与内部服务调用两种类型。生成建表SQL(PostgreSQL语法),包含主键、外键、索引、注释。”
第二步:拿到SQL后,立刻喂给AI下一条指令:“根据上述三张表结构,生成对应的JPA Entity类,使用@EmbeddedId处理复合主键,@OrderBy指定Condition列表排序,@Enumerated(EnumType.STRING)处理ActionType枚举。”
第三步:最后才让AI写业务逻辑:“实现RuleService.apply(ruleId, inputContext),要求:① 根据ruleId查出启用中的最新版本Rule;② 按Condition的priority顺序逐条匹配inputContext;③ 匹配成功的Condition触发对应Action;④ 全程记录traceId与决策日志。”这三步不能合并成一句“写个规则引擎”。Nova AI在单次响应中处理超过4个实体关联逻辑时,极易漏掉外键约束或混淆事务边界——经验之谈,试过就知道。
强制输出约束,堵死无效内容
在提示词末尾加上硬性指令:“只输出Ja va代码块,不解释、不说明、不加‘以下是代码’等引导语。每个类单独一个代码块,按Controller→Service→Entity→Test顺序排列。如有依赖未声明,立即停止生成并报错。”这句必须写。Nova AI默认倾向补充说明性文字,而你的CI流水线只认src目录下的.ja va文件——多一行“注意:以上代码需配合Redis缓存使用”就会导致mvn compile失败。
如果生成结果里混入了非代码内容,立刻追加指令:“请重发,严格遵守:仅代码块,无任何文本,无空行,无注释以外的中文。”别嫌麻烦,这一步能省掉后续大量手动清理工作。
