Cursor AI 提示词使用技巧完全指南
一、提示词基本原则
1. 明确性
❌ 模糊的提示:
"这段代码有问题吗?"
✅ 明确的提示:
"请分析这段代码在并发场景下可能存在的问题,重点关注:
1. 线程安全性
2. 死锁风险
3. 资源竞争
4. 性能瓶颈"
2. 结构化
❌ 无结构提示:
"帮我写个用户管理的代码"
✅ 结构化提示:
"请帮我创建一个用户管理模块,需要:
1. 核心功能:
- 用户注册
- 登录认证
- 信息修改
- 密码重置
2. 技术要求:
- Spring Boot 3.x
- JPA 持久化
- JWT 认证
3. 安全考虑:
- 密码加密
- 输入验证
- 权限控制"
二、常见场景示例
1. 代码生成
实体类生成"请生成一个订单实体类,要求:1. 使用 JPA 注解2. 包含字段: - 订单ID(雪花算法) - 创建时间 - 更新时间 - 订单状态(枚举) - 支付金额(BigDecimal) 3. 需要添加: - Lombok 注解 - 审计字段 - 乐观锁 - 必要的索引 4. 包含与其他实体的关联: - 用户(多对一) - 订单项(一对多)"
生成的代码示例:
@Entity
@Table(name = "t_order")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private BigDecimal amount;
@Enumerated(EnumType.STRING)
private OrderStatus status;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
// ... 其他生成的代码
}
2. 代码优化
性能优化"这是一个处理大量数据的方法,请优化它的性能:1. 当前问题: - 处理 100w 条数据需要 30s - 内存使用过高 - CPU 使用率不理想2. 优化目标: - 处理时间减少 50% - 内存使用控制在 2GB 以内 - 充分利用多核 CPU3. 约束条件: - 保证数据一致性 - 不能修改接口定义 - 需要考虑可维护性"
原始代码:
public List processUsers(List users) {
return users.stream()
.filter(user -> user.getStatus().equals("ACTIVE"))
.map(user -> {
UserDTO dto = new UserDTO();
BeanUtils.copyProperties(user, dto);
return dto;
})
.collect(Collectors.toList());
}
优化建议示例:
public List processUsers(List users) {
return users.parallelStream()
.filter(user -> "ACTIVE".equals(user.getStatus()))
.map(this::convertToDTO)
.collect(Collectors.toCollection(
() -> new ArrayList<>(users.size())
));
}
private UserDTO convertToDTO(User user) {
return UserDTO.builder()
.id(user.getId())
.name(user.getName())
// ... 直接设置属性而不是使用 BeanUtils
.build();
}
3. 问题诊断
并发问题诊断"在并发场景下,这段代码出现了数据不一致问题:1. 问题现象: - 高并发时库存出现负数 - 部分订单重复处理 - 数据库死锁频繁2. 运行环境: - 8核16G服务器 - MySQL 8.0 - 并发用户 1000+3. 请提供: - 问题根因分析 - 解决方案 - 性能影响评估 - 改进建议"
问题代码:
@Service
public class StockService {
@Autowired
private StockRepository stockRepository;
public boolean deductStock(Long productId, int amount) {
Stock stock = stockRepository.findById(productId).orElse(null);
if (stock != null && stock.getQuantity() >= amount) {
stock.setQuantity(stock.getQuantity() - amount);
stockRepository.save(stock);
return true;
}
return false;
}
}
4. 测试用例生成
单元测试生成"请为这个支付服务生成单元测试:1. 测试场景: - 正常支付流程 - 余额不足 - 重复支付 - 系统异常2. 技术要求: - JUnit 5 - Mockito - AssertJ3. 测试覆盖: - 参数验证 - 业务逻辑 - 异常处理 - 边界条件"
生成的测试代码示例:
@ExtendWith(MockitoExtension.class)
class PaymentServiceTest {
@Mock
private PaymentRepository paymentRepository;
@InjectMocks
private PaymentService paymentService;
@Test
void shouldProcessPaymentSuccessfully() {
// Given
PaymentRequest request = createValidPaymentRequest();
when(paymentRepository.findById(any()))
.thenReturn(Optional.empty());
// When
PaymentResult result = paymentService.processPayment(request);
// Then
assertThat(result.isSuccess()).isTrue();
verify(paymentRepository).save(any(Payment.class));
}
// ... 其他测试方法
}
三、高级技巧
1. 迭代优化
先提供基础需求,然后基于返回结果逐步完善:第一次提示:
"请生成一个基础的用户注册接口"
基于返回结果继续优化:
"请为刚才的接口添加:
1. 参数验证
2. 错误处理
3. 日志记录"
最后完善细节:
"请补充:
1. API 文档注解
2. 单元测试
3. 性能优化建议"
2. 上下文关联"基于之前生成的用户服务,请:1. 添加与订单服务的集成2. 处理跨服务调用的异常3. 添加必要的日志追踪4. 确保与现有代码风格一致"
3. 代码审查"请审查这段代码,关注:1. 代码质量: - 命名规范 - 代码结构 - 注释完整性 2. 技术实现: - 设计模式使用 - 异常处理 - 资源管理 3. 性能相关: - SQL 优化 - 缓存使用 - 并发处理 4. 安全考虑: - 输入验证 - 权限控制 - 敏感数据处理"
四、最佳实践
-
提供足够上下文
-
技术栈版本
-
运行环境
-
业务背景
-
性能要求
-
明确输出期望
-
代码风格
-
文档格式
-
性能指标
-
测试覆盖率
-
分步骤提问
-
先确认方向
-
再完善细节
-
最后优化改进
-
及时反馈
-
如果生成的代码不符合预期,及时提供具体的改进建议
-
说明具体的问题和期望的结果
-
持续优化
-
收集常用的提示词模板
-
根据实际效果调整提示词
-
建立个人的最佳实践库
记住:好的提示词应该像写技术文档一样清晰、结构化,并且包含足够的细节信息。通过不断实践和总结,你可以建立起自己的提示词库,提高与 AI 助手的协作效率。