最近使用了差不多半个月的Windsurf,使用下来的感觉就是这玩意血强,不比cursor差。之前体验过免费的cursor,但completion的次数很快就用完了,体验的确很好,但20美刀的价格的确需要仔细考虑考虑,后来就开始体验Windsurf,只有cursor一半的价格(不知道啥时候会变成15),但也依然保持着优秀的体验,因此今天我就写几点关于我使用Windsurf的一些心得。
善用rules配置
Windsurf应该是上周左右推出的rules功能,之前没有这个最明显的麻烦之处在于,对话开始如果不特别说明,回复都是英文,因此如果只是想让它说中文的话,可以直接在rules里面配置让其说中文,这个rules可以理解成System Prompt
,因此一个优秀的rules可以大大的提升模型的输出效果。这个功能在cursor上早就推出了,网上也有一个仓库收集了很多优秀的配置: https://github.com/PatrickJS/awesome-cursorrules ,各位可以自行去看看有没有适合自己的。
我这边对于rules配置的建议是这样的,首先要明确角色背景,比如我是个Java开发工程师,因此我会告诉它:
角色背景:
- 您是一名经验丰富的资深 Java 开发架构师。
- 始终坚持 SOLID 原则、DRY 原则、KISS 原则和 YAGNI 原则。
- 遵循 OWASP 最佳实践。
- 善于将任务分解为最小单元,并以循序渐进的方式解决问题。
- 使用中文回答我的问题。
这一段也是来自于刚刚仓库里面的推荐,主要可以让模型提供提供最佳实践的代码,避免一些低质量的代码影响整体的代码效果。
此外,rules可以设置global的或者workspace的,对于workspace的rules,可以给予其技术栈以及目录结构的说明,举个例子:
技术栈:
- 框架: Java Spring Boot 2,Maven,Java 8
- 依赖: MybatisPlus, Lombok, PostgreSQL driver, Redis, ShardingJDBC
项目背景:xx引擎系统,主要用来解决。。。
项目结构:
- common 通用依赖包,core和starter都会依赖此模块
- constants 常量类
- mq 消息传输定义的对象
- core 核心业务开发模块
- entity 数据库实体
- mapper 数据库mapper
- service 服务类及接口
- db 基于Mybatis Plus 框架生成的简单service及其实现
- biz 业务具体实现的服务
- controller RestController层
- mq 消息处理的处理器
- filter 一些过滤器
- config 系统配置
- starter 给予其他业务系统的springboot starter
- config starter的配置
- client 一些用于请求当前项目封装好的客户端
明确这些背景知识的好处在于,可以让其更加针对于此项目来做代码设计,尤其是经常会跨文件修改时,能避免找错文件位置或者用了不适合当前技术栈的解决方案。
良好的代码风格
在新项目的开发过程中,尽量做好代码架构的初步设计,可以使用一些设计模式或架构设计思想来构建整体的开发风格,举个例子,比如说你用模版模式,那你最终要实现的实际上是基于模版提供的几个方法的实现,相当于把业务进行了逻辑上的拆分,那么当你实现其中一个业务上的代码后,那么实现其他继承该模板类的子类时,你可以将已经实现好的代码作为参考代码给予模型,具体操作就是选中你要提供给模型的参考代码,然后点击chat,右侧的输入框就会出现引用,这样就类似于few shot的方式让其回答的效果更加准确,实际prompt大致是这样的:
请你参考(选中代码的引用)来完成(要修改的代码的引用):
(额外可以补充一点需求内容)
如果你不知道怎么设计更好的代码架构时,你也可以直接通过对话让其给你建议,这不仅是对于使用Windsurf的建议,也是现在有AI辅助时代的程序员新的开发思路,AI就是跟你一起思考的小黄鸭。
这里的代码风格包括但不限于设计模式,还有良好的命名规范、合适的模块拆分、准确的代码注释等,对于模型理解当前仓库的代码都有很大的帮助。
适当使用提示词技巧
在Windsurf中,对于提示词的要求相对于直接使用模型对话已经低了不少,但高效的提示词依然还是能带来更好的反馈。比如上面使用的few shot,在实际业务开发中逻辑接近的代码其实很多,因此能用上的时候尽量用上,避免模型放飞自我写出其他风格的视线。
此外很重要的一个技巧就是思维链,就算Windsurf在对话过程中我们能看出它也是在一步步的思考并解决问题,但如果你已经有很清晰的思路,不妨多打几行字把你的思路告诉它,这比它自己跑偏了你再纠正效率要高得多。
最后想说的是,作为程序员,一定要跟上当前AI的时代,既不要听信什么AI能取代程序员,也不要排斥使用AI工具,因此对于AI要保持一个客观的态度,多使用一段时间就能差不多感知到模型能力的边界,自然就能很好的利用好它来提升自己工作的效率。