介绍:编写提示词与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中文文档等,等你加入~

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐