思考笔记

李文业的思考笔记


  • 首页

  • 关于

  • 分类

  • 归档

《Cursor 高阶使用手册(Java 后端工程师版)》

发表于 2025/11/21 | 分类于 AIGC
1
特别说明:此文由ChatGPT生成,后续由我本人编辑、修改而成。

1 核心理念:思考与执行分离

没有人会让建筑工人一边砌砖一边设计图纸。这个道理显而易见:设计需要全局视野和反复推敲,施工需要专注细节和高效执行——两种工作模式截然不同,混在一起只会两头都做不好。建筑行业早就想明白了这一点,所以有了建筑师和施工队的分工。软件开发也是如此,在使用 Cursor 时,你应当将问题推理和代码编写明确区分开来——先让 AI 帮你规划解决方案,确认无误后,再让它执行编码。

Cursor 为此提供了两种模式:Plan 模式是你的“作战室”,在这里与 AI 讨论思路、澄清需求、制定计划,让它复述你的要求,给出实施步骤,甚至画出架构草图;Agent 模式是你的“施工队”,一旦方案敲定,Agent 会按照计划自主探索项目、修改代码,像一个勤勉的工程师那样完成任务。

一个典型的协作流程

假设你要实现一个用户积分系统。错误的做法是直接告诉 Cursor:“帮我实现用户积分功能”,然后看它自由发挥。正确的做法是分两步走:

第一步:Plan 模式讨论方案

我需要实现一个用户积分系统,包括积分获取、消费和查询功能。请先不要写代码,帮我分析一下:

  1. 需要哪些数据表?
  2. 需要哪些接口?
  3. 有哪些边界情况需要考虑?

Cursor 可能会回复:需要 user_points 表记录余额,points_record 表记录流水;需要考虑并发扣减的原子性问题;建议使用乐观锁或数据库事务… 你审核这个方案,发现它漏掉了积分过期的需求,于是补充:“积分有有效期,需要支持过期自动失效。”

第二步:确认后切换 Agent 模式执行

方案敲定后,告诉 Cursor:“方案确认,请按照上述设计实现代码。”Agent 会根据之前讨论的方案,自动创建实体类、Mapper、Service 和 Controller。这个“复述仪式”看起来多了一步,但它能避免方向性错误,省去大量返工。

中间产物:你们之间的“合同”

如果任务复杂,不妨要求 AI 先输出一份 Markdown 格式的设计方案。这份中间产物就是你们之间的“合同”:

请把刚才讨论的积分系统设计整理成一份 Markdown 文档,包括数据表结构、接口定义和关键逻辑说明。保存为 docs/积分系统设计.md。

确认文档无误后,后续的编码就有了明确的依据。即使中途会话中断,这份文档也能帮助你快速恢复上下文。在 Chat 思考阶段,你是架构师,与 AI 一起推演方案;在 Agent 执行阶段,AI 是工程师,负责落实细节。这种分工不仅适用于软件开发,也适用于任何需要先想清楚再动手的工作。

2 多轮对话技巧

2.1 分支选择:在岔路口做出正确的决定

下棋的人都知道,一盘棋的胜负往往取决于几个关键的分支选择,走错一步,后面再怎么努力都难以挽回。与 AI 对话也是如此——面对复杂任务,Cursor 可能会提出多种方案,或者在执行过程中出现不同的分支路径,你的任务是在这些岔路口做出正确的选择。

实战案例:选择缓存方案

你让 Cursor 为热点数据添加缓存,它可能会提出三种方案:1) 使用 Spring Cache + Redis;2) 使用 Caffeine 本地缓存;3) 使用 Guava Cache。这时不要急着让它实现,先问清楚每个方案的优缺点:

请分析这三种缓存方案的适用场景、优缺点和性能差异,帮我选择最合适的方案。我们的场景是:QPS 约 1000,数据更新频率较低,需要支持集群部署。

Cursor 会解释:本地缓存性能最好但不支持集群同步,Redis 支持集群但有网络开销… 根据你的场景,它可能建议使用两级缓存:本地缓存 + Redis。这种“先问方案,再选择,最后执行”的模式,能避免在错误的技术路线上浪费时间。

2.2 链式思考:让 AI 一步一步推理

1956年,认知心理学家乔治·米勒发表了著名论文《神奇的数字7±2》,揭示了人类工作记忆的容量限制。有趣的是,大语言模型也面临类似的挑战——当问题足够复杂时,一步到位往往会出错。解决办法是链式思考(Chain-of-Thought):让 AI 逐步分析问题,而不是直接给出最终答案。

实战案例:排查 NPE 异常

当你遇到一个难以定位的空指针异常,可以这样提示:

项目启动时报 NullPointerException,堆栈信息如下:[粘贴堆栈]

请使用链式思考方法分析:

  1. 这个异常发生在哪一行?
  2. 哪个变量可能为 null?
  3. 这个变量是在哪里被赋值的?
  4. 为什么在这个时机它可能还没被赋值?
  5. 应该如何修复?

AI 会按步骤分析:异常发生在 UserService 第 42 行,userRepository 为 null,它应该通过 @Autowired 注入,但可能因为循环依赖导致注入失败… 这种逐步推理比直接问“怎么修”更容易找到根本原因。

2.3 保持目标一致性:别让 AI 跑偏

心理学家丹尼尔·卡尼曼在《思考,快与慢》中描述过一种现象:人们在解决复杂问题时,常常不知不觉地偷换了问题本身。AI 也有类似的倾向——它可能在推理过程中逐渐偏离你的真正目标。

实战案例:优化查询性能

你让 Cursor 优化一个慢查询,它可能会热情地重构整个数据访问层,引入新的 ORM 框架,甚至建议更换数据库… 这时要及时拉回来:

停一下。我的目标只是优化这一个查询的性能,不需要重构整个数据层。请聚焦在:

  1. 分析当前 SQL 的执行计划
  2. 建议合适的索引
  3. 优化 SQL 写法

其他架构调整不在本次范围内。

如何防止跑偏?经常性地在提示中重申最终目标或关键约束;每轮回复后,先验证思路是否仍围绕目标;必要时直接纠偏:“请关注 XXX 目标,不要偏离 YYY 方面”。就像长途旅行需要不断核对地图,与 AI 的长对话也需要反复校准方向。

2.4 绕开错误链路:及时止损

有时候你会发现,Cursor 正沿着一条错误的道路推理——可能是误解了需求,也可能是采用了不合适的技术方案。这时最重要的是及时止损,不要试图在错误的基础上修修补补,那只会越陷越深。

实战案例:事务处理的误区

你让 Cursor 实现一个订单创建功能,它生成的代码在循环中逐条插入订单明细,没有使用事务。你指出问题后,它加了 @Transactional,但注解加在了私有方法上(这在 Spring 中不生效)。这时不要继续在这个方向上修补,而是重新开始:

刚才的实现有事务问题。让我们重新来:

  1. 首先,请说明 Spring 事务的正确使用方式
  2. 然后,重新设计这个订单创建流程,确保原子性
  3. 考虑异常情况下的回滚策略

具体怎么做?首先澄清问题或需求,消除 AI 可能的误解;明确指出之前方案的问题;必要时缩小问题范围,从更基础的问题开始,逐步建立正确的推理链路。你还可以通过 .cursorrules 文件来限制 AI 的修改范围与风格。一旦发现错误趋势,立即重置思路或回滚——在错误的路上走得越远,回头的代价就越大。

3 提示词模板

语言学家沃尔夫提出过一个著名假说:我们使用的语言,会影响我们思考的方式。在与 AI 协作时,这一假说同样适用——你如何表达需求,直接决定了 AI 如何理解和执行。下面是几个经过验证的提示词模板,专为 Java 后端开发者设计。

3.1 “先画接口,不要写代码”

建筑师不会在画完图纸之前就开始砌砖。同样,开发新模块时,你可以这样提示:

我需要实现一个商品库存管理模块,包括:查询库存、扣减库存(需要支持批量)、库存预警通知。

请先设计接口:

  1. Controller 层的 API 定义(路径、方法、参数、返回值)
  2. Service 层的方法签名
  3. 请求和响应的 DTO 类结构

不要写实现代码,我们先确认设计。

Cursor 会输出清晰的接口蓝图,你确认设计合理后再让它生成实现。这一策略体现了推理与编码分离的思想——代码落地前,先确保设计经过充分推演。

3.2 “伪代码先出”

当实现复杂功能时,直接写代码容易陷入细节。不如先让 AI 产出伪代码:

我需要实现一个分布式锁服务,基于 Redis。请先用伪代码描述实现思路:

  1. 加锁的流程(包括重试机制)
  2. 解锁的流程(包括防止误删其他线程的锁)
  3. 锁续期的机制

用中文注释写清楚每一步的逻辑,确认无误后再填充具体代码。

这就像先写提纲再写文章。Cursor 会先给出详细的步骤说明,你审核伪代码确认无误后,再让它填充细节。两阶段输出,能大幅减少来回修改。

3.3 “先别急着写”

这是一个简单但极其有效的模板:

我需要实现一个定时任务,每天凌晨2点清理30天前的日志数据。清理时要分批删除,避免锁表。同时要记录清理结果,如果失败需要告警。

在写代码之前,请先复述一下你理解的需求,确保我们在同一页面上。

Cursor 会用自己的话总结需求,你可以校验它的理解是否正确。如果有误解可以立即纠正。这就像医生在手术前确认患者信息——一个小小的确认步骤,可以避免方向性错误。

3.4 “逐步求精”

优化代码时,一步到位的重构往往风险很高。不如让 AI 渐进式改进:

下面这段查询代码性能较差,请逐步优化:

[粘贴代码]

要求:每次只做一项改进;解释改进的原因和预期效果;保持原有接口不变;等我确认后再进行下一步。

Cursor 可能会这样回复:“第一步优化:将循环内的数据库查询改为批量查询。原因:当前代码在循环中逐条查询用户信息,N 次循环就有 N 次数据库往返,改为批量查询后只需 1 次。” 你确认后,它再进行第二步优化。每次改动都在掌控之中,也方便定位问题。

3.5 “禁止使用某技术/库”

如果项目有技术选型限制,可以直接告诉 AI:

实现时请遵守以下约束:

  • 不要使用 Lombok(项目未引入)
  • 不要使用 Java 8 以上的语法特性(兼容性要求)
  • 不要直接操作 Thread,使用线程池
  • 不要硬编码配置值,使用 @Value 注入
  • 不要使用 System.out.println,使用 Logger

通过列出禁止事项,可以有效防止 AI “越界”,确保生成的代码符合项目规范。

3.6 “对比分析”与“代码审查者视角”

当你不确定该选哪种方案时,可以要求对比分析:

请对比分析以下两种实现方式的优缺点,并给出推荐:
方案A:使用消息队列异步处理
方案B:使用 @Async 注解异步处理

从以下维度分析:可靠性、复杂度、可观测性、运维成本

也可以让 AI 扮演代码审查者:

请以高级工程师的视角审查以下代码,指出:潜在的 bug 或边界情况、性能问题、安全漏洞、代码规范问题、可维护性改进建议。

建议:团队可以沉淀自己的高频 Prompt 库,将常用场景(登录认证、CRUD 接口、分页查询等)的提示整理成模板。新人也能快速上手,提示越清晰结构化,AI 输出就越准确。

4 Java 后端场景专用技巧

4.1 接口设计:先契约,后实现

在微服务架构中,接口就是服务之间的“合同”,合同写得不清楚,后面就会纠纷不断。使用 Cursor 进行接口设计时,最佳实践是先编写接口规范,再写实现——让 Cursor 根据需求文档先输出接口设计草图(类名、方法名、参数和返回值、HTTP 路径和动词),然后由你审核调整,最后再生成实现代码。

提示词示例:

根据以下需求,设计用户管理模块的接口(方法签名和请求/响应结构),先不要实现代码:

功能需求:用户注册(邮箱、密码、昵称)、用户登录(返回 JWT token)、获取当前用户信息、修改用户资料。

设计要求:RESTful 风格;统一响应格式 {code, message, data};需要考虑参数校验注解。

对于需要与前端对接的 API,Cursor 还能生成接口文档说明,帮助前后端对齐契约。接口设计阶段多花的时间,会在后续开发中成倍节省。

4.2 数据库操作:MyBatis 与 JPA

数据库操作是后端开发的核心。Cursor 可以帮你快速生成 Mapper 和 Repository 代码,但需要明确告诉它你使用的技术栈。

MyBatis 场景:

根据以下表结构,生成 MyBatis 相关代码:

1
2
3
4
5
6
7
8
9
CREATE TABLE t_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(32) NOT NULL,
user_id BIGINT NOT NULL,
total_amount DECIMAL(10,2),
status TINYINT DEFAULT 0,
created_at DATETIME,
updated_at DATETIME
);

请生成:Order 实体类(使用驼峰命名)、OrderMapper 接口(包含 CRUD 和按用户ID查询)、OrderMapper.xml 文件、复杂查询使用动态 SQL。

JPA 场景:

使用 Spring Data JPA,根据上述表结构生成:Order 实体类(包含 @Table、@Column 注解)、OrderRepository 接口、包含自定义查询方法(按状态统计、按时间范围查询)、使用 @Query 注解的复杂查询。

4.3 Filter 链路控制与异常处理

Web 应用中的过滤器链路,就像流水线上的工序——顺序错了,产品就废了。添加新过滤器时,要明确告诉 Cursor 它在链路中的位置:

请创建一个新的过滤器 AuditFilter,用于记录请求日志,插入到 SecurityFilter 之后执行。需要记录:请求路径、方法、参数;响应状态码、耗时;用户 ID(从 SecurityContext 获取);异常信息。日志格式使用 JSON,方便后续分析。

对于异常处理,优雅的统一封装是后端服务成熟度的标志:

请实现一个全局异常处理机制:

  1. 创建统一响应类 Result,包含 code、message、data 字段
  2. 创建业务异常类 BusinessException,包含错误码枚举
  3. 创建全局异常处理器,处理 BusinessException、MethodArgumentNotValidException、其他未知异常
  4. 错误码枚举至少包含:SUCCESS、PARAM_ERROR、UNAUTHORIZED、FORBIDDEN、NOT_FOUND、SYSTEM_ERROR

需要注意的是,AI 生成的业务逻辑有时会忽略安全细节——比如登录代码可能缺少密码加密。这些细节需要在提示中明确要求,或在代码生成后手动检查补充。

4.4 单元测试与性能优化

让 Cursor 帮你生成测试代码:

为以下 Service 类生成单元测试:[粘贴 Service 代码]

要求:使用 JUnit 5 + Mockito;Mock 所有依赖的 Repository 和外部服务;覆盖正常流程和异常流程;边界条件测试(空值、极限值);使用 @DisplayName 注解描述测试场景;遵循 Given-When-Then 模式。

让 Cursor 帮你分析性能问题:

以下接口响应时间达到 2 秒,请帮我分析可能的性能瓶颈:[粘贴代码]

请从以下角度分析:数据库查询(N+1 问题、缺少索引、全表扫描);循环中的重复计算或 IO 操作;可以并行化的操作;可以缓存的数据;不必要的序列化/反序列化。

4.5 Request/Response 契约定义

前后端协作中,数据格式的约定往往是沟通成本最高的环节。Cursor 可以帮你快速定义 DTO/VO 类:

请求包含 userName 和 password 两个字段,返回结果包含 userId、token 和过期时间,请定义相应的请求和响应类。

要求:添加参数校验注解(@NotBlank、@Size 等);添加 Swagger 注解描述字段含义;敏感字段(如密码)在日志中脱敏。

使用 Cursor 定义契约的好处是速度快且格式统一。但前提是你的描述足够清晰——AI 无法凭空猜测业务含义,字段用途、类型约束这些信息,都需要你提供。

5 代码重构策略

5.1 指定局部修改:手术刀而非大锤

重构代码时,最怕的是牵一发动全身——让 AI 修改一个方法,结果它把整个类都重写了,这种事并非没有发生过。如何避免?使用选区编辑:在编辑器中选中需要修改的代码片段再提问,AI 的作用范围就局限在选中部分;在提示词中明确限定范围;使用 @file 引用特定文件。

明确边界的示例:

请仅修改 OrderService.createOrder 方法中的库存扣减逻辑:

  • 当前是先查询再更新,存在并发问题
  • 请改为使用乐观锁(版本号)方式
  • 不要修改方法签名
  • 不要修改其他方法
  • 不要修改 OrderMapper

Manual 模式下,AI 会严格执行你的指令。若 AI 产出修改超出范围,及时撤回并重新强调边界。

5.2 使用 diff 审核:每次修改都要过目

Git 的发明者林纳斯·托瓦兹有句名言:“Talk is cheap. Show me the code.”在与 AI 协作时,这句话可以改成:“Show me the diff.” 每次让 AI 修改代码后,都应该要求它输出变更摘要或 diff,尤其在 Agent 模式下进行跨文件修改,更要逐一对比原始代码和修改后的区别。

审核清单:是否有意外删除的代码?是否有意外添加的依赖?变量名、方法名是否被意外重命名?是否修改了不应该动的文件?格式变化是否过多?逻辑是否与预期一致?

养成先 diff 审核再接受修改的习惯,相当于给 AI 的每次“提交”都做一次代码评审。

5.3 避免格式化污染

有时 AI 修改代码会顺带调整格式、缩进、import 语句,导致大段无关变动,给代码审查和合并带来不必要的困扰。几种策略:在提示词中明确要求“不修改代码风格和格式”;分步进行,先让 AI 修改逻辑,确认无误后再单独处理格式;使用 .cursorrules 文件指定代码风格约束。

.cursorrules 示例:

1
2
3
4
5
6
7
# 代码风格约束
- 使用 4 空格缩进,不使用 Tab
- 大括号不换行(Java 风格)
- import 语句按字母顺序排列
- 不要自动优化 import
- 保持原有的空行风格
- 不要添加或删除注释(除非明确要求)

一旦发现 AI 输出中有大段格式改动,退回上一步并强调“保持原代码格式不变,仅做必要改动”。目标是让每次提交尽可能小而集中。

5.4 多文件协作:渐进式推进

重构经常涉及多个文件的同步修改——方法签名改了,调用它的地方也要跟着改。Cursor Agent 模式可以跨文件全局重构,但务必验证所有相关文件都正确更新。稳妥的做法是分步骤多文件修改:

我需要将 UserService.getUser(Long id) 方法重命名为 getUserById(Long id)。请按以下步骤执行:

  1. 首先列出所有调用这个方法的文件
  2. 修改 UserService 中的方法名
  3. 逐个修改调用方,每修改一个文件后暂停等我确认
  4. 最后检查是否有遗漏

这种渐进式协作可以与 Cursor 的任务切换功能相结合:完成一组文件的修改后,使用 /newtask 开启新任务,处理下一组相关文件。切换时让 AI 总结前一任务成果,保证上下文连贯。

6 项目协作与上下文管理

6.1 使用 .cursorrules 定义项目规范

.cursorrules 文件是 Cursor 的规则配置文件,放在项目根目录,可以告诉 AI 这个项目的技术栈、编码规范和特殊约束。

Java 后端项目的 .cursorrules 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 项目概述
这是一个基于 Spring Boot 2.7 的电商后端项目。

# 技术栈
- Java 11、Spring Boot 2.7.x、MyBatis Plus、MySQL 8.0、Redis、RabbitMQ

# 编码规范
- 使用阿里巴巴 Java 开发手册规范
- Controller 层只做参数校验和结果封装,业务逻辑放在 Service 层
- 使用 @Slf4j 记录日志,不使用 System.out
- 异常使用自定义 BusinessException,不要直接抛出 RuntimeException
- 数据库字段使用下划线命名,Java 属性使用驼峰命名

# 项目结构
controller/、service/、mapper/、entity/、dto/、vo/、config/、util/

# 禁止事项
- 不要使用 Lombok(项目未引入)
- 不要使用 Java 8 以上的语法
- 不要在循环中进行数据库查询
- 不要硬编码配置值

有了这个文件,Cursor 在生成代码时会自动遵守这些规范,大大减少后期修改。

6.2 多人协作与上下文传递

人类团队协作的核心挑战之一是知识的传递。新人接手项目时,最痛苦的往往不是代码本身,而是理解“为什么这样写”的上下文。与 AI 协作也面临类似问题:如何让下一位开发者(或下一次会话)理解之前的工作?

一个有效的方法是维护一个 progress.md 或 project-status.md 文件。在每次会话结束时,让 Cursor 将完成的功能、遇到的问题和解决方案写入其中:

本次会话结束时,将你的工作日志记录在 @project-status.md 文件中,包括:已实现的功能点、修改的文件清单、遇到的问题和解决方案、未完成事项和后续计划、需要注意的技术债务。

这样,当另一位同事接手时,只要查看这个文件,就能了解上一开发环节做了什么。把这些日志文件纳入版本控制,实际上就是把 AI 对话的精华持久化了。

6.3 版本控制对话与快速上下文重建

除了文本日志,一些团队还会将重要的对话导出为 Markdown 记录,存入项目文档。这可以视为某次 AI 辅助开发的“剧本”——日后查阅,可以明白当初 AI 和开发者是如何一步步做出决策的。对话记录的价值包括:技术决策的依据、问题排查的线索、新人培训材料、审计追溯。需注意对话记录中可能包含敏感信息,在公开之前要做好筛查或脱敏处理。

会话长度受限或意外中断时,如何让 AI 快速恢复上下文?如果之前有维护 project-status.md,新会话开始时直接将该文件提供给 AI:

请阅读以下文件了解项目上下文:

  • @.cursorrules:项目规范
  • @project-status.md:当前进度
  • @docs/积分系统设计.md:相关设计文档

上次我们完成了积分获取功能,今天继续实现积分消费功能。

Cursor 读取这些文件后,就相当于“记起”了项目当前状态和最近进展。建议每次会话结束都记录详细报告——这正是为下次重建上下文做的准备。

7 高阶自动化流

7.1 结构化任务:让 AI 按清单执行

软件工程师阿图·葛文德在《清单革命》中写道:面对复杂性,清单是最有效的武器。这一洞见同样适用于与 AI 的协作。Cursor Agent 模式可以将复杂任务拆解为结构化的子任务列表,并按序自动执行。

实战示例:开发一个完整功能

请按以下任务清单开发“用户收货地址管理”功能:

任务清单

    1. 设计数据表结构(用户地址表)
    1. 创建实体类和 Mapper
    1. 设计 API 接口(增删改查 + 设为默认)
    1. 实现 Service 层逻辑
    1. 实现 Controller 层
    1. 添加参数校验
    1. 编写单元测试
    1. 添加 Swagger 文档

请逐项执行,每完成一项更新清单状态,并等待我确认后再继续下一项。

Agent 会边执行边维护任务列表,每完成一项就勾掉并继续下一项。开发者可以在执行过程中插手调整——修改顺序、增加遗漏的步骤。

7.2 组合与拆分:灵活调度任务流

并非所有任务都适合线性执行。有时一个大任务需要拆分为并行的几部分,有时多个小任务可以合并一起做。Cursor 的 Plan 模式可以帮助制定任务拆解策略:

我需要开发一个“订单导出”功能,支持导出为 Excel 和 PDF。请帮我拆解任务:哪些部分可以并行开发?哪些部分必须按顺序?预计有哪些技术难点?建议的开发顺序是什么?

Cursor 可能会建议:并行部分(Excel 导出实现、PDF 导出实现);顺序部分(先实现通用的查询逻辑,再实现具体的导出格式,最后做异步导出和进度反馈);技术难点(大数据量导出需要分页处理,PDF 中文字体需要额外配置)。通过合理的拆解和组合,可以最大程度发挥 AI 的并行处理能力,让复杂任务流转更为顺畅。

7.3 中间产物:在流水线上设置检查点

在工业生产中,质量控制的关键是在流水线上设置检查点——不是等产品完成后才发现问题,而是在每个关键环节都进行检验。与 AI 协作的自动化流程也应如此,在最终代码生成前,要求 AI 产出一些过渡性的结果供审核。

常见的中间产物:

阶段 中间产物 用途
需求分析 需求确认清单 确保理解无误
方案设计 设计文档 确认技术方案
接口设计 API 定义文档 前后端对齐
编码前 伪代码 确认实现思路
编码后 变更清单 审核改动范围
测试前 测试用例设计 确认测试覆盖

归纳来说,高阶自动化流程并不意味着让 AI 一股脑完成所有事情。真正的效率来自于规划 → 核对 → 执行的循环:以中间产物作为检查点,串联起整个流水线。最终,我们获得的是一个由 AI 辅助运行的开发流程——既有分阶段的清晰产物,又能快速迭代。

结语

1997年,国际象棋世界冠军卡斯帕罗夫输给了 IBM 的深蓝计算机。这场对决之后,卡斯帕罗夫提出了一个新概念:“人机协作棋”——人类棋手与计算机组队,往往能击败单独的人类或单独的计算机。今天,我们与 Cursor 的协作正是这一理念的延续。AI 擅长的是速度、记忆和生成力;人类擅长的是判断、创意和把关。两者结合,能完成任何一方单独无法完成的任务。

本文介绍的技巧可以总结为几个核心原则:思考与执行分离——先在 Plan 模式讨论方案,确认后再用 Agent 执行;多轮迭代优于一步到位——让 AI 逐步推理、逐步改进,而不是一次性给出结果;中间产物即检查点——要求 AI 输出设计文档、伪代码等中间结果供审核;明确边界与约束——通过提示词和 .cursorrules 限定 AI 的行为范围;持久化 AI 的记忆——通过 progress.md 等文件实现上下文传递。

掌握这些技巧,你就能与 Cursor 搭档完成更复杂的开发任务。在实践中不断总结经验、完善提示词模板库,善于利用 Cursor 的新功能拓展能力边界。最终,AI 不是来取代你的,而是来放大你的。愿本手册能帮助你在日常开发中游刃有余,让 Cursor 成为真正的编程拍档,共同创造出更健壮优秀的后端系统。

看书110个月

发表于 2025/11/15 | 分类于 每月报告

1

十月份阅读情况不理想。看书231小时,低于原定目标的250小时。不仅没有完成目标,还在持续下降当中。这个趋势不太妙。

冥想符合预期。工作压力让我不得不用冥想来缓解紧张情绪。整个月冥想了38.75小时,跟上个月差不多。

接下来,我想跟大家分享一点我最近学习数学的快乐。

2

我业余时间会给高中生讲讲学习方法。上个月某一个周末,我给一个高三的学生讲如何构建知识体系。其中,就讲到了数学。

我在高中时期的数学成绩一般,最后高考成绩是123分。我在给学生讲的时候,我就发现自己在高中的时候,其实根本就没有学明白,简直就是套公式做题。

这一次重新看高中数学教材,才发现其实教材写得非常好,尤其是知识结构的编排和讲解。

高中数学是从“集合”开始讲起的。先是讲集合的概念和定义,然后讲集合之间的关系,最后讲集合的运算。

高中数学的知识大厦,不仅是以集合为基础,还是以集合的讲解方式往复构建的。

我在给学生讲解的过程中,不会纠结于知识点的细节,而是强调每个知识模块之间的对比和联系。

我发现这样的讲解方式,很适合记忆,或者说根本就不用背。只要你理解了,就能记住。

3

在给学生讲完如何构建知识网络之后,我觉得很兴奋。因为我终于把这一点给弄懂了。于是,我想做一个实验,就是自己从头到尾梳理一遍,或者说构建一遍高中数学的知识网络。

我一边看教材,一边跟AI讨论,很轻松地就构建了一小部分。我发现这个构建过程非常有趣,能让我看到知识之间的关联,甚至是互动关系。一个个知识点就像是在我的脑子里不断地生长出脉络一样,能让我看到不一样的全景图。

当然,我也遇到了困难。我遇到的困难就是急功近利。

我会不自觉地想要加快这个构建的速度,很想快点做完。还有,我会莫名其妙地想要做题,通过做题来证明自己。

你说可笑不可笑?我已经不需要参加考试了。但是当年考试的惯性还是影响着我,甚至试图支配我。

我不断告诉自己,你是在享受学习数学,享受这个学习的过程。你已经不需要参加考试,你已经不需要再向任何人证明自己了。

我现在不会专门抽出时间来做这件事。我就像是在读一套很喜欢的大部头书一样,有空了就读一读,刻意让自己不要着急。

4

在构建完高中数学的知识网络之后,我打算对自己所有看过的书,对自己所有感兴趣的知识,都做一遍这样的事情。

高中数学之后,我打算对高等数学、线性代数这些大学里面的数学学科,做一点延伸。

我的工作是一名程序员,工作上涉及到的知识也是五花八门,刚好做一遍梳理。

历史、心理、经济、金融、物理、化学、生物··· ···这些都可以玩一玩。

凭借我自己的阅读能力和积累,借助AI,这些都挺好玩的。

5

学习很好玩。如果哪一天我觉得学习没有乐趣,那肯定是我在哪里做错了。

截至2025年10月31日,我一共阅读了18675小时。预计会在2026年4月10日,完成第二个10000小时,也就是总共20000小时的阅读目标。

十一月份的阅读目标是460个番茄时间,也就是230个小时。

看书109个月

发表于 2025/10/12 | 分类于 每月报告

1

九月份阅读情况不理想。看书248小时,低于原定目标的280小时。

冥想符合预期。工作压力让我不得不用冥想来缓解紧张情绪。整个月冥想了42.75小时,比上个月足足翻了一倍。

接下来,我想跟大家分享一下我乐观的悲观人生观。

2

首先,我的人生观念底色是悲观的。

我做一件事情,会规划得非常清楚,生怕出什么意外。如果出现了一点点不符合我预期的状况,我就会变得很焦虑。

所以我是一个非常悲观的人,不会预期我“看得见的未来”会有什么惊喜,不会预期有最好的结果。只要结果不算太坏,就可以了。

如果预期太高,我总会觉得失望,所以我必须管理好自己的预期。

3

然后,因为我不会给自己“画饼”,所以我做的事情都是要有即时回报的。

也就是说,我不相信什么“延迟满足”,我要的就是“即时满足”。

就拿健身举例,我一健身完,出了汗,身体就觉得舒服了。这就是“即时满足”。我不会为了要有一个健美的身材去健身,去节食。

尤其是现在年纪渐长,我也越来越不会让自己忍着,逼着自己去做什么事。

4

最后,为什么我给自己的悲观人生观前面加了一个“乐观”呢?因为我会对“看不见的未来”充满希望。

我在刚开始看书的时候,不会知道看书一万小时、两万小时之后,我会有什么样的收获。我那时候只知道看书挺有意思的,我爱看书。

然而,即便我“看不见”这个未来,我还是会充满期待,兴致勃勃地去做。我想知道这个看不见的未来是什么样的。

健身也是一样。我不知道健身五年、十年之后,我会有什么样的变化。我现在只知道我喜欢健身完的感觉。

我尽可能地去做那些短期看能让我有“即时满足”,长期看很可能会有惊喜的事情。

5

这个月我的状态很差。从国庆假期开始,我就陷入到一种没精打采的状态里。不然也不会拖了这么久才写月报。

截至2025年9月30日,我一共阅读了18444小时。预计会在2026年4月15日,完成第二个10000小时,也就是总共20000小时的阅读目标。

十月份的阅读目标是500个番茄时间,也就是250个小时。

看书108个月

发表于 2025/09/01 | 分类于 每月报告

1

八月阅读不及预期。原定目标看书300小时,实际看书267个小时。

阅读目标没有达成的主要原因是我换了个工作。到了新工作单位,一切都要从头开始适应,也就没有那么多空闲时间看书。现在已经适应了大半个月,相信九月会开始步入正轨。

冥想仍旧不理想。上个月冥想21小时,创历史新低。

不过现在重新开始上班,又要面对工作压力,需要冥想的次数会多得多。也就是说,这个月的冥想时间会变多。

接下来,我跟大家分享一下我换了新工作之后的感受。

2

换了新工作之后,健身还是有坚持下来。

我六月初开始健身。那时候处于gap期间,时间多的是。八月十一号入职,我担心没时间健身,或者坚持不下去了。结果并没有。

整个八月份,我一共健身了25天。比上个月的18天,足足多了7天。上班并没有让我减少健身,反而让我对健身产生了“依赖”。

现在的单位十点上班。我一般会在8点15分到健身房,锻炼一个小时。如果当天有锻炼,一整天上班都不会很累。尤其是工作一段时间之后,站起来走两步,能感受到肌肉的微微酸痛,以及因为酸痛而产生的各种舒缓物质,例如内啡肽、多巴胺等等。

有那么一两天,我没去健身房锻炼。哪怕多睡了一会儿,早上上班还是会犯困,没精神。上班的精力明显不够集中,下班之后会感觉累的多。

我现在已经坚持健身快3个月。直觉告诉自己,我已经进入了“坚持循环”。不需要多费劲,我就能继续坚持下去。重申一次我的中长期愿景——两年后健康状况明显改善,二十年后生理年龄低于实际年龄五岁以上。

3

到了新公司之后,一个惊喜就是可以用AI辅助编程了。

新公司的电脑是最新款的Macbook Pro,还允许安装ChatGPT和Cursor。我新的工作日常就是用ChatGPT做我的任务管理助手,跟它讨论新需求的设计方案。方案确定之后,就用Cursor的agent模式来做编程。用现在流行的说法,就是Vibe Coding。

Vibe Coding是这样的——

  • 第一步:我把要实现的功能跟Cursor说,让它讲一讲它的理解是怎样的,准备如何写代码。
  • 第二步:在确认了Cursor的理解是对的之后,我会让它开始生成和修改代码。
  • 第三步:我会逐行检查和理解它所生成和修改的代码,并且进行测试。如果有问题,就会让它进行修改,直到没问题为止。

这就好比我有一个下属,我不用自己写代码,活儿都交给他干。我所需要做的就是,做好顶层设计,规划好实现路线,在他写完代码之后做检查和测试,给他提修改建议,确保最后的代码是没问题的。

这让我重新燃起了对编程工作的激情。我现在觉得编程很有意思,很好玩。我会很关心现在大模型的进展,尤其是AI辅助编程方面的改进。

一个行业,越是能让AI介入,就会发展得越快。

4

我用了十几年的番茄土豆APP,关停了。

番茄土豆APP,我主要是用来统计我的阅读时间。我在半年前就有危机意识,没来由地怕它不运营了,我就没有工具来继续统计看书时长。于是我就在ChatGPT的帮助下,写了一个网页demo来做番茄土豆APP的备胎。

万万没想到,八月中旬这个APP真的就没预兆地停止运营。我用DeepSeek查了一下,番茄土豆APP的所属公司已经注销了。

在Cursor的帮助下,我用了一个晚上来让备胎转正。经过几天的使用和小幅度迭代优化,现在新应用已经完美满足了我对统计看书时间的需求。

在这件事上,我突然多了一点对信息技术的感悟——所谓信息技术,其实也是一种叙事哲学,就是决定哪些有意义的信息,并且记录下来。

这个世界上每时每刻都会产生无数的信息,能保存下来的可能不到百万分之一。就拿我们个人来说,每天遇到那么多人,说了那么多话,碰到那么多事,我们能记住多少呢?我们只能记住,或者说想要记住那些对我们来说有意义的事情。

对我而言,阅读就是最有意义的一件事。记住在什么时候,看过什么书,对我来说非常重要。我会把这些数据集中在一起,在每个月结束的时候,用一篇月报来总结过去一个月的阅读情况。我会在每一年生日的时候,回顾这一年的阅读历程。从2016年到2025年的整整十年时间,我积累了整整十年的数据。

这些数据,不仅仅是数据,还是我的叙事基础。我会根据这些数据,画出一条折线图。线上的每个点,横坐标表示时间,纵坐标表示阅读时长。折线的高低起伏,就是我的状态起伏;折线的每个明显转折,对应着我人生的每个重大时刻。

没有信息技术,没有番茄土豆这个APP,我不可能积累前面十年的数据。没有AI,没有辅助编程技术,我很可能不会在APP关停之后做出新的应用,继续积累后面几十年的数据。

没有这些数据,很可能我就讲述不了这个版本的人生故事。

5

前面讲的三件事情,其实都跟阅读有关系。

健身给我带来好身体,让我更好地读书。

AI辅助编程让我对程序员的工作重新燃起激情,激发我的学习欲望,也就会有更多的阅读和思考。

也是因为有了AI辅助编程,我会更留意个人生活中对信息技术的需要,选择把哪些信息给保存下来,讲述我的人生故事。要做好这些,我必须继续学习,继续阅读。

截至2025年8月31日,我一共阅读了18196小时。预计会在2026年4月20日,完成第二个10000小时,也就是总共20000小时的阅读目标。

九月份的阅读目标是560个番茄时间,也就是280个小时。

《检视AI生成代码》

发表于 2025/08/29 | 分类于 AIGC
1
特别说明:此文由ChatGPT生成,后续由我本人编辑、修改而成。

副标题:为AI生成代码负全责的35条最佳实践

1983年,美国航空航天局的火星气候探测器在即将进入火星轨道时突然失联。事后调查发现,一个承包商使用英制单位编写了推进器控制软件,而NASA的系统期望的是公制单位。这个价值1.25亿美元的教训告诉我们:代码能运行,不代表它是正确的。

今天,当我们使用Cursor、ChatGPT等AI工具生成代码时,面临着类似的挑战。AI生成的代码往往语法正确、结构工整,但它是否真正理解了我们的业务需求?是否遵循了项目的安全规范?是否覆盖了所有边界情况?

本文整理了35条具体可执行的最佳实践,涵盖开发全过程——从提示编写、代码理解与验证,到调试、测试、重构、部署与维护,特别针对Java Web开发及Web3支付场景。通过这些实践,开发者可以在AI生成方案和代码后真正理解其逻辑,并能够独立评估、验证、调试、改造代码。


第一部分:清晰输入——掌握问题,控制AI输出方向

第1条:明确需求,提供完整上下文

核心原则:在向AI请求代码或方案时,描述越清晰、上下文越完整,AI生成的代码就越可控、越高质量。

1969年阿波罗11号登月时,NASA的任务控制中心有一条铁律:每一条指令都必须包含完整的上下文信息,因为地月通信有3秒延迟,任何误解都可能致命。与AI对话也是如此——AI并不在你的项目现场,它看不到你的数据库表结构,不知道你的团队规范,更不了解支付链路中的安全约束。

AI生成代码的本质是“基于上下文的概率预测”。如果你的提示模糊、缺少背景,AI会自行“脑补”:生成不存在的API、假设你使用了某个你根本没用的框架、忽略关键的安全校验。在支付场景里,这些错误不仅导致bug,还可能直接造成资金风险。

最佳实践:

  • 在Prompt中提供:业务背景 + 技术上下文 + 输出要求
  • 提供现有代码、DTO、数据库表结构作为“范例”
  • 明确性能、安全、日志等硬性约束
  • 使用@文件名引用项目中的代码文件

一句话记忆:“不要让AI猜你的需求,要让它知道你的世界。”


第2条:指定角色和风格,控制AI输出一致性

核心原则:通过在Prompt中明确指定AI的“角色”和“代码风格”,可以大幅提高生成代码的专业性、一致性和可维护性。

如果你雇佣一位新员工,你会给他一份员工手册,告诉他公司的规范和期望。与AI协作也是如此。没有角色设定时,AI倾向生成“最常见”的通用写法,而非你业务所需的专业实现。

不同角色会带来不同的输出倾向:

  • “资深Java后端工程师”:更重视事务边界、异常语义与分层设计
  • “Web3支付专家”:更关注签名算法、重放防护、回调验签、幂等性与合规
  • “代码审查员”:偏向安全与质量清单式检查
  • “系统架构师”:更擅长抽象API边界、模块依赖与数据流

可复用的Prompt模板:

1
2
3
4
5
6
你是一名资深Java后端工程师,熟悉Web3支付、Spring Boot、MyBatis和JJWT。
请严格遵循以下代码规范:
1. 控制器返回统一DTO(与项目现有结构一致)
2. 业务日志使用AuditLogService
3. 异常由GlobalExceptionHandler统一处理
4. Mapper层使用XML,不使用注解SQL

一句话记忆:“指定角色→输出更专业;约定风格→输出更一致。”


第3条:拆解任务,分步交付

核心原则:将复杂需求拆解为可控的小任务,让AI在每个步骤专注于单一目标,从而提升输出的准确性和可维护性。

认知心理学家乔治·米勒发现,人类的工作记忆一次只能处理7±2个信息块。AI也有类似的“注意力窗口”——当上下文过长、目标过多时,它会“遗忘”早先的关键信息,导致输出混乱。

在Java + Web3支付开发中,如果一次让AI写太多内容,模型会填补大量“假设”,导致幻觉API、错误设计或忽略边界条件。更好的做法是将复杂需求拆分为多个小步骤:先让AI生成DAO接口,再生成Service实现,最后编写Controller,而非一口气要求“生成整个模块的所有代码”。

建议的分步思路(以Web3支付接口为例):

  1. 先生成DTO与请求模型:确保参数命名、类型一致
  2. 实现核心加密逻辑:单独让AI生成签名与验签方法
  3. 写控制器层:调用Service逻辑并封装返回DTO
  4. 写Service层:业务逻辑串联,包括调用KYB、更新数据库、写日志
  5. 最后写集成测试:验证整个接口能跑通

一句话记忆:“小任务→小上下文→小风险→大可控。”


第4条:喂给AI示例,让输出对齐风格

核心原则:在Prompt中提供现有项目的示例代码,帮助AI学习并模仿现有风格,从而提升输出的一致性与可维护性。

1906年,巴甫洛夫通过条件反射实验发现,给狗提供正确的“刺激”,就能得到预期的“反应”。与AI协作也遵循类似逻辑——给它正确的示例,它就能模仿出符合你期望的代码。

如果不给AI现有示例,它会按照训练数据中最常见的模式生成代码,这往往与你项目的命名规范、日志格式、异常处理方式不一致。通过提供DTO、Mapper、日志工具类等示例,AI可以“对齐”到你的项目风格,生成的代码能更快落地。

示例的类型:

  • DTO与返回结构:统一命名与字段结构
  • 异常处理:提供GlobalExceptionHandler示例
  • 日志格式:给出AuditLogService调用方式
  • 数据库映射:贴现有MyBatis XML,确保SQL风格一致

一句话记忆:“给例子→模仿→风格统一→少返工。”


第5条:利用Cursor Rules统一AI输出规范

核心原则:通过项目级别的Cursor Rules文件,让AI在每次生成代码时自动遵循团队规范,无需在每次对话中重复说明。

如果每次与AI对话都要重复一遍项目规范,效率会大打折扣。Cursor提供了.cursor/rules/目录,你可以在其中创建规则文件,将编码规范、架构模式、领域约定固化下来。这些规则会在每次AI生成代码时自动应用,就像一位时刻在旁提醒的导师。

适合写入Rules的内容:

  • 架构约定:“Controller只调用Service,不直接访问Repository”
  • 命名规范:“Repository接口命名以Repository结尾”
  • 安全要求:“所有数据库查询必须使用参数绑定,禁止字符串拼接SQL”
  • 日志规范:“敏感字段必须脱敏后才能记录日志”

对于Web3支付项目,可以预设:

1
2
3
4
5
6
7
8
## 安全规范
- 签名算法必须使用官方SDK
- 回调必须验证签名和时间戳
- 私钥禁止出现在日志中

## 代码规范
- 异常统一使用GlobalExceptionHandler处理
- 所有Controller必须有权限注解

将规则文件纳入版本控制,确保所有成员的Cursor都应用相同规则,生成的代码风格就能保持一致。

一句话记忆:“规则写一次,团队受益永久。”


第6条:了解AI的边界,把AI当草稿机

核心原则:AI擅长生成初稿与提供参考,但它并不具备完整的上下文理解与推理能力。将AI的输出视为“可修改的草稿”,而不是“最终答案”,是负责任开发的关键。

2016年,AlphaGo战胜围棋世界冠军李世石时,解说员们惊叹于它的“创造力”。但事后分析表明,AlphaGo并不“理解”围棋——它只是在海量棋谱中学会了模式匹配。今天的代码生成AI也是如此:它能产出看似合理的代码,但不理解你的业务逻辑、安全约束和性能要求。

AI的局限性体现在:

  • 不理解代码:它是基于统计的语言预测器,不具备对业务逻辑的真实理解
  • 缺乏项目上下文:不知道你项目中的特殊规则、内部API和安全约束
  • 知识存在滞后性:训练数据有截止日期,新版框架和SDK可能不熟悉
  • 可能生成“幻觉”:当Prompt不完整时,会编造不存在的API或字段

AI更适合的任务:

  • 生成初稿:快速搭建DTO、Controller、测试用例等样板代码
  • 重构建议:优化可读性、简化逻辑
  • 代码讲解:让AI解释复杂逻辑,辅助理解

需要谨慎的任务:

  • 安全相关实现:如签名算法、权限控制、加密
  • 合规逻辑:KYB/KYC、支付审计、回调验证
  • 高并发性能优化:AI的建议未必适合你的生产场景

一句话记忆:“把AI当草稿机,而不是终稿机;生成交给AI,验证必须靠自己。”


第二部分:方案设计——先对齐思路,再落地实现

第7条:先与AI讨论方案,再让它写实现

核心原则:在让AI写代码之前,先与它讨论设计方案、技术选型和实现思路,确保方向正确,再让AI生成具体实现。

建筑师不会拿起砖头就开始砌墙。他们先画图纸、讨论结构、确认需求,然后才开始施工。软件开发也应如此。

如果直接让AI生成完整实现,它可能默认采用最通用的模式,导致与项目架构或安全要求冲突。更好的做法是采用“两阶段Prompt策略”:

阶段1:方案讨论

  • 目标:设计系统流程、模块边界、核心接口、异常机制
  • 输入:项目上下文、技术栈、日志规范、DTO示例
  • 输出:清晰的分层设计和数据流图

阶段2:实现生成

  • 目标:让AI按方案写实现
  • 输入:确认过的方案、接口签名、字段定义、依赖
  • 输出:可直接跑通的、符合规范的实现代码

在Cursor中,可以使用Plan模式进行方案讨论,确定方案后再切换到Agent模式执行具体实现。这种分离让你在关键决策上保持控制权。

一句话记忆:“先讨论,再实现;先对齐,再落地。”


第8条:区分Agent模式与对话模式的使用场景

核心原则:Cursor提供多种交互模式,不同模式适合不同任务。正确选择模式可以提高效率并降低风险。

2010年,心理学家丹尼尔·卡尼曼在《思考,快与慢》中区分了两种思维模式:系统1(快速直觉)和系统2(慢速推理)。与AI的交互也有类似的“快慢”之分。

Cursor提供了几种主要的交互模式:

  • Chat模式(Cmd+L):适合开放式讨论,让AI解释代码、规划架构、回答问题,其回复不会自动应用到代码
  • Agent模式:AI会自主规划并执行多步操作,适合具体的编码任务
  • Plan模式:只读模式,专门用于设计和讨论,AI不会修改任何文件

在Web3支付开发中的建议:

  • 用Chat模式讨论签名算法选型、安全策略、架构设计
  • 用Plan模式让AI帮你梳理复杂功能的实现步骤
  • 确认方案后,切换到Agent模式让AI执行具体实现
  • Agent模式下要更频繁检查生成结果,因为AI会连续执行多步操作

一句话记忆:“讨论用Chat,规划用Plan,执行用Agent。”


第9条:利用Memories保持跨会话的项目上下文

核心原则:使用Cursor的Memories功能保存重要的项目约定,让AI在后续对话中自动应用这些知识。

人类大脑有短期记忆和长期记忆之分。AI对话默认只有“短期记忆”——每次新对话都从零开始。但Cursor的Memories功能可以帮助AI建立“长期记忆”。

当你在Chat模式中与AI反复讨论某项约定时,Cursor可能会提示提取为Memory。经你确认,这些内容会保存为项目范围的规则,下次开启新对话也能自动应用。你也可以明确要求“请记住XX”,让Cursor主动将其记录。

例如,你曾与AI约定“我们项目使用DDD分层架构,所有数据库操作都通过Repository完成,不在Service编写SQL”。如果将此作为Memory保存,那么以后无论谁请求数据库相关代码,AI都会遵循这一约定。

使用建议:

  • 谨慎添加记忆——不要把随意的对话内容存为记忆
  • 确保记忆条目简洁明确
  • 定期Review它们是否仍适用当前项目

一句话记忆:“项目约定存Memory,跨会话上下文不丢失。”


第三部分:审慎验证——让AI产出可被信任

第10条:拿到代码先读懂,逐行检查逻辑

核心原则:AI生成的代码不是最终答案。无论代码多么完整、格式多么工整,在使用前必须逐行阅读、理解逻辑,确保它符合你的业务需求和安全要求。

1986年,挑战者号航天飞机在发射后73秒爆炸,造成7名宇航员遇难。事后调查发现,工程师们曾警告低温下O型环可能失效,但管理层忽视了这一警告。这个悲剧提醒我们:对关键系统的任何环节都不能盲目信任。

AI生成的代码可能“看似正确”但逻辑错误。它不会验证业务正确性,不知道你项目的特定约束,在Web3支付场景中,一旦实现不当,可能直接导致资金或数据风险。

审查代码的四个重点:

  1. 业务正确性:是否按需求实现了正确的流程
  2. 安全性:是否存在未验证参数、签名漏洞或数据泄露
  3. 性能:是否有低效循环、重复计算或潜在阻塞
  4. 一致性:是否符合团队命名规范、日志规范和异常处理标准

一句话记忆:“AI写得快,但责任在你;逐行读懂,掌握主动权。”


第11条:让AI解释难点,辅助自己掌握

核心原则:当遇到不理解的代码或复杂算法时,让AI充当“代码讲解员”,用自然语言帮你拆解逻辑,但最终理解仍需你自己验证。

费曼学习法的核心是“如果你不能用简单的语言解释一件事,你就没有真正理解它”。AI可以帮你迈出这一步——把复杂的代码转化为易懂的解释。

在Java + Web3支付开发中,业务场景常常涉及签名算法、加密验签、回调处理、异步事务等。如果完全依赖AI生成代码而不理解内部逻辑,一旦出现问题就很难排查。

常用提问模板:

  • “请逐行解释这段Java代码的逻辑,并指出可能的问题”
  • “帮我分析这段签名算法的安全性”
  • “这段Controller的异常处理是否符合最佳实践?”
  • “这个Web3回调接口的流程是否安全?哪里可能需要验签?”

提升理解的技巧:

  • 多角度提问:让AI分别用“初学者模式”和“专家模式”解释逻辑
  • 结合代码注释:让AI直接生成内嵌注释
  • 做小实验验证:根据AI解释,写最小化单元测试验证正确性

一句话记忆:“用AI讲解逻辑,用自己验证结论。”


第12条:手动推演业务流程,确保逻辑闭环

核心原则:无论AI生成的代码多么完善,都需要你手动推演完整的业务流程,验证逻辑是否覆盖所有关键场景。

象棋大师在下棋时,不只看眼前这一步,而是在脑中推演接下来的多步变化。审查AI代码也应如此——不只看单个函数是否正确,而要推演整个业务流程。

AI通常只实现“主干路径”,而很容易忽略异常分支,比如支付失败、签名验证失败、KYB拒绝等。如果某个分支没有收敛到可控状态,比如异常没有回滚、回调未处理幂等性,可能导致数据不一致或资金损失。

Web3支付场景的推演要点:

  1. 支付链路:创建交易→签名→广播→区块确认
  2. 回调验签:是否在回调中校验签名、防止伪造
  3. 幂等性处理:相同交易的重复回调是否安全
  4. 异常分支:余额不足、签名失败、区块回滚、第三方接口超时
  5. 安全边界:是否有重放攻击、API权限控制、私钥泄露风险

一句话记忆:“能跑通不等于没问题,手动推演才能掌控全局。”


第13条:把AI当审查员,进行二次Review

核心原则:不要只让AI生成代码,也要让AI充当“代码审查员”,对生成结果进行多维度的二次检查。

1995年,IBM的深蓝与国际象棋大师卡斯帕罗夫对弈时,开发团队发现了一个有趣的现象:让两个不同版本的程序互相对弈,能发现单个程序无法暴露的漏洞。这就是“对手思维”的价值。

让AI扮演两种不同角色——开发者和审查员——可以换视角发现问题。在生成代码后,用新的Prompt让AI切换到“代码审查员”模式,它会用不同的角度分析实现。

双轮AI审查策略:

  1. 第一轮:功能正确性
    • 检查是否实现了需求
    • 确保逻辑完整
    • 验证数据流与接口约定一致
  2. 第二轮:安全与性能
    • 检查签名、私钥、回调逻辑
    • 查找潜在的高耗时查询
    • 确认幂等性、事务一致性

常用审查Prompt:

  • “请检查这段代码是否符合我们现有的异常处理规范。”
  • “帮我找出下面代码中的潜在安全隐患,尤其是Web3验签逻辑。”
  • “请检查这段Mapper是否存在N+1问题或性能瓶颈。”

一句话记忆:“第一次生成,第二次审查;双轮交互,降低风险。”


第14条:拆解大段代码,逐模块验证

核心原则:当AI一次性生成“大块实现”时,先把代码按职责切分为若干小模块,分别校验与落盘,通过“小步可控”的方式获得对整体逻辑的真正掌控。

乐高积木的魅力在于:每一块积木都很简单,但组合起来可以构建复杂的作品。软件架构也应如此——把大块代码拆成职责单一的小模块。

在Java + Web3支付场景里,AI常会一次生成包含控制器、业务逻辑、签名验签、数据库访问、回调处理在内的“巨型代码块”。直接使用风险极高:难以阅读、难以定位问题、缺少清晰边界。

建议的拆分维度:

  • 表层交互:Controller(鉴权、请求校验、DTO编解码、统一返回)
  • 领域服务:Service(业务编排、事务边界、错误语义)
  • 资源访问:Repository/Mapper(仅做数据读写)
  • 加密与验签:CryptoService(私钥管理、签名算法、防重放)
  • 回调与幂等:CallbackHandler(验签、去重、重试、补偿)
  • DTO/Assembler:对象转换、字段校验

一句话记忆:“先切块,再验证;先定边界,再谈优化。”


第15条:对照官方文档和SDK,防止AI“幻觉”

核心原则:AI生成的代码并不保证正确性。在涉及第三方API、SDK、框架方法时,必须对照官方文档进行验证。

1999年,当年的互联网新贵们相信“如果网上找不到,就不存在”。但今天我们知道,网上的信息未必准确——AI也是如此。它可能凭借统计规律“编造”方法、类、字段,尤其是在Web3 SDK或支付网关的API中。

Web3支付中常见的AI“幻觉”场景:

  • 签名与验签方法名错误:AI常生成signTransaction()或verifySignature()等方法,但不同Web3 SDK的签名API完全不同
  • 交易回调字段缺失:某些支付回调返回status和txHash,AI可能假设存在isPaid字段
  • Spring Boot注解失效:AI可能生成旧版本的配置方式

高效交叉验证的技巧:

  • 在Cursor中,让AI直接生成所需API的官方文档链接
  • 让AI帮你总结官方文档的关键字段和约束条件
  • 如果API复杂,让AI生成最小可运行Demo来测试验证
  • 对于Web3支付SDK,直接下载源码,用IDE定位核心方法

一句话记忆:“AI能写,但文档能证;先查官方,再信AI。”


第16条:利用AI自动审查PR,建立持续防御

核心原则:将AI代码审查集成到开发流程中,通过Bugbot等工具自动分析PR,在代码合并前发现潜在问题。

2009年,Netflix开创了“混沌工程”——故意在生产环境中注入故障,以发现系统弱点。AI代码审查是类似的理念:主动寻找问题,而不是等问题暴露。

Cursor的Bugbot可以自动分析代码差异,指出其中的bug、潜在安全问题和代码风格问题,并直接在PR上留下评论。它不仅检查语法错误,还关注安全和质量方面,例如未处理的异常、资源泄漏等。

配置方法:

  1. 创建.cursor/BUGBOT.md文件
  2. 写入项目特有的检查规则,例如:
    • “确保所有数据库查询使用参数化”
    • “回调处理必须包含签名验证”
    • “禁止在日志中打印私钥或签名原文”

对于个人开发者,也可以在重要改动时主动让AI过一遍:将代码变更贴给Chat,请它以审查员身份挑错。

一句话记忆:“AI审查自动化,问题发现在上线前。”


第四部分:调试排查——用科学方法定位问题

第17条:构造最小可重现场景

核心原则:当AI生成的代码出现异常时,第一步不是盲目调试,而是先构造“最小可重现场景”,用最少的代码重现问题。

爱因斯坦曾说:“一切应该尽可能简单,但不能过于简单。”调试也是如此。在复杂的支付链路中直接调试,日志量大、调用链长,很容易被无关信息掩盖。

构造最小可重现场景的三步法:

  1. 抽离核心逻辑:从大模块中剥离关键代码,比如验签、交易提交、回调解析
  2. 创建最小输入:只保留最少的字段、最短的交易数据
  3. 运行与验证:在本地或沙箱中运行,确保问题稳定复现

Web3支付场景示例:

  • 问题:交易回调偶尔验签失败
  • 最小可重现场景:
    • 独立提取签名算法与验签逻辑
    • 固定输入回调数据包与签名
    • 本地运行对比AI生成的验签逻辑与官方SDK方法

一句话记忆:“先缩小,再排查;小场景,大洞察。”


第18条:用IDE断点调试,掌握真实运行逻辑

核心原则:AI生成的代码看起来正确并不代表它实际能正确运行。通过在IDE中使用断点调试,跟踪真实的变量状态和方法调用链,才能彻底掌握代码的行为。

纸上得来终觉浅,绝知此事要躬行。阅读代码是一回事,看它实际运行是另一回事。即使AI生成的代码在语法层面正确,实际执行时也可能因为上下文、依赖、SDK版本等导致不同的结果。

Web3支付中的断点调试场景:

  • 交易签名:断点验证私钥生成签名是否与SDK一致
  • 回调验签:断点观察回调Payload、签名字段、nonce
  • 幂等控制:调试重复回调时的行为
  • 多线程并发:跟踪异步回调、事件监听和并发事务

在Cursor和IDEA中的结合:

  • Cursor:让AI帮忙定位可疑逻辑,标出建议断点位置
  • IDEA:配合断点查看调用栈、变量值、网络请求
  • 双向反馈:将断点观察到的异常状态反馈给AI,获得优化建议

一句话记忆:“用AI生成,用断点求证;真实状态,尽在掌控。”


第19条:批量插入日志,跟踪数据流

核心原则:在AI生成的代码中,通过批量插入高价值日志,构建可追踪的数据流视图,帮助你快速定位问题。

飞机的黑匣子记录了飞行中的每一个关键数据点,当事故发生时,这些记录就是还原真相的唯一依据。在软件系统中,日志扮演着类似的角色。

AI生成的代码逻辑可能看似正确,但数据在方法、线程、异步回调之间传递时,状态可能早已被篡改或丢失。日志是定位数据错乱、签名失败、交易丢失等问题的唯一全局手段。

Web3支付场景的日志重点:

  1. 交易创建:记录请求参数、交易Hash、预期Gas
  2. 签名计算:只记录算法版本与结果摘要,避免暴露私钥
  3. 回调处理:记录回调Payload、验签结果、幂等锁状态
  4. 异常分支:交易失败、签名不匹配、接口超时要有明确的错误码

日志策略的进阶优化:

  • TraceID/RequestID:给每个交易打上唯一ID,支持跨模块追踪
  • 统一日志规范:固定日志字段,如[traceId] [merchantId] [txHash] [status]
  • 敏感信息脱敏:私钥、签名原文必须脱敏后才能记录

一句话记忆:“日志是运行时的证据;好日志,让问题无处隐藏。”


第20条:用假设验证法缩小问题范围

核心原则:当AI生成的代码报错时,不要盲目大范围调试,而是先提出具体假设,再逐步验证,通过“缩小问题空间”快速定位根因。

1905年,爱因斯坦在研究光电效应时,并没有漫无目的地做实验。他先提出假设——光具有粒子性——然后设计实验验证。科学方法的核心就是“假设-验证”循环。

在复杂支付链路中,全量排查等于“大海捞针”。没有假设直接改代码,很容易在无关模块反复消耗时间。

Web3支付的假设验证示例:

  • 问题:交易回调验签失败
  • 可能假设:
    1. 签名算法不一致:AI生成的签名方法与SDK不兼容
    2. 回调Payload缺字段:回调数据少了nonce或timestamp
    3. 测试网私钥错误:签名私钥与发起交易的账户不一致
  • 验证策略:
    • 单独提取签名方法,对比AI代码与官方SDK结果
    • 打印完整回调Payload,确认字段是否缺失
    • 固定私钥重新签名,验证计算结果

一句话记忆:“不猜测,不乱试;先假设,再验证。”


第21条:结合单元测试与AI生成用例,锁定问题边界

核心原则:通过结合手写关键单元测试与AI自动生成测试用例,构建足够覆盖的验证体系,确保AI生成代码的行为符合预期。

1996年,阿丽亚娜5号火箭在发射37秒后爆炸。原因是一段从阿丽亚娜4号复用的代码——它在新火箭更快的飞行速度下产生了整数溢出。这段代码从未被充分测试。

AI生成的逻辑往往涉及签名、验签、回调、数据库更新等多模块交互。单靠阅读或断点调试很难覆盖所有场景,而结合单元测试与AI生成测试用例,可以系统性验证每条路径的正确性。

Web3支付场景下的测试重点:

  1. 签名与验签:验证生成的签名与官方SDK一致
  2. 回调处理:模拟回调Payload、时间戳、nonce,确保幂等性正确
  3. 交易状态更新:测试成功与失败的事务一致性
  4. 安全性断言:验证日志中是否脱敏敏感字段

在AI中生成测试用例:

1
根据以下签名算法代码,生成JUnit单元测试,覆盖正常、签名失败和异常Payload三种情况。

一句话记忆:“AI写实现,测试定边界;用例越全,Bug越少。”


第22条:让AI分析日志与调用栈,加速故障定位

核心原则:当遇到复杂错误日志或长调用栈时,让AI帮忙解析日志结构、提取关键信息、缩小问题范围。

福尔摩斯之所以能破案,不是因为他看到了别人看不到的线索,而是因为他能从海量信息中筛选出关键证据。AI可以扮演类似的角色——从长长的日志中帮你找到问题根源。

当错误日志成百上千行时,让AI帮你提取关键异常与上下文,避免逐行手工分析。AI能从调用栈中梳理出最重要的触发路径,快速锁定问题模块。

AI辅助日志分析的常用Prompt:

  • “这是交易回调失败的日志,请提取导致验签失败的原因。”
  • “帮我从这段日志中找到第一个抛出异常的方法和模块。”
  • “请分析这段调用栈,按执行顺序列出关键方法。”

提高日志分析效率的技巧:

  • 当日志过长时,先让AI总结日志结构,再深入分析关键段落
  • 将日志关键字段(traceId、txHash、merchantId)放入Prompt,帮助AI精准分析
  • 不要直接把数千行日志一次性喂给AI,分段处理效果更好

一句话记忆:“AI扫雷找关键,你验证定根因。”


第23条:利用AI辅助生成调试脚本,快速验证假设

核心原则:当AI生成的代码存在Bug或不确定性时,让AI帮忙生成最小化的调试脚本,通过快速复现场景、验证假设和定位问题。

科学实验的精髓在于“可重复性”——如果一个现象无法被重复观察,就无法被研究。调试脚本就是帮你创造可重复的实验环境。

传统调试依赖全链路环境,效率低且易被噪音干扰。让AI帮你生成最小可运行调试脚本,可以更高效地验证单点问题。

AI生成调试脚本的Prompt示例:

  • “请基于以下签名逻辑,生成一个最小可运行的Java调试脚本,打印签名计算结果并与官方SDK比对。”
  • “根据下面的回调处理代码,生成本地调试脚本,固定回调Payload和签名。”
  • “请帮我写一个Mock Web3节点的调试脚本,用于本地重现回调异常场景。”

提升验证效率的技巧:

  • 逐步扩展:先验证核心算法,再扩展到完整业务链路
  • 结合AI分析:把脚本运行日志交给AI,让它帮忙解析中间值与异常原因
  • 自动生成更多场景:让AI基于脚本生成多组不同输入的验证用例

一句话记忆:“调试靠最小化,验证靠自动化。”


第24条:在沙箱环境模拟全链路,确保上线安全

核心原则:在上线前,利用沙箱环境完整模拟支付全链路,提前发现潜在问题,避免在生产环境中暴露风险。

航空业有一条铁律:任何新机型在载客飞行前,必须经过成千上万小时的模拟和测试飞行。软件上线也应如此——尤其是涉及资金的支付系统。

AI生成的代码即使局部可运行,也不能直接推到生产环境。通过在沙箱中模拟全链路,可以暴露缺陷、验证安全策略、确认外部依赖是否正常。

Web3支付沙箱测试策略:

  1. 签名与广播:生成Mock私钥与交易Payload,验证签名与SDK一致性
  2. 回调验签:模拟回调请求,测试验签逻辑与防重放机制
  3. 异常路径验证:交易失败、回调超时、区块回滚等场景必须覆盖
  4. 幂等与一致性:模拟重复回调与网络抖动,验证幂等锁和数据库状态
  5. 日志与审计:检查AuditLog是否记录所有关键操作并脱敏敏感数据

一句话记忆:“沙箱先演练,线上才安全。”


第五部分:安全防御——避免AI生成隐性漏洞

第25条:结合AI与安全审计,强化支付链路防御

核心原则:AI生成的代码能跑,但不代表安全。通过结合AI分析、人工安全审计和官方文档交叉验证,对Web3支付链路进行全方位的安全检查。

2014年,黑客利用Heartbleed漏洞窃取了数百万用户的敏感数据。这个漏洞存在于被广泛使用的OpenSSL库中,代码看起来完全正常,但隐藏着致命的安全缺陷。

AI只会生成“最常见”的实现,但支付逻辑往往有独特的安全要求。它容易忽略异常回调、重复调用、非法Payload等安全边界条件。

Web3支付安全审计重点:

  1. 签名与验签:验签逻辑必须使用官方SDK或权威算法,签名计算必须严格固定字段顺序
  2. 防重放与幂等性:检查回调Payload中的timestamp和nonce,在数据库或Redis中存储签名ID
  3. 权限与认证:校验回调来源IP、域名与签名一致性
  4. 敏感数据保护:所有私钥、签名值、JWT Token必须加密存储,日志必须脱敏

一句话记忆:“AI能写代码,人要保安全。”


第26条:统一异常处理与错误码,让AI输出可控

核心原则:在使用AI生成代码时,必须先制定统一的异常处理与错误码策略,并让AI严格遵循。

1999年,Y2K问题让全世界紧张了一整年。问题的根源很简单:程序员们用两位数字表示年份,没有统一的标准。统一规范的重要性由此可见一斑。

如果AI生成的代码没有统一的异常处理策略,可能导致错误信息不可追踪、回调异常无法区分、数据库状态不一致、上游系统收到模糊的返回状态。

Web3支付中的异常策略重点:

  • 签名与验签异常:SIGN_001(签名失败)、SIGN_002(验签失败)
  • 回调处理异常:CALLBACK_001(Payload缺失)、CALLBACK_002(回调重复)
  • 幂等与事务异常:IDEMPOTENT_001(幂等锁失效)、TX_001(事务回滚)
  • 第三方依赖异常:BLOCKCHAIN_001(区块链节点超时)

在Prompt中给AI提供异常体系:

1
根据以下GlobalExceptionHandler代码,帮我在新生成的回调处理逻辑中统一接入异常策略。

一句话记忆:“异常有规范,错误可追踪;AI按规写,系统更可控。”


第27条:用AI生成安全基线检查,防止隐性漏洞

核心原则:借助AI生成安全基线检查清单和自动化测试脚本,确保整个支付链路具备足够的防御能力。

军事上有“纵深防御”的概念——不依赖单一防线,而是建立多层防护。支付安全也应如此:签名验证是一道防线,幂等控制是一道防线,权限校验又是一道防线。

Web3支付安全基线检查重点:

  1. 签名与验签:检查签名算法是否符合官方SDK标准,验证签名字段顺序
  2. 防重放攻击:检查nonce、timestamp是否严格校验,在幂等锁中记录唯一请求ID
  3. 回调幂等性:验证回调请求重复到达时状态是否被正确拦截
  4. 敏感信息保护:所有私钥、JWT必须加密存储,审计日志只记录摘要

AI辅助安全基线的Prompt示例:

  • “请根据以下代码生成一份安全检查清单,重点检查签名、回调、幂等、权限控制。”
  • “帮我分析这段支付回调逻辑,找出缺失的安全校验点,并生成Mock攻击用例。”

一句话记忆:“AI扫风险,人来兜底;安全基线先固化。”


第28条:让AI生成数据库一致性检查与修复脚本

核心原则:借助AI自动生成一致性检查与修复脚本,提前发现数据错乱、幂等失效、回调丢失等问题,避免影响资金结算。

银行每天晚上都要进行“轧账”——核对当天的所有交易记录,确保账实相符。支付系统也需要类似的机制。

当AI生成的逻辑上线后,最常见的隐患是:回调未写库导致状态缺失、交易重复回调导致状态异常、多次更新覆盖真实状态、账实不符导致资金风险。

Web3支付一致性巡检重点:

  1. 回调状态检查:检查已上链交易是否有缺失回调,检查重复回调是否被幂等锁正确处理
  2. 交易状态对账:数据库中的交易状态 vs 链上区块确认状态
  3. 幂等锁验证:检查重复请求是否产生多条相同交易记录
  4. 资金对账:商户余额、链上金额、日志流水三者是否一致

AI辅助生成检查脚本的Prompt示例:

  • “根据以下表结构,生成检测交易表t_tx_record中重复交易的SQL。”
  • “请生成对账脚本,校验交易表中的回调状态与审计日志是否一致。”

一句话记忆:“先检查,再修复;用AI生成SQL,让一致性可控。”


第六部分:性能优化与可维护性

第29条:基于AI生成代码进行可控重构

核心原则:AI生成的代码通常能跑,但未必可维护。在投入生产前,应结合AI辅助与人工审查,对代码进行可控重构。

1972年,大卫·帕纳斯发表了著名的论文《论模块分解的标准》,奠定了软件工程中“模块化”思想的基础。AI生成的代码往往缺乏这种设计感——它可能一次性生成巨型方法或控制器,重构后按职责拆分,后续修改才更安全。

Web3支付代码重构重点:

  1. 签名与验签逻辑:单独抽离CryptoService,避免在控制器或Service中散落加密实现
  2. 回调与幂等性控制:将回调逻辑封装在CallbackHandler中,集中管理重放保护与幂等锁
  3. 事务与一致性:在Service层内实现事务边界,不让控制器直接操作数据库
  4. 日志与审计:用统一的AuditLogService,避免散落的System.out.println

AI辅助重构的策略:

  • 提示AI识别问题:“请找出这段代码中可重构的地方,并列出优先级最高的三个点。”
  • 让AI生成重构方案:“帮我把签名逻辑抽取到独立的CryptoService,保持原有方法签名不变。”
  • 分阶段验证:重构一部分→跑单测→提交→再重构下一部分

一句话记忆:“先锁定行为,再小步重构;让AI出方案,由你定取舍。”


第30条:让AI辅助识别性能瓶颈并优化关键路径

核心原则:利用AI快速分析日志、调用链和SQL执行情况,找出性能瓶颈所在的关键路径。

1995年,亚马逊发现页面加载时间每增加100毫秒,销售额就会下降1%。性能问题从来不是小事。

AI生成的代码未必高效,尤其是Web3支付链路涉及签名计算、链上交互、回调处理、多线程并发,稍有不慎就会出现性能瓶颈。

Web3支付链路中常见性能瓶颈:

  1. 签名/验签耗时:检查是否使用了低效算法或未启用本地缓存
  2. 链上交易广播慢:可能因区块链节点配置不当或Gas估算错误
  3. 回调处理阻塞:如果回调接口同步写数据库,可能导致接口超时
  4. 数据库锁竞争:幂等锁、事务冲突导致高并发下性能骤降
  5. 不必要的串行:缺乏异步化设计,支付状态轮询与回调写数据库串行执行

AI辅助性能优化的示例Prompt:

  • “请帮我分析这段JProfiler调用链,找出最耗时的三个方法。”
  • “根据下面的SQL日志,优化慢查询并推荐合适的索引。”

一句话记忆:“AI找瓶颈,数据定结论,优化靠验证。”


第31条:用AI生成架构图与数据流图,提升全局可控性

核心原则:通过让AI生成可编辑的架构图、时序图、数据流图,帮助你理解代码之间的依赖关系和业务链路。

地图的价值不在于它有多精确,而在于它能帮你看清全局。在复杂的支付系统中,架构图和数据流图就是你的“地图”。

如果没有一份可视化的架构图,很容易陷入“只懂一小块”的状态,导致无法发现逻辑缺口或潜在安全风险。

Web3支付架构图示例:

  1. 高层架构图:Controller→Service→CryptoService→BlockchainSDK→CallbackHandler,标出安全检查点、事务边界和幂等锁
  2. 数据流图:显示交易数据从请求到区块链再到回调的全链路
  3. 时序图:展示支付请求、签名、广播、回调、幂等验证的时间顺序

AI生成可视化图表的Prompt示例:

  • “根据以下服务和方法结构,帮我生成一个Mermaid架构图。”
  • “请根据以下Web3支付链路,生成数据流图。”
  • “根据回调逻辑,画出时序图,标出幂等锁的生效时机与回滚条件。”

一句话记忆:“先画图,再优化;先全局,再局部。”


第32条:利用AI生成代码审查清单,建立可维护性保障

核心原则:通过让AI自动生成高价值的代码审查清单,结合人工检查,确保每一行代码都达到上线要求。

医生在手术前会核对检查清单:患者身份、手术部位、过敏史……这个简单的做法将手术事故率降低了三分之一。代码审查清单也有类似的效果。

AI生成的实现可能可用,但经常存在命名风格不一致、缺少边界条件处理、重复逻辑和长方法、潜在性能瓶颈等问题。

Web3支付场景的审查重点:

  1. 安全性:验签算法是否符合官方SDK标准,回调幂等锁是否正确使用,日志是否脱敏敏感字段
  2. 性能:检查高并发场景下锁竞争是否合理,慢SQL、无必要的全量遍历
  3. 可维护性:控制器是否过重,是否存在重复逻辑
  4. 一致性:错误码、DTO、日志格式是否遵循统一规范

一句话记忆:“AI先审查,人工再把关;清单先固化,未来更高效。”


第33条:利用AI自动生成集成测试,验证跨模块行为

核心原则:在AI生成的代码上线前,必须通过端到端集成测试验证跨模块行为。

1962年,水手1号探测器在发射84秒后被引爆。原因是一行Fortran代码中的一个标点符号错误。单元测试无法发现这个问题,因为错误发生在模块交互时。

AI生成的代码局部可用,但可能遗漏幂等性校验、回调签名验证等全局约束。集成测试能在沙箱中验证区块链SDK、Web3网关、支付回调接口等外部依赖。

Web3支付集成测试的关键场景:

  1. 签名一致性验证:验证AI生成的签名计算与官方SDK输出是否一致
  2. 回调幂等控制:模拟重复回调,检查幂等锁是否正确拦截
  3. 交易状态一致性:模拟链上广播成功和失败两种情况
  4. 异常场景覆盖:模拟回调Payload缺失字段、签名过期、区块链超时

一句话记忆:“AI写代码,集成测闭环;模拟真实链路,确保系统可控。”


第七部分:持续演进——构建AI+人工的闭环体系

第34条:关注AI生成代码的合规与知识产权

核心原则:在使用AI生成代码时,需要关注合规与知识产权问题,确保生成的代码可以安全地用于商业项目。

2023年,多起关于AI生成内容版权的诉讼引发了广泛讨论。虽然法律尚未完全明确,但作为负责任的开发者,我们应该提前考虑这些问题。

需要关注的问题:

  • 隐私模式:开启隐私模式,确保敏感代码不被远端存储
  • 代码相似性:对AI生成的关键算法,验证是否与开源项目高度相似
  • 审计依据:在涉及支付合规的场景,保留AI交互记录作为审计依据
  • 团队规范:建立AI代码使用的内部规范

最佳实践:

  • 对于核心业务逻辑,人工审查后再使用
  • 保留AI对话记录,作为代码来源的追溯依据
  • 对于开源项目,确保AI生成的代码符合许可证要求

一句话记忆:“用AI要合规,代码来源要可溯。”


第35条:建立AI+人工的持续改进闭环,让方案可演进

核心原则:AI生成的方案和代码只是起点,最终落地需要“AI生成→人工验证→数据反馈→Prompt优化→再次生成”的持续改进闭环。

1950年,戴明博士提出了著名的PDCA循环(计划-执行-检查-行动),成为质量管理的基石。AI协作也需要类似的循环:生成是计划,验证是执行,反馈是检查,优化是行动。

没有反馈的AI会在每次生成中重复相同的问题。把人工审查与沙箱测试的结论反哺到Prompt中,下一次生成的代码会更贴近你的要求。

持续改进的四个步骤:

  1. AI驱动:初版方案和代码交给AI快速产出
  2. 人工验证:结合单测、集成测试、沙箱链路和安全审计验证
  3. 数据反馈:把问题点、改进点、失败案例输入AI,优化Prompt
  4. 持续演进:新Prompt + 新上下文→更高质量的输出→逐步积累项目知识库

提升闭环效率的技巧:

  • Prompt模板化:固定AI生成方案的结构:背景→约束条件→成果要求→输出格式
  • 知识库沉淀:把验证过的有效逻辑整理到Wiki或文档
  • 团队共享经验:定期同步AI使用方法、最佳Prompt、已解决问题案例

一句话记忆:“AI产出,人工验证;数据反馈,持续进化。”


总结:让AI生成的代码真正“可控、可懂、可负责”

回到本文开头的火星气候探测器故事。那次事故的教训不是“不要用计算机”,而是“要确保人类理解并验证计算机的输出”。今天,当我们使用AI生成代码时,这个教训同样适用。

AI时代,代码的生产方式正在发生根本性变化。我们不再是“独立写代码的人”,而是与AI共同设计、共同实现的协作者。然而,AI生成的方案和代码只是“起点”,而不是“答案”。如果我们想真正为AI生成的代码负全责,就必须从五个维度构建完整的实践方法论:

一、清晰输入:掌握问题,控制AI输出方向(第1-6条)
好的输出,始于好的输入。你不是在“提问”,而是在“设计AI的工作流”。

二、方案设计:先对齐思路,再落地实现(第7-9条)
设计在前,生成在后;先和AI对齐方案,再进入实现,能避免大规模返工。

三、审慎验证:让AI产出可被信任(第10-16条)
不要盲目信任AI,把它当“初稿助手”,用多重验证手段重建信任。

四、调试排查:用科学方法定位问题(第17-24条)
调试是一门科学,需要假设、验证、最小化重现,AI是你的助手而非替代者。

五、安全防御:避免AI生成隐性漏洞(第25-28条)
AI能写代码,但安全需要我们兜底;AI能扫描风险,但安全闭环要靠人机协作。

六、性能与可维护性:让代码可演进(第29-33条)
性能分析要数据驱动,可维护性要架构保障,AI给线索,人来验证。

七、持续演进:构建AI+人工的闭环体系(第34-35条)
AI是“副驾驶”,不是“自动驾驶”。闭环优化,才能让系统长期健康演进。


如果说AI让我们写代码的效率提升了10倍,那么这35条方法的目标,是确保**“高效”不以“失控”为代价**,让我们既能快,又能对每一行代码、每一次上线、每一次链路安全负全责。

一句话总结:
“AI写得快,人要看得透;建立可控的闭环,让速度与安全并存,让效率与责任共生。”

Cursor AI 编程助手最佳实践

发表于 2025/08/15 | 分类于 AIGC
1
特别说明:此文由ChatGPT生成,后续由我本人编辑、修改而成。

1997年,IBM 的深蓝战胜国际象棋世界冠军卡斯帕罗夫后,卡斯帕罗夫并没有沮丧太久。他很快提出了一个新概念:人机协作棋。在这种模式下,人类棋手与计算机组队比赛,结果令人惊讶——人机组合往往能击败单独的人类高手,也能击败单独的计算机。

今天,我们与 Cursor 的协作正是这一理念在软件开发领域的延续。开发者的经验表明,正确使用 Cursor 后开发效率确实有明显提升,有资深用户甚至反馈它带来了 2 倍以上的提效。但要充分发挥 Cursor 的优势,同时避免潜在风险,我们需要掌握一套协作的艺术。

本文总结了 20 条针对 Java 后端项目的 Cursor 使用建议,分为五个主题:让 AI 理解你的项目、与 AI 高效对话、把控质量与安全、团队协作实践、以及持续进化。

一、让 AI 理解你的项目

1. 启用代码库索引:给 AI 一份项目地图

人类导游在带领游客游览之前,首先需要熟悉整个景区的地图。同样,Cursor 在帮助你编码之前,也需要先“认识”你的项目。

打开项目后,Cursor 会自动扫描文件生成嵌入向量,建立对代码库的整体理解。这个过程就像 AI 在阅读你的代码库,记住每个类、每个方法的位置和作用。索引完成后,当你询问“UserService 在哪里调用了 Repository?”这样的问题时,AI 能够准确回答,而不是凭空猜测。

对于 Spring Boot 等大型 Java 项目,索引可以帮助 AI 理解项目结构——控制层、服务层、仓库层的划分,以及它们之间的调用关系。在设置中开启“自动索引新仓库”选项,让这个过程自动发生。

2. 配置忽略规则:聚焦有效内容

想象你在图书馆找一本书,如果书架上塞满了杂志、报纸和购物小票,你会很难找到真正需要的内容。代码索引也是如此。

使用 .cursorignore 或项目已有的 .gitignore 来忽略不必要的文件。对于 Java 项目,建议忽略 target/、*.class、*.jar 等编译产物——这些内容既不需要 AI 理解,又会极大增加索引规模。如果项目使用 Lombok 等注解处理器,也可以忽略自动生成的源码目录,转而索引生成前的源文件。

精简索引范围可以提高 AI 答复的准确性,就像把图书馆里的杂物清走,让真正的书籍更容易被找到。

3. 定义 Cursor 规则:给 AI 一份行为准则

如果你雇佣一位新员工,你会给他一份员工手册,告诉他公司的规范和期望。Cursor Rules 就是你给 AI 的“员工手册”。

在项目中创建 .cursor/rules/ 目录,将编码规范、架构模式和领域约定写入规则文件。例如:

  • “Repository 接口命名以 Repository 结尾”
  • “Service 层需使用 @Transactional”
  • “Controller 层只调用 Service,不直接访问 Repository”

这些规则会在每次 AI 生成代码时自动应用,就像一位时刻在旁提醒的导师。规则应该精确且可操作——与其说“代码要简洁”,不如说“每个方法不超过 30 行,超过则拆分”。

对于团队项目,将规则文件纳入版本控制,确保所有成员的 Cursor 都应用相同规则,生成的代码风格也就保持一致。

4. 调优编辑器设置:让 AI 建议与项目环境契合

Cursor 本质是 VS Code 的衍生版,可以像配置 VS Code 一样配置它。在 .vscode/settings.json 中设置统一的 JDK 路径、缩进风格(Java 通常是 4 空格)、保存时自动格式化和优化 imports。

良好的编辑器配置能提升 AI 建议与实际项目环境的契合度。Java 项目对缩进、编码、构建有特定要求,预先设置好这些选项可以减少 AI 生成代码与项目规范不符的情况。另外,忽略编译目录的文件监视可以避免编辑器在大型项目中卡顿。

团队使用时,应在项目仓库中提供标准的 VS Code 设置,包括格式化规则、编译和调试命令、推荐安装的插件列表。通过统一配置,团队所有成员的 Cursor 环境将保持一致。

5. 安装必要的 Java 扩展插件

VS Code 本身对 Java 的支持较弱,大部分功能依赖插件来实现。安装官方的 “Extension Pack for Java” 扩展包,它包含 Java 语言支持、Maven/Gradle 工具、调试器等子插件,可一次性满足 Java 开发所需。根据项目需求,还可以安装 Lombok、Spring Boot Tools、Docker 等插件。

这些插件确保 Cursor 能正确识别 Java 语法和项目结构——语法高亮、错误标注、自动导包。如果缺少它们,AI 生成的代码可能因为编辑器无法解析依赖而出现假警告。团队可以利用 extensions.json 推荐列表,让成员打开项目时获得安装提示。

二、与 AI 高效对话

6. 区分 Chat 对话和内联编辑两种模式

1943年,心理学家亚伯拉罕·马斯洛提出了著名的需求层次理论。他观察到,人类的需求是分层的,不同层次需要不同的满足方式。与 AI 的交互也有类似的“层次”——不同的任务需要不同的交互模式。

Cursor 提供两种主要的 AI 交互模式:Chat 模式(Cmd+L)适合开放式讨论,让 AI 解释代码、规划架构、回答问题,其回复不会自动应用到代码;Composer/Inline Edit 模式(Cmd+K)适合具体的代码生成,AI 会直接给出修改方案并高亮预览。

在日常开发中,可以用 Chat 模式让 AI 帮忙梳理业务逻辑:“请解释下为何我的 Spring Bean 没有被注入?”AI 会利用索引过的代码给出推理。而当需要批量修改代码时,可以选中相关代码片段,使用 Inline Edit 执行指令。

将不同任务用合适的模式处理:Chat 模式下反复追问直到答案令人满意,再通过 Composer 应用变更,从而避免不必要的错误修改。

7. 精心设计提示词并将任务拆解

语言学家乔治·莱考夫发现,我们使用的隐喻会影响我们的思维方式。同样,你如何向 AI 表达需求,直接决定了它如何理解和执行。

良好的提示词应该:明确说明需求、提供足够的背景、避免一次性提出过于庞杂的要求。将复杂任务拆分为多个小步骤:先让 AI 生成 DAO 接口,再生成 Service 实现,最后编写 Controller,而非一口气要求“生成整个模块的所有代码”。

研究表明,让模型逐步推理、分段输出往往比一次输出大段代码更可靠。Cursor 擅长小范围的代码重构或生成,例如修改一个函数的逻辑,效果很好;但如果一次涉及过多文件或复杂上下文,AI 可能会“思路混乱”。

团队可以积累常用提示模板(如请求生成单元测试、优化某段代码性能等),在内部分享高质量的 Prompt 案例,整体提升 AI 使用水平。

8. 巧用“@引用”提供上下文

当你向一位同事请教问题时,如果你把相关的代码、文档、背景信息都准备好再去问,他会更快给出准确的答案。与 AI 对话也是如此。

在聊天或指令中使用 @文件名 引用项目中的文件,这会将文件内容纳入 AI 上下文。Cursor 还支持引用 Pull Request 编号、提交哈希等。主动提供所需的上下文,能显著提高 AI 回答的准确度。

例如,在一个大型项目中,询问“函数 X 为什么输出错误结果”时,至少应把函数 X 所在文件和相关的配置文件通过 @ 提供给 AI。否则模型可能由于缺少关键上下文而给出偏颇的答案。

如果请 AI 协助配置 Spring Security,最好 @ 引用安全配置类,AI 才能基于实际配置提出修改建议。合理地使用 @ 引用,相当于把相关资料附在提问中,既减少来回澄清,又让 AI 解答更具依据。

9. 充分利用 Tab 补全加速编码

20世纪初,工业工程师弗雷德里克·泰勒通过研究工人的动作,发现很多时间浪费在了不必要的步骤上。他通过优化动作流程,大幅提高了生产效率。在编程中,Tab 补全就是这样的效率工具。

Cursor 的多行智能补全能根据当前上下文猜测你想写的代码。当需要编写模板化或重复性的代码时,先输入几个字母让 Cursor 猜,如觉得提示合适直接按 Tab 补全。有使用者反馈,大约四分之一的时间 Cursor 几乎能精准预测他们下一步要写什么。

在 Java 后端开发中有大量模板式代码可借助补全:getter/setter、构造函数、日志语句、JUnit 测试样板、Spring 注解等。当你定义了实体类字段后,下一行就可能自动出现 public <Type> get<Field>() {...} 的补全建议。当然,请始终 Review 补全的代码,确保符合预期后再保存提交。

10. 利用 Memories 保持跨会话的上下文

人类大脑有短期记忆和长期记忆之分。AI 对话默认只有“短期记忆”——每次新对话都从零开始。但 Cursor 的 Memories 功能可以帮助 AI 建立“长期记忆”。

当你在 Chat 模式中与 AI 反复讨论某项约定(例如某个变量含义或某种架构决策),Cursor 可能会提示提取为 Memory。经你确认,这些内容会保存为项目范围的规则,下次开启新对话也能自动应用。你也可以明确要求“请记住 XX”,让 Cursor 主动将其记录为 Memory。

例如,你曾与 AI 约定“我们项目使用 DDD 分层架构,所有数据库操作都通过 Repository 完成,不在 Service 编写 SQL”。如果将此作为 Memory 保存,那么以后无论谁请求数据库相关代码,AI 都会遵循这一约定。

请谨慎添加记忆——不要把随意的对话内容存为记忆,以免污染后续回答。确保记忆条目简洁明确,并定期 Review 它们是否仍适用当前项目。

三、把控质量与安全

11. 仔细审核并测试 AI 生成的代码

1986年,挑战者号航天飞机在发射后 73 秒爆炸,造成 7 名宇航员遇难。事后调查发现,工程师们曾警告低温下 O 型环可能失效,但管理层忽视了这一警告。这个悲剧提醒我们:对关键系统的任何环节都不能盲目信任。

AI 代码辅助的本质是一种概率预测模型,有时可能生成不正确或不健全的代码。在多人经验交流中,有人反映 Cursor 对复杂 Java 项目输出的代码甚至无法编译,可能出现低级语法错误。

永远不要直接相信 AI 给出的代码,就算它语法正确,也需经过人工检查和运行测试后再并入主分支。将 AI 编写的代码当作初稿,对其进行 Code Review 和本地调试。特别是核心逻辑,要写单元测试或集成测试加以验证。

在 Java 后端中,更要关注 AI 代码的类型正确性和业务逻辑严谨性。AI 可能会在未充分理解线程安全要求时就给出并发代码,实现上存在竞态条件;或在处理数据库事务时忽略了必要的回滚逻辑。这些问题必须通过测试和代码走查发现。

12. 针对敏感代码启用隐私模式

2017年,Uber 被曝光其员工可以追踪任何用户的实时位置,引发了巨大的隐私争议。这个案例提醒我们:即使是为了便利而收集的数据,也可能带来意想不到的风险。

当处理公司私有代码或敏感项目时,启用 Cursor 的隐私模式。在隐私模式下,你的代码不会被远端存储,每次请求处理完后数据即被删除。这对企业代码尤为重要,可降低泄漏机密的风险。

对于企业 Java 后端项目(包含公司业务逻辑、数据库密码等),强烈建议开启隐私模式。团队可以将隐私模式作为开发规范的一部分,并提醒成员不要在提示中粘贴敏感凭据或个人数据。将 API 密钥、密码等以环境变量或占位符形式与 AI 讨论,避免直接暴露真实机密信息。

13. 始终强调安全和最佳实践

AI 并不天然具备安全意识,除非我们提醒它。如果不加提示,AI 可能会生成直接拼接字符串的 SQL 查询(存在注入隐患)、或忽略对用户输入的校验。

可以编写规则或提示让 AI 注意常见安全问题:“所有输入参数需校验避免 SQL 注入”“敏感操作要有权限检查”。Java 后端涉及大量安全考虑:输入验证、认证授权、敏感数据保护。开发者在运用 AI 时,可以提前提供项目的安全指南给 AI,例如:“我们使用 Spring Security,请确保所有控制器方法都有正确的鉴权注解”。

AI 生成代码后,要特别检查:数据库操作是否使用了参数绑定而非字符串拼接 SQL?多线程代码是否正确加锁避免并发问题?反序列化操作是否存在漏洞?异常处理是否记录了必要日志?团队可制定一张 AI 代码安全检查清单,供每位开发者在接受 AI 代码时逐条对照。

14. 了解 Cursor 在 Java 方面的局限性

任何工具都有其擅长和不擅长的领域。Cursor 基于 VS Code,在 Java 开发体验上与 IntelliJ 等成熟 IDE 存在差距。

具体来说:VS Code 的 Java 语言服务器相较 IntelliJ 有差距,可能无法解析复杂的注解处理器、生成代码或提供高级重构;Cursor 对大型 Java 项目可能出现性能瓶颈或上下文遗漏;某些场景下 AI 给出的代码不符合 Java 规范,需要人工纠正。

如果项目大量使用 Lombok、MapStruct 等注解处理器,建议预先运行构建以生成所需代码,这样 Cursor 才能在索引时看到完整的类型信息。对于超大型的 Java 单体应用,可以考虑将项目拆分成多个子模块分别在 Cursor 中打开。

团队内部应讨论并达成共识:在哪些工作内容上适合用 Cursor,在哪些情况下仍然需要借助 IntelliJ 等传统 IDE。比如,可以约定用 Cursor 编写业务代码,但用 IntelliJ 进行复杂重构和性能分析,以取长补短。

四、高效使用进阶

15. 明智选择模型并关注调用成本

1848年,加利福尼亚发现黄金,引发了著名的淘金热。但历史学家指出,真正发财的不是淘金者,而是卖铲子和牛仔裤的商人。在 AI 时代,模型调用的成本同样值得关注。

Cursor 支持 OpenAI、Anthropic、Google 等多种模型,不同模型在编程任务上的效果和开销差异很大。以 OpenAI API 为例,GPT-4 的效果往往优于 GPT-3.5,但费用也昂贵数倍。

根据任务需要选择合适的模型:对于简单补全任务可用速度快、成本低的模型;如需高准确度可以切换更强大的模型。在编写简单 POJO 类或重复性代码时,可以暂时将模型切换为 GPT-3.5 等经济型模型;在让 AI 优化复杂算法或审查代码时,再切换到 GPT-4 等高性能模型。

Cursor 界面会提示你的用量和剩余额度,请定期检查避免发生超额扣费。“用对模型做对事”,才能既发挥 AI 威力又不致成本失控。

16. 谨慎使用 Max 模式加载超大上下文

普通模式下,Cursor 限制上下文在约 200k Token 的范围。这对于绝大多数文件已经足够,但某些情况下——比如分析庞大的日志、处理多个文件间复杂关系——可能还嫌不够。

Max Mode 会将支持的模型上下文窗口扩展至最大(例如 GPT-4.1 提供超过 20 万 Token 的上下文)。这确保 AI 有尽可能完整的信息来回答问题。但副作用也很明显:响应变慢(因为处理文本量成倍增加),费用变高(因为计费按 Token 计)。

Max 模式像“涡轮增压”——需要时开一下,不要全程一直开。一旦超大文本分析完毕,应关闭 Max 模式恢复正常,以保持 Cursor 运行的经济高效。

17. 借助 AI 快速生成文档和注释

1989年,蒂姆·伯纳斯-李发明了万维网。他后来说,如果当初没有写好文档,可能就没有人会使用他的发明。文档是软件的“说明书”,但大多数开发者都不喜欢写文档。

好消息是,AI 模型擅长语言生成,用于撰写文档和注释再合适不过。当功能编码完成后,可以请 AI 帮忙生成 README、API 文档或关键代码的注释说明。只需一条指令,Cursor 就能分析整个代码库并生成 README,往往一次就能成型。

在 Java 后端项目中,可以请 AI 生成 REST API 的接口文档草稿,根据 Controller 方法和注解来推断每个接口的用途和参数说明;也可以让它撰写 JavaDoc,为公共类和方法补充文档注释。

让 AI 参与文档工作,不仅减轻了负担,还可促进你检查代码——审视 AI 总结是否正确,从而发现代码中的不清晰之处。

18. 用 AI 自动化样板代码,保持人为掌控

很多后端开发工作属于“增量式”机械劳动:为数据库每张新表编写一套增删改查代码、为每个业务对象编写类似的转换函数。这类任务 AI 往往能一次完成。

利用 AI,可在极短时间内产出模板化代码,从而让开发者专注于业务逻辑本身。例如,使用 MyBatis 或 JPA 时,为每个实体创建 DAO 类、写 XML 或 Repository 接口其实格式都类似,你可以通过一句 prompt 让 Cursor 生成这些重复代码的框架。

然而,AI 毕竟对业务细节不了解,可能忽略某些约定(如字段命名特殊规则、异常处理需求)。因此需要人在循环中监督:把 AI 当作劳动力而非决策者。对 AI 自动生成的大段重复代码,人工迅速过目有助于发现有没有遗漏某些字段或不符合特殊要求的地方。

五、团队协作与持续进化

19. 持续关注社区动态和自我提升

达尔文的进化论告诉我们,生存下来的不是最强壮的物种,而是最能适应变化的物种。在 AI 快速发展的今天,这一法则同样适用。

Cursor 作为新兴工具,更新迭代非常快,几乎每隔几周就有新功能或改进。只有保持学习,才能用好新推出的强大功能(如多模态支持、Slack 集成等)。

定期查阅 Cursor 官方博客以了解新特性,浏览社区论坛、Reddit 板块中的经验分享。很多高手会分享自己的 prompt 模板、Cursor Rules 配置、以及踩过的坑。团队可以每隔一段时间收集这些资料,在内部分享“AI 编程助手最佳实践清单”。

对于 Java 开发者,建议特别关注 Cursor 官方文档中的 Java 指南,以及国内技术博客上关于 Cursor 与 Spring、MyBatis 等技术结合的文章。通过持续的社区互动和内部知识沉淀,团队会逐步形成最适合自身业务特点的 AI 开发流程。

20. 将 AI 评审纳入团队流程

在传统的软件开发中,代码评审(Code Review)是保证质量的重要环节。引入 AI 后,我们可以增加一层“AI 预审”。

Cursor 的 Bugbot 可以自动分析代码差异,指出其中的 bug、潜在安全问题和代码风格问题,并直接在 PR 上留下评论解释问题、给出修改建议。它不仅检查语法错误,还关注安全和质量方面,例如未处理的异常、资源泄漏等。

你可以编写 .cursor/BUGBOT.md 文件为 Bugbot 提供更准确的检查规则,例如列出本项目特有的安全关注点、架构规范和常见错误清单。比如注明“确保所有数据库查询使用参数化,禁止字符串拼接 SQL”,则 AI 审查会针对此类改动重点审视。

对于个人开发者,也可以在重要改动时主动让 AI 过一遍:将代码变更贴给 Chat,请它以审查员身份挑错。AI 建议是辅助而非绝对,一切改动最终还需人负责决策。

结语

以上 20 条最佳实践,涵盖了使用 Cursor AI 编程助手提高效率、提升代码质量、保障安全以及面向团队规模化协作的各个方面。

回到开头卡斯帕罗夫的故事。他在输给深蓝后,并没有对抗机器,而是拥抱了人机协作的理念。他发现,一个普通棋手加上一台普通计算机,只要有良好的协作流程,往往能击败一个象棋大师加一台超级计算机。

这个发现对我们同样适用:AI 工具带来了前所未有的生产力提升,但真正的效率来自于良好的协作实践。不是最强的 AI 或最聪明的程序员获胜,而是那些掌握了人机协作艺术的团队获胜。

希望本指南能够帮助你更好地驾驭 Cursor,让 AI 成为真正的编程拍档,在变化的浪潮中立于不败之地。

看书107个月

发表于 2025/08/09 | 分类于 每月报告

1

七月阅读不及预期。原定目标看书350小时,实际读了320.5小时。

冥想还是不理想。七月冥想了24小时,远低于每月平均45小时。前七个月的平均每天冥想时间为1.3小时,明显低于全年目标的每天1.5小时。我在考虑放弃这个全年目标。

这个月唯一做得比较好的是健身。

2

健身渐入佳境。过去一个月,我一共健身了18天。

中间有一段时间,我其实在健身完之后都没做有氧训练。有的时候是身体累,做完力量训练就不想用跑步机爬坡。有的时候是觉得没意思,爬坡很无聊。

我用了两个技巧改善有氧训练。第一,在爬坡的过程中从慢速到中速,再从中速到慢速。也就是说,让速度的变化刺激身体和大脑。

第二,听歌。我听周杰伦的专辑,从2000年的开始听,打算一直听到最近发行的专辑。一张专辑时长大概是40多分钟,刚好是我一次有氧训练的时间。

改善之后,我发现自己不会觉得有氧训练会很无聊。每次做完力量就会做有氧,出完一身汗,整个人都感觉很舒畅,效果能持续24到48小时。

3

这次健身之所以能坚持两个月,归功于阅读带给我的经验。

经验一:先积累量,不寻求快速的质变。

我从2016年开始积累阅读量,一直到2019年才有明显的变化。三年的量变,才能带来质变。所以我在健身这件事上,不会特别着急。能坚持下来,能持续积累次数,就是成功。

经验二:享受过程,避免进入恐慌区。

大部分时间里,我都会挑比较好读的书。每一次阅读的体验都不差,这样容易坚持。我跟健身教练强调,我的首要诉求是让自己不排斥锻炼,所以不要快速加大训练强度。

经验三:敢于投入,不要因小失大。

我买书、买线上课程和买ChatGPT会员,都很舍得花钱。每年花费的金额,都在五位数。无论是健身房的月卡,还是私教课,都对我有很大的好处。所以我会毫不犹豫把钱花在自己身上。

4

要想长久地坚持做一件事情,必须要对未来有愿景。

我现在坚持健身了两个月,身心状态好了很多。

我希望坚持健身两年后,我可以做到每天睡够7.5小时。心率变异度能到50ms以上。体脂率降到20%以下。

我希望坚持健身二十年后,我可以让自己的身体年龄比实际年龄小5到10岁。

5

八月份有事情要忙,所以目标会定得低一些。

截至2025年7月31日,我一共阅读了17929小时。预计会在2026年4月20日,完成第二个10000小时,也就是总共20000小时的阅读目标。

八月份的阅读目标是600个番茄时间,也就是300个小时。

看书106个月

发表于 2025/07/09 | 分类于 每月报告

1

六月份阅读不及预期。原定目标看书360小时,实际读了297小时。上一次单月低于300小时还是在2023年7月,也就是整整两年前。

冥想也不理想。六月份一共才冥想了27.75小时,大幅度低于每月平均45小时。前六个月的平均冥想时间已经低于每天1.5小时,这样下去全年的目标要完不成。

然而,六月份却是我在过去一年里收获最大的一个月。上个月制定的其中一个探索目标有远远超出预期的收益。

2

这个给我惊喜的探索目标是力量训练,也就是健身。

我很不喜欢健身这个词,它给我的感觉就是要练出一副八块腹肌的完美身材才算是达标。我更喜欢力量训练这个说法。

我在6月3号办了卡,连续去了两天健身房。我自己练不明白,看网上的教学视频也摸不着门道。每次待一个小时,举了举铁,用一用跑步机这样。

6月5号开始请私教。乐刻的私教挺便宜的,一节课220元。

以前我听两个有健身经验的同学说,请教练是浪费钱,很多健身教练都不专业,而且会临时换人什么的。因此,在我的刻板印象里,请私教不靠谱。

这次,我却没有遇到这种情况。我感觉教我的这个教练挺专业负责的,并且从来没有换过人,也没有临时无理由迟到或者缺席。

我在6月份一共上了17节私教课,每节课一个小时。私教课以力量训练为主,结束后我都会加练30分钟的有氧,也就是跑步机爬坡。

训练的效果非常好,远远超出我的预期。每次练完,我感觉身心都特别舒畅,能持续一到两天。我的静息心率从原来每分钟77次,下降到66次。我的心率变异度从原来的31ms,上升到42ms。

3

为什么我做力量训练的效果会这么好呢?原因有以下三点:

第一,起点低。从2018年因为跑步导致膝盖受伤开始,我已经有7年时间没有过规律的运动。常年久坐不动的办公室工作已经让我的身体有了很多小毛病。

第二,有人教。健身还是需要知识的。一个动作怎么做才标准,做多少才有效果,需要有专业人士的在场指导。

第三,有人陪。一个人健身真的很无聊,健身教练可以陪着你聊聊天,跟你沟通动作的调整等等,时间会过得快很多。跟教练约定好哪一天要训练,几点要训练,会有一个督促和事前约定的助推效果。

当然,即便乐刻的私教课相对比较便宜,像我这样一周四练的话,一个月要上20节课左右。算下来,一个月要4400块,不是一个小数目。

然而跟健康的重要性相比,我觉得这笔钱花得值。

4

力量训练效果这么好,当然是要继续坚持。接下来的一个月时间,我还要把睡眠调整好,以及把冥想时间提上去。

我要如何坚持力量训练呢?除了继续买课,继续坚持一周上四次课之外,我计划这个月要开始学会如何自己做力量训练。一周自己加练一天,逐渐学会自己训练。

私教课从一个月20节课,可以减少到一个月10节课,减少到一月5节课这样。向“自己练习为主,教练指导为辅”转变。

我要怎么调整好睡眠呢?避免日夜颠倒,半夜醒来就是做冥想,午睡尽可能避免超过30分钟。

我要怎样把冥想时间提上去呢?每天上午至少冥想30分钟,每天中午饭后至少冥想30分钟,每天睡前至少冥想30分钟。在阅读间隙,尽可能穿插5分钟或15分钟的冥想。

做好这些,我的各项身体指标应该还会有一个明显的提升。

5

即便力量训练给我带来那么多的收获,我还是不能把基本盘给丢掉。

月报延迟了一周,阅读和冥想目标都没完成,文章也没写。这些事情都要好好反省一下,把干扰因素都排除掉,把积极因素引进来。

截至2025年6月30日,我一共阅读了17608.5小时。预计会在2026年5月1日,完成第二个10000小时,也就是总共20000小时的阅读目标。

7月份的阅读目标是700个番茄时间,也就是350个小时。

AI专题:如何借助DeepSeek提防AI诈骗

发表于 2025/06/03 | 分类于 AI专题1

1

近期,AI圈的大佬们不断地提醒人们要提防AI的滥用。

获得2024年诺贝尔物理学奖的“AI教父”杰弗里·辛顿,在接受专访时指出,AI引发“人类失控”的概率已经高达10%-20%,深度伪造技术是近期最现实的恶意场景。

OpenAI的CEO山姆·奥尔特曼在出席美国参议院听证会的时候,强调生成式模型可被用于“大规模定向虚假信息、网络攻击与生物威胁设计”,主张建立“全球AI安全机构以及许可证制度”。

发明阿尔法狗的Google DeepMind CEO,获得2024年诺贝尔化学奖的戴密斯·哈萨比斯在2025年5月剑桥大学演讲中发出提醒:AGI可能会在10年内出现,“其积极潜力与恶意滥用都被低估”。

那么,我们普通人从现在开始最应该警惕哪些迫在眉睫的AI滥用场景呢?

2

在日常网络生活中,我们要警惕别有用心的人使用AI来影响我们的想法。

为了验证AI的说服力有多强,康奈尔大学和哈佛大学的研究者找了一群最难被说服的人来做实验。这些人就是阴谋论信徒。他们相信诸如“疫苗里有纳米追踪芯片”之类的阴谋论,身边的人怎么劝都不听。

实验内容是让受试者与AI进行对话,对话一共有两轮。第一轮对话先是受试者自述自己相信的阴谋论,GPT-4罗列官方证据并指出其逻辑错误。第二轮对话是受试者再辩,AI最终回应。

实验结果显示,他们只需要跟GPT-4进行两轮对话,平均用时6分钟,对阴谋论的相信程度就会下降20%。

如果再提供一些对话者的背景信息,GPT-4的说服力会变得更加强大。在另一个辩论实验中,GPT-4让对方改变观点的概率比人类辩手高出82%。AI之所以能达到这么好的效果,是因为它会根据每个人量身定制辩论策略和针对性地找论据。

在美国版百度贴吧Reddit网站上,有人做了一项备受争议的实验。苏黎世大学的研究者注册了多个AI账户,这些账户都预设了虚假人格背景。也就是说,他们用AI来假装人类用户。在说服力排行榜上,这些AI账户进入全站前1%-2%。

在了解到这些研究之后,我们很自然会想到用AI来做“健康习惯教练”,帮助我们养成健康的生活习惯,变得更加自律;我们还可以让孩子们使用AI做“人工智能学习伙伴”,提高他们的学习兴趣,掌握更科学的学习方法。

然而,面对同一个工具,好人会用它做好事,而坏人则会用它做坏事,例如“杀猪盘”诈骗。

3

所谓“杀猪盘”诈骗,就是在网络上以恋爱的名义博得受害者的信任,然后用假投资平台来骗取金钱的诈骗套路。

传统杀猪盘套路分为三步。第一步,引流或放饲料。通过各种社交平台等网络手段跟潜在受害者加上好友。

第二步,养猪。犯罪分子会通过建立虚假的高大上人设和营造暧昧的恋爱氛围,让受害者误以为自己找到了真爱,进而信任对方。

第三步,杀猪。在确保取得了受害者的信任之后,对方会假装不经意地透露自己有一个好的投资渠道,诱使受害者加入,最终骗取金钱。

在AI工具出现之后,坏人对这个套路做了新一轮升级。

首先是剧本自动生成。犯罪分子会使用从暗网购买的AI工具,批量生成情感剧本。以前这样的工作是由专门的“编剧”来做,成本高,效率低。

然后是私人定制剧本。针对特定受害者,犯罪分子会结合他们的画像信息编写提示词,生成专属的情感剧本。以前一个剧本或几个剧本,会用在很多的受害者身上,针对性远远没有私人定制那么强。

最后是半/全自动聊天。在“养猪”过程中,犯罪分子要花大量时间跟受害者聊天,还要记住不同受害者的各种信息,很容易把不同聊天对象的事情弄混。有了AI工具之后,他们会使用半自动聊天,通过复制粘贴把AI生成的回复发给受害者;或者是全自动聊天,让受害者跟AI“直接聊”。

有人可能以为这只是设想,但现实中已经有犯罪分子在实施这样的AI杀猪盘。早在2023年8月份,一份网络威胁分析报告就从受害者提供的截图取得证据,骗子不小心贴出一句典型的系统回复——“As a language model …I don’t have feelings”,直接暴露他们正把AI工具当作聊天脚本生成器。

2024年5月,澳大利亚 ABC 深度报道援引联合国毒罪署和多位业内人士,指出东南亚大型诈骗园区已经开始使用 LLM + 实时翻译。这意味着,诈骗分子现在哪怕完全不懂另一门语言,也可以进行跨语言诈骗。

面对这样严峻的现实,我们除了提高防诈意识之外,还可以使用DeepSeek来保护自己。

如果我们在网络上遇到一个人,产生了“世界上没人比对方更懂我”的想法,这就要引起我们的警觉了。我们可以把自己跟这个人的聊天记录发给DeepSeek,让它来帮我们分析。尤其是涉及金钱转账和现实见面等决定时,一定要听一听DeepSeek的看法和建议。

有人可能会说,我不会在网上找对象,或者我已经结婚了,这类杀猪盘根本骗不到我头上。接下来要揭示的一类骗局,则是每一个人都有可能会上当的。

4

有一种俗称“爷爷奶奶,我出车祸了”的骗局。骗子会打电话给老年人,谎称是其孙子孙女,出了车祸在医院需要立刻转账接受治疗。因为情况紧急,老年人可能会辨识不出对方声音其实一点都不像。哪怕受害者指出这一点,骗子也会假装自己受伤了身体虚弱导致声音变了。

还有一种骗局我自己都遇到过,就是仿冒公司领导,然后让受害者(大多是公司财务人员)转账。几年前,我接到一个电话,对方开口第一句话就是:“李文业,明天来一趟我的办公室。”我愣了一下,然后问:“请问你是谁?”

对方笑了笑说:“你听不出来我是谁吗?”我说:“听不出来。”对方就把电话挂了。

有了AI工具模拟声音之后,骗子已经可以补上声音不像的漏洞。骗子会事先从社交媒体上获取一小段受害者亲属的声音样本,喂给AI后立刻就能模拟出以假乱真的说话声音。

这样的技术并不高深。你现在就可以点击页面最上方的“听全文”。我用公众号后台的工具录了我一段10秒左右的语音,就已经可以模拟得非常像了。

除了声音之外,AI还可以伪造视频。2023年5月,内蒙古包头市警方通报了一起利用AI换脸的惊人诈骗案。一名商人接到自称是朋友的视频通话,请求帮忙垫付投标保证金。他没想到通话中的“朋友”竟然是骗子用AI人脸替换技术假扮的。受害人信以为真,当场转账430万元人民币。事后他联系到朋友本人才发现被骗。

面对这样的骗局,我们可以怎么办呢?一方面,我们可以跟亲友约定safe word“安全词”。在涉及大额转账时,我们要验证对方是否能说出之前约定的某个词或者某句话。哪怕不约定安全词,起码也要问一两个只有你们两个人才知道的小问题。

另一方面,我们要保持冷静,让DeepSeek给我们注入理性。面对紧急情况,我们不免关心则乱。即使自己已经难以分析当前的局面,我们还是可以把现在遇到的问题发给DeepSeek,让它帮助我们分析情况,并且给出建议和处理方案。

5

AI的发展越迅速,AI的滥用就越值得我们警惕。

我们要警惕在网络上看到的信息。以前网络水军可能只是通过调动我们的情绪,来起到带节奏的作用。现在,他们已经在利用AI工具根据我们每一个人的特点,量身定作各种各样的说服言论。

我们要警惕在网络上让我们怦然心动的人。以前杀猪盘只是用一个固定的剧本来骗那些特定的受众,并且因为聊天“养猪”需要花时间和精力,他们更愿意骗那些容易轻信的人。现在,他们已经在利用AI工具私人定制剧本,并且使用半/全自动聊天的方法,让每个人都有可能遭遇“杀猪盘”诈骗。

我们要警惕突然接到的求救、求助语音电话和视频通话。以前的骗局可能只能骗那些老人或者对声音不敏感的人。现在有了AI技术,他们可以轻松模拟任何人的声音和形象。

除了加强防诈骗意识之外,我们还需要更多的工具帮助我们不上当受骗。遇到任何惊喜或者惊吓的异常情形,我们都可以把情况告诉DeepSeek,让它来帮我们分析,给我们出主意。

面对汹涌而来的AI时代,有人会说,“我年纪大了”,或者“我只想躺平”,没必要了解AI,更不需要接触和使用AI。

然而,“害人之心不可有,防人之心不可无”这句话在AI时代同样适用。他们没有想到的是,坏人会用AI做坏事。如果我们不了解AI,对AI没有基本的常识和使用能力,那么就很有可能被坏人钻空子。

看书105个月

发表于 2025/06/01 | 分类于 每月报告

1

五月份的阅读状态不错。原定目标是看书340小时,实际读了340.5小时,目标达成。

冥想却很糟糕。五月份一共才冥想了20.5小时,不仅低于每月平均45小时,甚至还低于上个月的38.5小时。

就像上个月说的那样,冥想的时长现在比阅读量更能反映我的整体状态。接下来跟大家聊聊我打算如何在六月份把自己从低潮期里拉出来。

2

有两个任务要恢复到我的固定日程里。一个是每天要走10000步,另一个是要使用ChatGPT里的每日行程助手。

参考埃隆·马斯克的五步工作法,我前段时间把每天走一万步和规划一天行程从每日任务里面删除。这段日子,我发现这两个任务对我的作用相当大,是不可或缺的。

每天走一万步的作用是让我有足够的基础运动量,以及不要总待在室内。虽然一万步的运动量并不算大,但是这保证了我能晒够太阳,晚上的睡眠也会变好。

规划一天行程的作用是确保我会使用ChatGPT做我的每日行程助手。每天起来做的第一件事就是做一个大概的规划,安排今天的行程。规划做好之后,我会发给ChatGPT,让它跟进我今天一天的行程。一天结束之后,我还能跟它一起做复盘。

总而言之,每天走一万步和规划一天行程是保证我良好状态的基本盘。做到这两点之后,我才会考虑制定更高的目标,以获得成就感。

3

只是完成基本的任务是不够,还需要制定更高的目标来获得成就感。我计划在六月份制定更高的阅读目标和写作目标。阅读目标我会在月报的最后给出,这里先说写作目标。

我最近在做AI专题的写作。不管是写作兴趣,还是写作质量,都保持得不错。唯一让我不够满意的就是产量。

我在五月份一共写了3篇专题文章,平均10天一篇。我打算在六月份写6篇文章,平均5天一篇。

如果六月份能够完成这两个高难度目标的话,六月份的状态就算调整好了。在此之余,我还有探索新目标的打算。

4

这个月制定两个探索目标,分别是力量训练和跑步。

研究表明,一周2到3次的力量训练有助于延缓肌肉流失,还能缓解焦虑和抑郁。我打算去健身房做力量训练。

有些连锁健身房可以办月卡,我打算办一张。就试一个月,效果好就继续,效果不好也损失不大。

我喜欢跑步,但是很久没好好地跑步了。七年前为了减肥,我狠狠地跑了一段时间,结果没把握好强度,把膝盖给跑伤了。最近我的体重又到了警戒线,想要重新跑步试试看。

这个月试着跑20公里到30公里。每周跑3到4次,中间休息的时候就去健身房做力量训练。

5

我非常庆幸自己养成了每个月写月报的习惯。

每个月固定做这么一件事情,其中的仪式感会让我整理好心态,计划好下一个月要做哪些事情。这就像是上学念书的时候,每个学期期末都会告诉自己:这个学期没好好学没关系,下个学期奋发图强就好了。

如果没有这样的仪式感,日子会过得越来越快,快到让人猝不及防。失去了时间感,就可能来不及总结过去,来不及珍惜现在,来不及计划未来。

截至2025年5月31日,我一共阅读了17311.5小时。预计会在2026年5月1日,完成第二个10000小时,也就是总共20000小时的阅读目标。

6月份的阅读目标是720个番茄时间,也就是360个小时。

上一页1…121314…38下一页

378 日志
9 分类
RSS
© 2017 — 2026 李文业
由 Hexo 强力驱动
|
主题 — NexT.Muse
粤ICP备17160932号