面向AI编程新范式vscode后端开发环境搭建与实践
文章目录
- 写在文章开头
- 基础配置讲解
- 下载并安装配置vscode
- 适配idea个性化设置
- 安装配置验收
- 关闭提示音
- 设置自动保存
- 关闭mini map
- 默认不打开上次的项目
- 调整为IDEA快捷键
- 护眼插件安装
- 详解java后端开发环境基本搭建与基础实践
- java环境基本插件安装和配置
- 快速搭建项目并运行
- maven环境配置
- 启动调试
- 基于hello接口快速上手cue模式
- 基于rules完成代码优化
- 基于skill完成功能社交功能落地
- 快速上手调试功能
- 基础断点调试
- 条件断点
- 动态修改变量
- 表达式分析
- 运行时变更代码
- 调整jvm参数
- 详解go语言基本环境安搭建与AI自动化编程实践
- 基础插件安装
- 拉取项目并运行
- 基于chat和builder快速完成mini-redis功能测试与回归
- 小结
- 参考
写在文章开头
这是笔者打算新写的一个系列的文章——面向AI编程,关于ai编程这个话题,笔者查阅了市面上各大网站和书籍,基本都是面向前端开发,对于更加强调设计且需要串联复杂数据流的后端开发并没有很好的引导,遂笔者打算专门写这样一个系列,希望能给主流后端开发程序员一些灵感。
考虑到教程的普适性以及让读者着重了解AI编程的思想理念,笔者选择了国内评价相对较好的且相对易于上手的trae,而本文将作为整个教程系列的引子,将以两个比较经典的后端项目快速指导读者搭建trae ide的后端开发环境和AI编程技巧的入门。
你好,我是SharkChili,禅与计算机程序设计艺术布道者,希望我的理念对您有所启发。
📝 我的公众号:写代码的SharkChili
在这里,我会分享技术干货、编程思考与开源项目实践。
🚀 我的开源项目:mini-redis
一个用于教学理解的 Redis 精简实现,欢迎 Star & Contribute:
https://github.com/shark-ctrl/mini-redis
👥 欢迎加入读者群
关注公众号,回复【加群】即可获取联系方式,期待与你交流技术、共同成长!
基础配置讲解
下载并安装配置vscode
适配idea个性化设置
安装配置验收
从上文的介绍可知,笔者在完成Trae的下载安装后完成:
- 语言与IDE配色配置
- vs code既有配置导入
- Trae环境变量配置
对此笔者也针对上述小点进行逐一验收和介绍,首先是环境变量的配置验收,按照初始化配置时的提示,我们已经完成的Trae命令行的配置,对应我们可以键入trae --version查看版本信息已确认环境变量配置的准确性。
以笔者的笔记本为例,输出结果如下,由此可知笔者trae Command安装是正确的,后续我们就可以直接通过trae命令唤起Trae IDE:
接下来就是存量环境配置的验收,因为笔者之前一直通过vscode调测理解redis源码,按照Trae的提示,正常情况下Trae也是可以正常跑通并运行redis源码。
和vscode操作基本类似,完成项目导入后,直接点击debug选择开始调试:
可以看到程序很顺利编译通过并以调试模式顺利断点执行,由此可知我们的Trae IDE很好的完成了基本的环境变量配置和存量配置导入:
关闭提示音
默认情况下,我们和Trae AI进行chat交流的时候会有提示音,所以笔者建议初始设置阶段直接将声明关闭, 对应操作步骤为:
- 点击
preference找到settings选项 - 点击
settings搜索sounds - 将
Signal Options: Volume对应The volume of the sounds in percent (0-100).设置为0
对应笔者也给出Trae进入设置选项的操作界面,读者也可以根据settings选项右边的提示快捷进入,以笔者的mac笔记本为例就是Command+,
选择sound将音量调至0:
设置自动保存
关闭mini map
默认不打开上次的项目
restore Windows
调整为IDEA快捷键
完成上述基本配置工作之后,我们就可以进行一些相对定制化的配置,因为笔者主力开发语言是java,所以一直以来都是使用jetbrains旗下的各种IDE例如IDEA、Goland,快捷键也都基本定型,所以考虑到整体开发节奏的一致性,笔者这里直接通过设置定位到快捷设置选定Use JetBrains Keymap,保持常见的快捷操作和IDEA保持一致:
护眼插件安装
为了防止长时间观看博客导致眼睛疲劳,笔者建议安装护眼插件,这里推荐读者安装Falcon Relaxing-Eyes Themes - 护眼主题插件,因为笔者的写作工具不是原生vscode,所以不能直接安装vscode的护眼插件,按照trae官方的说明,vscode原生插件的安装步骤如下:
- 打开vscode官方搜索插件名称Falcon Relaxing-Eyes Themes - 护眼主题:
- 点击打开明细项菜单,通过URL定位到插件作者、插件名称版本号构建vsix文件下载路径,以本次护眼插件为例,地址为
https://marketplace.visualstudio.com/items?itemName=panxiaoan.themes-falcon-vscode,对应的插件作者为panxiaoan,插件名称为themes-falcon-vscode,点击version history定位到版本号为3.0.1:
- 将上述信息整合起来,构建出插件的下载路径为
https://marketplace.visualstudio.com/_apis/public/gallery/publishers/panxiaoan/vsextensions/themes-falcon-vscode/3.0.1/vspackage,点击该链接即可下载插件vsix文件:
模板: https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${itemName.fieldA}/vsextensions/${itemName.fieldB}/${version}/vspackage 示例: https://marketplace.visualstudio.com/_apis/public/gallery/publishers/panxiaoan/vsextensions/themes-falcon-vscode/3.0.1/vspackage- 下载完成后,将插件vsix文件拖入vscode的扩展安装界面,即可安装插件。
详解java后端开发环境基本搭建与基础实践
java环境基本插件安装和配置
考虑到大部分读者主力开发语言都是java,所以笔者优先介绍一下如何在Trae IDE中快速搭建和运行spring boot程序,在此之前读者必须明确如下几点:
- 系统完成java环境变量配置安装
- 系统完成maven环境配置安装
明确上述前置检查步骤完成后,需逐一完成如下几个插件的安装:
Language support for Java ™ for Visual Studio Code:VS Code内置的java语言插件,通过该插件可以做到java智能代码补全、语法高亮检查、代码导航重构等功能。Extension Pack for Java:Extension Pack for Java是Visual Studio Code官方提供的一个扩展包,旨在为开发者提供完整的 Java 开发环境,通过一次性安装多个相关扩展,简化 Java 开发的配置流程,这其中就包含Maven for Java这个maven项目构建支持的插件,这也是笔者要求安装的原因所在。Spring Boot Extension Pack:pring Boot Extension Pack 是 Visual Studio Code 中的一个专用扩展包,由 VMware(原 Pivotal)维护,旨在为 Spring Boot 项目开发提供全方位的工具支持,简化开发流程并提升效率。
通过对上述插件的完整安装,我们的Trae IDE就会一次洗获得如下的java系列插件,自此我们就可以在Trae IDE中创建spring boot程序并运行:
快速搭建项目并运行
通过上述的配置步骤我们的Trae已经具备运行spring boot程序的基本要求了,这里笔者通过提示词的方式基于Trae的builder模式快速生成一个spring boot的基础程序,对应项目结构如下图所示:
完成项目创建基本初始化创建之后,我们就需要按照Trae(本质上是vscode的规范)在项目根目录下创建.vscode文件夹并添加调试配置文件launch.json,然后针对该文件完成程序调试的基本配置信息。
这里笔者也给出自己的配置模板,如下所示,关于配置的基本含义笔者都在配置项右边加以注释表名,这里笔者特别说明一下stopOnEntry这个选项,笔者在这里设置为true是为了调测Trae调试是否生效,若生效则项目启动后会在入口main方法中停止,等待用户步进:
{"version":"0.2.0","configurations":[{"type":"java",// 调试器类型"name":"调试DemoApplication",// 配置名称"request":"launch",// 请求类型"mainClass":"com.example.demo.DemoApplication",// 主类的完整路径"projectName":"demo",// 项目名称"args":"",// 命令行参数"vmArgs":"",// JVM参数"stopOnEntry":true,// 是否在入口处停止"console":"integratedTerminal"// 控制台类型:integratedTerminal(集成终端)、externalTerminal(外部终端)、internalConsole(内部控制台)}]}完成后再添加一个settings.json设置一些特定的编辑器行为,以笔者的java项目为例,添加如下选项确保项目中构建文件发生变更后会自动进行构建工作:
{// Java项目构建配置更新行为设置// - "interactive": 交互模式 - 检测到构建文件变化时弹出提示询问是否重新加载项目// - "automatic": 自动模式 - 自动检测并更新构建配置,无需用户确认// - "disabled": 禁用模式 - 不自动检测和更新构建配置// 适用场景:修改pom.xml、build.gradle等构建配置文件时"java.configuration.updateBuildConfiguration":"interactive",}maven环境配置
大部分企业团队都有自己的maven仓库,入职时都会统一给出maven配置文件,与idea配置步骤类似,trae IDE同样支持指定maven配置路径,对应操作步骤为:
- 呼出设置页面点击go to setttings
- 切换到workspace搜索maven关键字
- 找到Path to Maven’s user settings.xml粘贴目标配置文件地址
启动调试
完成上述准备之后,我们点击debug选项选择刚刚的配置项,然后点击右边的绿色的debug按键:
若看到项目启动成功并在入口处停住,就说明我们本次的Trae IDE关于java的基本开发环境搭建基本成功:
基于hello接口快速上手cue模式
按照trae官方的说法:
CUE 是一款旨在提升开发效率的智能编程工具,支持代码补全、Cue-Pro、智能导入等功能。
为了更好的演示这个功能,笔者在项目初始化阶段构建了一个hello接口,现在希望将其进行如下改造:
- 传入字符串类型的用户名
- 判断用户名是否为空,若为空则报错,若非空则进入步骤3
- 返回hello+用户名拼接字符串
这里笔者先给出接口初始化的样子:
@RestControllerpublicclassHelloController{@GetMapping("/hello")publicStringhello(){return"Hello, this is Spring Boot project and created by Trae!";}}所以在笔者键入@符号后,cue很快就推理出笔者的意图给出name参数,但是看起来还是多了一个defaultValue,没关系,我们tab全量接受后手工调整一下即可:
同理笔者不断键入if、throw、return上个逻辑意图关键字,cue很快的帮我们完成了如下逻辑填充:
if:name非空判断throw:抛出非法参数异常return:返回hello+用户姓名
对应笔者也贴出案例的代码段,看起来推理能力是非常出色的:
同时cue模式也是支持通过感知上下文,完成代码修改和补全,例如笔者希望将字符串判空操作用hutool工具类,也直接通过声明注释的方式驱动cue模式感知和修改:
对应我们在终端键入:
curl"http://localhost:8080/hello?name=John"可以看到键入name后结果正常输出,由此我们完成cue模式的基本实践:
基于rules完成代码优化
rules是一套规则配置系统,允许用户通过markdown格式编写相应规则约束和规范AI的行为,本质上rules也是提示词,只不过这份提示词是用户或者团队经过长期工程实践后得到标准化提示词。与日常提示交流相比,rules更像是给AI使用说明书,让模型遵循用户的意愿。
所以我们对于规则的管理也需要从工程化的角度来考虑,确保规则做到:
可维护:规则方便维护管理,确保长期实时迭代与时俱进跟进开发理念,提升效率
可复用:规则一定是长期实践得到的普适的守则
可控生效:规则生效范围,可以按照项目或者用户的维度
单一职责:每条规则仅处理一个类别的事情,避免一份规则文档揉进各种代码风格、目录约定、框架规范等多维度规约
按需划分规则使用范围
定期维护迭代规则
基于skill完成功能社交功能落地
skill是近期比较火热的词汇,
快速上手调试功能
基础断点调试
为了让读者快速上手的trae的一些基本调试功能,笔者基于上述java项目简单调整一下代码并给出一个function函数的调用,按照vscode官方的说法,java程序进行调试时可以直接在main方法上点击debug亦或者键入快捷键F5启动调试模式:
以笔者为例,快捷F5唤醒调试模式,主线程启动后直接暂停在断点处,此时我们就可以选择单步进入或者单步跳过执行断点,对应断点快捷键笔者还是推荐使用vscode原生键位:
- 单步进入(step into):F11
- 单步跳过(step over):F10
条件断点
与IDEA类似,trae也支持指定条件断点,例如我们希望在i等于10的时候停下进行分析调试,就可以在指定位置打上断点再右键点击edit Breakpoint进行条件编辑:
以笔者为例,需要在第11次循环停下,所以对应的条件就是i==10:
可以看到,最终代码如愿在第11次停下:
动态修改变量
这算是笔者的一个邪修的技巧,无论IDEA还是trae都是屡试不爽,即调试时动态修改变量时调试分析代码,例如我们有下面这段代码,因为变量b在编码中定时为true,我们希望调试时以false的方式执行,此时就可以借住vscode变量视图进行运行时修改:
booleanb=true;if(b){System.out.println("b为true");}else{System.out.println("b为false");}操作步骤如下图,笔者通过run and debug面板看到变量视图,在本地变量一栏中定位到变量b,双击直接将其修改为false,直接改变了变量的走向:
表达式分析
对于复杂的逻辑,我们希望在断点时动态观测特定变量的变化,例如下面这段代码,对应不同的method都会修改age这个key的值,我们希望增加一个观测key的断点表达式分析,此时就可以通过trae的watch面板插入分析key的代码段:
publicstaticvoidmain(String[]args){// SpringApplication.run(DemoApplication.class, args);Map<String,Object>map=newHashMap<>();method1(map);method2(map);method3(map);}privatestaticvoidmethod1(Map<String,Object>map){map.put("name","张三");map.put("age",18);System.out.println(map);}privatestaticvoidmethod2(Map<String,Object>map){map.put("age",20);}privatestaticvoidmethod3(Map<String,Object>map){map.put("age",35);}如下图,笔者直接在watch面板插入map.get("age"),对应输出结果就会跟随函数的调用而变更:
运行时变更代码
这是trae(底层vscode)一个高级的调试技术,即代码热替换,例如上面代码段,我们希望在调试期间将method3的代码段替换为map.put("other-key", 35);,对应的设置步骤为:
- 修改method3代码
- 点击
hot code replace
如下图,可以看到笔者修改代码后直接点击闪电的logo,对应watch面板可以看到method3的调用添加了一个新的key:
调整jvm参数
作为java开发我们日常需要针对jvm参数进行调整,与之对应trae(底层的vscode)针对这些参数也是严格按照规范在launch.json配置程序的基本信息,对应参数为vmArgs,如下图笔者这里将堆内存设置为100m:
程序启动后,笔者直接呼出arthas键入jvm,确实看到的最大堆内存的设置参数:
同理我们也可以用memory指令印证这一点:
详解go语言基本环境安搭建与AI自动化编程实践
基础插件安装
以笔者一直维护的一个开源学习项目mini-redis为例,该项目采用go语言编写,对应我们也需要在Trae中集成go语言相关插件,和vs code操作步骤类似,在插件市场搜索go,找到排在最前面的插件点击安装,等待片刻后我们就完成了Trae IDE下go语言环境的基本搭建了:
拉取项目并运行
随后我们就可以拉取mini-redis并尝试在Trae中运行,对应的mini-redis地址为:https://github.com/shkctl/mini-redis.git
完成后我们直接打开项目,创建一个.vscode文件夹并添加launch.json文件(点击直接点击调试根据提示创建文件):
{"version":"0.2.0", //VS Code 的调试配置文件版本,目前使用的是0.2.0 版本"configurations":[{"name":"Launch Package",// 调试配置的名称,这里是"Launch Package""type":"go",// 调试器类型,这里是"go",表示使用 Go 语言的调试器"request":"launch",// 请求类型,这里是"launch",表示启动调试会话"mode":"auto",// 调试模式,这里是"auto",表示自动选择调试模式"program":"${workspaceFolder}",// 要调试的程序路径,这里是当前工作空间文件夹"dlvFlags":["--check-go-version=false"]// 传递给 dlv 调试器的额外标志,这里禁用了 Go 版本检查}]}完成上述的配置后点击debug,此时我们就可以愉快的调试代码了,自此我们完成了后端开发环境最基本的配置工作:
基于chat和builder快速完成mini-redis功能测试与回归
完成了基本的环境搭建之后,我们再来介绍一下trae中强大的chat和builder模式,按照trae官方的给出的说法,两者的通俗意义上的定义和工作理念上的区别为:
- chat:代码级的实时协助,即AI结对编程搭档。
- builder:项目级别的全自动生成,自动性会更强,会自动完成一些命令交互、项目依赖配置、构建等综合性工作,可以理解为AI项目经理。
了解chat和builder的基本概念后,笔者将针对自己独立开发维护的开源项目mini-redis对应列表操作底层的数据结构进行单元测试和逻辑梳理,整体的工作思路为:
- 通过chat模式完成精确级的代码逻辑沟通对齐
- 明确思路后,要求AI以
KITE提示框架生成单元测试逻辑的提示词 - 基于步骤2的提示词,通过builder模式完成测试单元落地
明确思路后我们就开始本次的编码工作,我们首先通过@选项将模式切换为chat模式:
切换chat模式后,我通过#文件的方式引用本次需要生成单元测试代码段,确保AI能够精准定位本次的工作内容,从而辅助完成提示词的优化,对应操作演示如下图:
如下便是笔者需要AI辅助完成优化的提示词,可以看到笔者明确按照KITE原则编写提示词,即:
- 背景说明
- 任务描述
- 预期目标
- 限定条件
你是一名资深的提示词工程师,能够编写出符合KITE提示词框架规范的优秀提示词让AI高效完成工作,下面是我后续准备通过trae builder模式进行辅助编程的提示词,请你仔细阅读理解,帮我完成提示词的优化和改进,以下是我编写的提示词:## 背景说明你是一名具备5年开发经验go语言开发工程师,同时熟练掌握C语言,最近深入阅读redis(3.2.12)的源码,深入理解其列表指令rpush、lpop、lrange指令及其底层链表数据结构的设计与实现,为了更好的验证自己的学习成果,你用go语言复刻列表指令底层的数据结构和指令## 任务描述请阅读adlist.go和command.go下rpushCommand、lpopCommand、lrangeCommand、lindexCommand等参考redis编写的逻辑,完成如下几个测试用例的编写并确保所有单元测试通过:1. 测试连续三次调用rpushCommand添加元素aa、bb、cc后,链表长度为32. 测试lindex传值为0,输出的结果为aa3. 测试lindex传值为1,输出结果为bb4. 测试lindex传值为2,输出结果为cc5. 测试调用lpop后,输出的值为aa6. 测试再次调用lpop后,链表长度为1 完成上述单元测试的编码工作后,主动运行单元测试且所有用例都运行通过## 预期目标所有单元测试都是绿灯通过## 执行限定1. 不要修改adlist.go和command.go两个文件2. 生成一个command_test.go文件编写单元测试3. 单元测试需给出必要的注释,注释必须是中文4. 上述逻辑都写在一个单元测试上,函数名为listCommonTest5. 确保所有单元测试都能够编译通过具备可执行的基础6. 如果运行单元发现错误,优先考虑自己单元测试的问题,明确单元测试编写无误后,再去排查adlist.go和command.go两个文件逻辑是否存在问题,如果有请指出但不要修改,让我确认后再动手对应调整后,笔者提示词被trae优化为如下文本,对此笔者将其保存到项目路径下,感兴趣的读者可以移步笔者的开发项目mini-redis了解详情:https://github.com/shark-ctrl/mini-redis
自此我们一切准备就绪,直接将trae切换为builder模式让AI着手工作:
最终AI如预期所示保质保量的完成的单元测试的开发和验收,这里笔者也给出Trae落地的测试代码,可以看到在提示词良好的情况下,编码质量非常不错逻辑清晰,注释也非常到位:
// listCommonTest 测试链表相关命令的功能// 包含以下测试用例:// 1. 测试连续三次添加元素aa、bb、cc后,链表长度为3// 2. 测试索引0的元素为aa// 3. 测试索引1的元素为bb// 4. 测试索引2的元素为cc// 5. 测试弹出第一个元素后,链表头为bb// 6. 测试再次弹出元素后,链表长度为1funclistCommonTest(t*testing.T){// 初始化测试环境setupTest()// 测试1: 连续三次添加元素aa、bb、cc后,链表长度为3t.Log("测试1: 连续三次添加元素aa、bb、cc后,链表长度为3")// 创建链表对象listObj:=createListObject()// 添加元素aaval1:="aa"obj1:=createStringObject(&val1,len(val1))listTypePush(listObj,obj1,REDIS_TAIL)// 添加元素bbval2:="bb"obj2:=createStringObject(&val2,len(val2))listTypePush(listObj,obj2,REDIS_TAIL)// 添加元素ccval3:="cc"obj3:=createStringObject(&val3,len(val3))listTypePush(listObj,obj3,REDIS_TAIL)// 检查链表长度是否为3length:=listTypeLength(listObj)iflength!=3{t.Fatalf("链表长度应为3,实际为%d",length)}t.Logf("测试1通过: 链表长度为%d",length)//......t.Log("所有测试用例通过!")}小结
本文通过两个经典的后端工程案例演示了Trae IDE下项目搭建和运行的基本配置流程,同时基于一个接口改造的例子演示的cue这个自动化代码补全的功能特性,随后我们更进一步以提示词驱动的方式协同AI完成编码自动化构建和测试闭环。对此我们不妨来小结一下本文面向AI编程的一些小技巧:
- 通过注释驱动AI完成代码修改和补全
- 巧妙利用chat进行精确代码级功能梳理、方案对齐和片段代码功能落地
- 实用KITE提示词框架规范沟通流程,通过chat模式优化对齐提示词,用builder完成完整功能模块开发落地和调测
你好,我是SharkChili,禅与计算机程序设计艺术布道者,希望我的理念对您有所启发。
📝 我的公众号:写代码的SharkChili
在这里,我会分享技术干货、编程思考与开源项目实践。
🚀 我的开源项目:mini-redis
一个用于教学理解的 Redis 精简实现,欢迎 Star & Contribute:
https://github.com/shark-ctrl/mini-redis
👥 欢迎加入读者群
关注公众号,回复【加群】即可获取联系方式,期待与你交流技术、共同成长!
参考
安装和配置 Visual Studio Code 以用于 Go 语言开发:
https://learn.microsoft.com/zh-cn/azure/developer/go/configure-visual-studio-code
Trae官方文档:https://docs.trae.cn/ide/what-is-trae?_lang=zh
【亲测有效】vscode关闭声音提示:https://zhuanlan.zhihu.com/p/700708519
Spring Boot in Visual Studio Code
:https://code.visualstudio.com/docs/java/java-spring-boot
VS Code运行Spring Boot项目全攻略 从环境配置到一键启动解决常见报错问题
:https://www.oryoy.com/news/vs-code-yun-xing-spring-boot-xiang-mu-quan-gong-lve-cong-huan-jing-pei-zhi-dao-yi-jian-qi-dong-jie-j.html
《ai原生应用开发 提示词工程原理与实战》
《【直播回放】TRAE 用户使用技巧分享专场 2025年09月25日18点场》
https://juejin.cn/post/7462026065897914379#heading-2
https://code.visualstudio.com/docs/java/java-debugging#_configuration-options
https://jishuzhan.net/article/1932322860755890178
