提示词工程入门与实践
提示词工程与实践
介绍:编写提示词与AI交互,提高开发效率
引言:当Java遇见AI
作为一名Java开发者,你是否已经习惯了Ctrl+C、Ctrl+V从Gitee社区获取代码片段?
现在,AI编程助手(如通义灵码、GPT等)正将这种体验提升到一个全新的维度。然而,你是否也曾遇到这样的困惑:
- “为什么AI生成的代码总是跑不起来?”
- “我明明想要一个单例模式,它却给我了一个普通的工具类?”
- “这个报错信息扔给AI,它回复的解决方案完全不对…”
问题的根源,往往不在于AI的能力,而在于我们与AI沟通的方式——提示词。
一、什么是提示词
提示词,就是你向大模型提出的问题、指令或提供的上下文信息。你可以把它理解为:
- 调用API:就像你调用一个方法 aiService.generateCode(requirement),提示词就是你传入的 requirement 参数。参数越模糊,返回结果越不可控;参数越精确,结果越接近预期。
- 一份需求规格说明书: 你给AI的需求说明书越详尽、无歧义,它“开发”出的代码质量就越高。
对于开发者而言,掌握提示词工程,意味着:
1.提升开发效率:快速生成模板代码、单元测试、SQL、文档注释
2.降低调试成本:精准地向AI描述Bug,获取可行的解决方案
3.激发创新灵感:让AI充当你的技术搭档,提供多种技术方案的设计与对比
二、提示词的核心设计模式
编写好的提示词,就像在应用我们熟悉的软件设计原则。让我们用Java世界的概念来类比。
模式一:单一职责原则
反面教材(模糊请求):
-- "帮我写一个用户管理功能,包括登录注册、还要有权限"
正面教材(单一职责):
-- 提示词:
“请用Java + Spring Boot编写一个用户注册的RESTful API接口.
要求:
1.路径为 /api/auth/register,请求方法为 POST.
2.接收JSON参数:username (字符串,非空),email (字符串,邮箱格式),password (字符串,最小长度6位).
3.对密码进行BCrypt加密后存入数据库.
4.返回统一的JSON响应体,包含code, message, data字段.
5.需要处理参数校验失败的情况.”
解读:第二个提示词职责清晰、边界明确,AI几乎不可能给出错误的代码.
模式二:依赖注入-提供充足的上下文
就像Spring框架需要@Autowired依赖一样,AI也需要你“注入”必要的上下文信息。
关键的上下文要素:
-- 角色设定:"你现在是一名资深Java架构师,精通Spring Cloud微服务架构."
-- 技术栈:"使用Java 17、Spring Boot 3.x、MyBatis-Plus"
-- 代码风格:"请遵循阿里云开发者规范"
-- 已有代码片段:提供相关的类、方法或错误信息
示例-重构代码
提示词:
-- "我正在重构一个技术栈落后的Java项目,请将下面这个使用Vector和synchronized的方法,
重构为使用ConcurrentHashMap等并发容器的高性能版本
要求:保持线程安全,但提升并发读写性能"
原有代码:
public class OldCache {
private static Vector<String> cache = new Vector<>();
public static synchronized void addItem(String item) {
cache.add(item);
}
// ... 其他方法
}
模式三:模板方法模式-结构化提示词
通用模板
# 角色
扮演一个[具体的角色,如Java性能优化专家]
# 任务
请完成以下任务:[清晰描述任务]
# 上下文 背景信息
-- 提供相关业务、技术背景
-- 已有代码:[粘贴相关代码]
-- 错误信息:[提供完整的异常堆栈]
# 要求|约束
-- 必须使用[特定的技术或库].
-- 代码格式要求:[如使用Lombok,Lambda简化代码等]
-- 输出要求:[如"只输出代码,不解释"|"分步骤解释你的思路"]
# 示例(可选)
-- 例如,我希望最终的代码像这样:[给出输入输出示例]
实战篇
示例:一个java开发者的提示词工作流
# 场景
为商品服务生成CRUD代码和单元测试
第一轮:生成核心领域对象和API
提示词:
"扮演一个Spring Boot专家.请为Product(商品)领域生成以下代码:
1.Entity实体类Product,包含字段:id(Long),name (String),price(BigDecimal),stock(Integer),createTime(LocalDateTime)
2.对应的Mapper接口ProductMapper
3.Service接口ProductService及其实现类ProductServiceImpl,包含基础的save,findById,findAll,deleteById方法
4.Restful Controller ProductController,暴露对应的CRUD端点.
要求:使用Lombok简化代码,在Service层方法上添加@Transactional注解,Controller返回统一的Result对象."
AI会生成一套完整的、可直接使用的CRUD代码骨架
第二轮:基于生成的代码,请求编写单元测试
提示词:
"非常好!现在请为上面生成的ProductServiceImpl类编写JUnit 5和Mockito单元测试.
要求:
1.对findById方法,测试“查找成功”和“商品不存在”两种场景
2.对save方法,测试保存成功,并验证传入的参数被正确传递到了Mapper层
3.使用@Test进行依赖注入
4.测试类名为ProductServiceImplTest"
第三轮:调试与优化
eg:如何测试运行失败,请将错误信息提供给AI
提示词:
"运行我刚刚生成的测试时,save测试失败了,报错信息是:Argument(s) are different!.以下是完整的堆栈信息和我的测试代码:[粘贴错误信息和测试代码].请分析原因并提供修复后的测试代码."
通过这种“分步迭代、持续集成”的方式,你可以像管理一个项目一样,管理与AI的协作过程,确保最终产出的高质量。
提示词工程不是魔法,而是一项可以习得并熟练的工程技能。
本人正在打造技术交流群,欢迎志同道合的朋友一起探讨,一起努力,通过自己的努力,在技术岗位这条道路上走得更远。QQ群号:952912771 备注:技术交流 即可通过!
加入技术群可以获取资料,含AI资料、Spring AI中文文档等,等你加入~
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)