乐于分享
好东西不私藏

代码生成Prompt模板:让AI写出生产级代码

代码生成Prompt模板:让AI写出生产级代码

同样的需求,别人让AI写的代码能直接上线,你写的全是TODO和占位符——差距在哪?


我第一次让AI帮我写代码时,它给了我一个能跑的main方法,然后我觉得"这就是AI的极限了"。
后来我看到同事用AI生成的代码:分层清晰、校验完整、异常处理到位、注释规范——几乎是拿来就能上线的状态。
我问他怎么做到的。他说:"你告诉AI的信息,决定了它给你的代码质量。"

先看问题

你让AI生成代码,可能是这样问的:
帮我写一个用户登录功能
AI返回:
public class Login {    publicstaticvoidmain(String[] args) {        String username = "admin";        String password = "123456";        if (username.equals("admin") && password.equals("123456")) {            System.out.println("登录成功");        }    }}
能用吗?能跑。能上线吗?差得远。
问题出在哪?你只说了"做什么",没说"怎么做"。

换一种问法

Spring Boot 3.2项目,需要实现用户登录接口:- 接收用户名密码,验证成功返回JWT Token- 使用Spring Security + BCrypt- Token有效期24小时- 返回统一响应格式Result<T>- Controller-Service分层
AI这次返回的代码:
@RestController@RequestMapping("/api/auth")@RequiredArgsConstructorpublic class AuthController {    private final AuthService authService;    @PostMapping("/login")    public Result<LoginVO> login(@Valid@RequestBody LoginDTO dto) {        return Result.success(authService.login(dto));    }}@Service@RequiredArgsConstructorpublic class AuthService {    private final AuthenticationManager authManager;    private final JwtTokenProvider tokenProvider;    private final UserRepository userRepository;    public LoginVO login(LoginDTO dto) {        Authentication auth = authManager.authenticate(            new UsernamePasswordAuthenticationToken(dto.getUsername(), dto.getPassword())        );        User user = (User) auth.getPrincipal();        String token = tokenProvider.generateToken(user);        return new LoginVO(token, user.getId(), user.getUsername());    }}// 还有SecurityConfig、JwtTokenProvider、异常处理...
差距一目了然。

我总结的几个关键点

1. 告诉AI你的技术栈

AI不知道你用什么框架、什么版本。你不说的,它就按最简单的方式写。
【背景】- 项目:Spring Boot 3.2 + Java 17 + MyBatis-Plus- 业务:银行对公贷款系统

2. 说清楚业务规则

"实现风险评估"——AI不知道你的评分规则是什么。
【业务规则】1. 查询客户近12个月交易数据2. 评分规则:   - 交易频率 > 50次/月:+20分   - 无逾期记录:+50分3. 总分 > 90分为A级,< 50分为D级
规则写得越细,代码越符合预期。

3. 给约束,不要让AI猜

你不说的,AI可能做,也可能不做。
【约束】- 参数校验用@Valid + @NotBlank- 异常用全局异常处理器捕获- 日志记录入参和异常- 代码注释用中文

4. 给一个示例代码

如果你有现成的代码风格,直接贴给AI看。
【参考风格】@RestController@RequestMapping("/api/orders")@RequiredArgsConstructor@Slf4jpublic class OrderController {    private final OrderService orderService;    @GetMapping    public Result<PageResult<OrderVO>> list(@Valid OrderQuery query) {        log.info("查询订单列表,参数:{}", query);        return Result.success(orderService.listOrders(query));    }}
AI会模仿你的风格写代码。

几个实用模板

新功能开发

【背景】Spring Boot 3.2 + Java 17【需求】实现客户信息查询接口,支持按名称模糊搜索、行业筛选、分页【约束】- Controller-Service-Mapper三层- 参数校验用@Valid- 返回统一格式Result<T>【参考风格】(贴一段你的代码)

代码补全

【现有代码】public String calculateRiskLevel(Long customerId) {    // TODO: 实现风险评估逻辑}【业务规则】(写清楚规则)【约束】使用Stream API,异常返回D级

代码重构

【原始代码】(贴需要重构的代码)【重构目标】1. 用Stream替代for循环2. 优化条件判断【约束】保持方法签名不变

Bug修复

【问题】NPE at UserService.java:42【堆栈】(贴异常堆栈)【相关代码】(贴代码)【修复要求】分析原因,给出修复方案,补充单元测试

我踩过的坑

坑1:让AI自己选技术方案

帮我实现一个定时任务
AI可能给你用Timer、ScheduledExecutorService、Spring @Scheduled、Quartz...
你得说清楚:
用Spring @Scheduled,每5分钟执行一次

坑2:没说代码风格

AI给你的代码可能风格和你项目完全不一样。直接贴一段你的代码给它看,它就会模仿。

坑3:没说要什么文件

AI可能只给你一个类,你要说清楚:
生成Controller、Service、Mapper三层完整代码

最后

让AI写出生产级代码,核心就一句话:

你给的信息越具体,代码质量越高。

不要让AI猜你的意图——它猜不准。直接告诉它你要什么,怎么要。

深蓝技术笔记 · 轻量技巧