如何撰写AI Prompt才能成为程序员必读的最佳实践指南?
摘要:程序员必读的AI Prompt最佳实践 程序员的系统化 AI 提示词工程实践手册 本文档源码:https:github.commicrowindai-prompt 一、为什么程序员必须学习 Prompt Engineering? 现
程序员必读的AI Prompt最佳实践
程序员的系统化 AI 提示词工程实践手册
本文档源码:https://github.com/microwind/ai-prompt
一、为什么程序员必须学习 Prompt Engineering?
现在程序员已经离不开AI了,无论cursor、windsurf还是claude code、codex,抑或直接把问题扔到大模型对话框里。基本上每个程序员都会用AI来辅助编程。但有时候 AI 生成的代码会"编译不通过"或者"逻辑奇怪",甚至出现“代码屎山”,这是什么原因?
本质问题:这可能不是模型的问题,而是我们的 **"提问方式(提示词)" **不够准确。
你可以把AI当作实力超强的实习生
想象一下,你招聘了一位博学多才(背熟了 GitHub 上所有开源代码)但刚毕业的计算机实习生。
如果你说:"写个登录功能。"
❌ 实习生可能会给你:
- 没加密、直接拼 SQL 的 UserDao
- 还在用 java.util.Date
- 没有全局异常处理
如果你说:"请基于 Spring Security 6,实现一个基于 JWT 的无状态认证过滤器。要求使用 Lombok,处理好全局异常,并符合 RESTful 规范。"
✅ 实习生立马交出:
- 生产级可用的代码
- 完整的异常处理
- 符合架构规范的实现
核心认识
Prompt Engineering 本质:自然语言编程。
对程序员来说,就是写给 AI 的需求文档(Spec)。
以前我们指挥电脑用 Java,现在我们指挥 LLM 用自然语言。
很多人遇到的问题:
AI 写的代码编译不通过
用了过时 API或框架老旧
逻辑不符合项目架构
单元测试缺失
原因往往不是模型,而是提问方式不够工程化。
当你像配置 Spring Bean 一样精准控制 AI,它就能成为你最得力的结对编程伙伴。
二、底层原理
2.1 LLM ≠ 编译器:概率预测 vs 确定性执行
Java 代码是确定性执行(Deterministic):
if (a > b) return true; // 永远是这个结果
而LLM 本质是一个超级强大的 "Token 接龙机器":
不理解代码逻辑
只是在计算概率
AI 写代码其实是在做高维度的自动补全
因此:
👉 Prompt 越明确,结果越稳定
AI 的每个输出都是在有限的概率空间中选择最可能的下一个 Token。
2.2 Context = 依赖注入
AI 的记忆是有限的,这个限制被称为上下文窗口(Context Window)。
你可以把 Context 想象成 Spring 容器中的依赖注入:
❌ 如果你不注入业务逻辑背景(Context)
→ AI 就会报 "NullPointerException"(幻觉、瞎编)
✅ 如果你把相关的 Entity 定义、Service 接口都贴给它
→ AI 就能完美运行
程序员操作指南 1:
永远不要假设 AI 知道你的项目架构。把以下信息显式地告诉它:
技术栈版本(Java 17/21?Spring Boot 2/3?)
依赖库选择(MyBatis 还是 JPA?)
项目结构和模块划分
已有的代码规范
2.3 Temperature(关键参数)
在使用 AI API 时,有一个关键参数叫 Temperature(0.0 - 1.0)。
Temperature
模式
特点
适用场景
0.0
Strict Mode(相当于 final)
每次输出几乎一样
✅ 写代码、生成 JSON
0.3
平衡
稍有变化,主要思路稳定
✅ 架构设计
0.7+
Creative Mode(相当于 Random)
每次输出都不同
✅ 文案、头脑风暴
编程原则:代码生成必须使用 Temperature=0.0。
三、BROKE Prompt 结构
一个优秀的 Prompt 就像一个定义良好的 Java 类,包含必要的属性。
我们可以沿用 BROKE 框架:
要素
英文
对应 Java 概念
例子
角色
Role
类定义
"你是一位拥有 10 年经验的 Spring 架构师..."
背景
Background
成员变量 / Context
"我们正在将老旧的 JSP 单体应用迁移到微服务..."
目标
Objective
方法名
"请重构这段代码..."
约束
Key Constraints
接口规范 / Config
"使用 Java 17 Record 特性,避免使用 Lombok,需包含 Javadoc。
