本文面向技术人员阅读,非技术人员不一定能看懂全文。 昨天晚上花了2小时,用cursor完成了一个轻量级web框架开发,着实让我惊叹到了,效率惊人,代码质量非常高,注释清晰、结构合理、文档完善,直接可以达到拿去开源的水平了。

背景

先说下背景,本人是一个据有多年开发经验的老鸟,虽然谈不上大佬,但是的软件开发上也是拥有一定的经验,前后端、python、java、golang都会一点,也做过几年的架构,所以用cursor开发框架,我能描述我所需要的东西。 同时,有个项目需要,在一个业务管理平台,需要管理和采集边缘侧的设备信息,需要部署边缘侧软件,与管理中心通信,并且采集边缘侧设备数据,具体的需求不展开了,我归纳总结下,就是需要一个边缘侧软件服务,能与中心侧进行http通信,同时和设备进行TCP通信,同时这个边缘侧也有简单的web页面进行管理,也希望比较轻量级的服务。不希望采用springboot这种比较重的框架来做,做过一些调研,要么采用vertx框架(java系)、要么采用golang实现这两方式,考虑到vertx功能比较多,学习成本比较高,而golang开发的后续维护人员不一会golang语言。 所以有想自己造个轮子的想法,基于netty撸一个比较轻量级的web框架,翻了开源界的,有是有几个现成的,但是看着star只有两位数的,不太敢用(稳定性、bug等各方面考虑)。 所有有计划自己撸一个。 netty还是比较熟悉,曾用它做过淘宝的图片服务器,性能上那真是杠杠的。虽然技术方案和实现,自己心里都很有底的,但是感觉肯定也会有bug出现。 正好前段时间cursor刚出来时,体验了下开发一个chrome插件,感觉很省力,最近又看了下网上不少不懂技术的人也开发出来产品,了解了一番,感觉用这个工具来帮完成这个开发应该能行地通。

要求

近半年也陆续学习了些AI知识,花了半天了解下别人使用cursor的心得,依据我的理解,说下使用cursor入门要求:

  • 对于业务功能性的产品开发,也就是直接终端用的产品,比如APP、小程序、网站、桌面应用等等之类的,最好有产品经理的思维,一句话,你能描述清楚你想要的是什么产品功能,其实这个门槛很低的,把产品功能列出来,业务和逻辑上能走通就行了。
  • 对于技术性产品,OK,这个网上案例应该比较少,今天我的这个案例就是技术性产品,需要你本身是一个技术人员,最好有抽象和架构能力的技术同学,产品用户往往是开发人员,需要你能抽像描述清楚各技术维度的要求和功能。

行动

基础入门

了解cursor的基本用法、使用注意点,技巧,基本上花半小时就差不多了 ,cursor真的是针对小白一样用户使用操作,如果你使用过chatgpt等AI聊天工具的人(我相信大部分网民多少都有用过了吧,不过真落后了),会写基本的prompt 那最好了。 cursor的基本用法,可以访问这儿《Cursor教学》花10分钟看下就行了。 怎么写prompt,可以参考这个文章《一文学会Prompt(提示词)编写技巧

第一步,设定系统规则

详见文档:《Cursor编写一个技术产品的System Rules

第二步,写提示词

说实话,三个小时完成框架开发,其中花费我最多脑力的就近一个小时编写了需求的提示词,直接贴出来了,有需要的可以参考:

<div id="code-lang-markdown"><p><code data-highlighted="yes"><table><tbody><tr><td><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
</pre></td><td><pre>你是一名具有20年经验极其优秀的架构师,精通所有编程语言,对基础软件框架建设有特别的心得,特别在安全性、稳定性以及高性能上有着丰富的经验。

我们目前新建了一个web框架项目,叫tiny,你现在正在这个项目的根目录,请帮助我完成这个框架的开发。

## 框架的功能说明

1、基于Netty框架,实现轻量级的Web框架,启动占用资源少,系统响应速度快,运行稳定;

2、支持HTTP请求和响应,支持按http请求uri路由,使用框架的开发用户可以在路由配置类里面容易地增加路由,然后根据路由可以开发具体的业务功能;

3、支持在application.yaml文件里面配置全局的变量,比如在实现具体功能时的业务变量,系统启动后,初始化为全局appcontext,在任何功能实现可以使用变量;

4、支持引入SQLite作为本地数据持续化存储,并有方便访问SQLite接口配置;

5、支持TCP长连接,该框架后续将会与物联网设备建立长连接,由设备发起TCP连接请求,建立连接后,该框架上的业务功能实现,可以通过TCP连接请求设备,拿到业务需要的数据或者下发指令;

6、支持对外请求响应的拦截处理,方便后续功能开发上扩展增加处理类(例如鉴权判断);

7、支持前端静态资源文件集成和访问(包含图片、css、js、html等前端工程编译后的内容,放在框架的static目录);

8、支持本地关键数据缓存功能(list、map等);

9、支持http服务端口配置,支持tcp端口配置;

10、运行时支持外部http请求心跳检测;

11、支持日志打印

## 技术选型

1、采用maven管理工程;
2、使用java语言,基于netty框架开发,尽量少引入其他依赖,必要引入时需要用户(我)来确定;
3、保持java通用的目录结构(包括不权限于pom.xml位置、src文件夹、resource文件夹、static文件夹);

## 非技术性要求

1、之所以没有使用业界上的现有web框架,主要是太重了,希望基于netty实现一个启动占用资源少,系统响应速度快,运行稳定的轻而小的web框架,后续用于运行在物联网边缘侧设备上;

2、请做好代码注释,方便框架维护者后续可以修改,同时方便开发者用户知道怎么使用框架;

3、因netty框架使用,在不同业务场景下,配置的netty参数不同,以发挥最佳性能,请提供三套相关参数配置建议(低并发请求量场景、普通并发请求场景、高并发请求场景)

4、框架的java包以com.benzhitech作为开头

## 其他要求

1、实现以下功能 demo:

- 有前端页面
- 有http接口请求
- 收到http请求后的处理
- http处理中访问数据库
- 收到tcp请求后,建立tcp连接,并能使用tcp连接通信

2、 请把你的设计思路、原则、实现过程完整地写入到readme.md文件中

3、完成框架开发时,请写一份框架使用说明文档放在根目录
</pre></td></tr></tbody></table></p></div>

第三步,丢给cursor开始工作

打开compose界面,把上面提示词丢给它,然后它就开始工作了:

Cursor会把任务拆解,然后按拆解后的任务开始一个个做,每做完一个,会让你确定是否认可。你可以拒绝让他重新生成代码,也可以提出建议让他修改。

这过程中,有些需要注意点:

1、因为有些功能或需求在交互过程你可能会提出看法建议,从而打断他的任务,所以回到继续往前开发进度上,你要时不时提醒他回顾聊天上下文;

2、提示他开发的任务和进度写入task.md文件;

3、因为我网络有过中断,cursor也关了重开过,所以为了让他继续开发,我需要让他了解之前所有的东西,我一般会使用@CodeBase 然后提示他查看上下文和任务进度(task.md),让他继续;

4、过程中,我也会想到和提出自己的一些建议;

时不时提醒它

这个我不太确定是否需要,因为我没办法验证有效性,但是从我的理解上来说,怕Cusor记忆丢失(AI对话久了老是会忘记背景和前面说的话),需要时不时作些提醒,总能加强他的理解,以防出现幻觉。我用的提醒方式有以下几种:

  1. 把必要的信息写入文档,包括需求、任务进度等,文档放在项目根目录,必要时@相关的文档;

  2. 需要全局它回顾代码时,用@CodeBase命令,它会去阅读项目所有的代码,以了解整体代码情况;

  3. 时不时的让他回顾下对话上下文,明白目前进度情况,对话背景等等,以知道后续要做的工作;

第四步,review所有代码

完成所有开发时,让他转换下身份,对整体代码Review并做些评价,有问题的时候再让他作优化

第五步:运行和测试

让它运行代码,和跑单元测试,这时候如果有报错,可以把错误发给它,让他修复相关错误。

第六步 编写文档

最后,让他编写相关的文档,这是提示词:

这文档编写出来的质量,真是清晰明了,包括架构图、流程图,使用案例等等,各方面都很完整

使用反馈与计划

当前使用情况

  • 已使用请求次数: 41次

  • 免费额度: 每个注册账号可免费使用50次,剩余约9次。

下一步计划

  • 选项一: 重新注册一个新的账号以继续享受免费服务。

  • 选项二: 考虑花费20美元购买Pro版本,据说通过某些渠道可以更优惠的价格购得。建议稍后进行调查确认。

对服务质量的评价

  • 总体满意度: 非常满意,服务表现超出预期。

  • 开发效率提升: 相较于自行开发预计需要两周时间(包括一周的开发和一周的调试测试),该服务大大缩短了项目周期。

  • 代码质量: 代码编写规范,注释清晰,极大地方便了后续的修改和维护工作,相比一些低质量代码具有明显优势。


我觉得这个工具非常强大,它能够支持多种语言和开发环境,比如Chrome插件、Windows桌面应用、iOS开发、小程序以及原生app等。对于那些自己不太熟悉的领域或者重复性的工作,都可以通过这个工具来完成。这无疑大大提升了开发效率,让开发者能够更专注于核心业务逻辑的实现。