VibeCoding在社交平台上一直是一个有争议性的话题。有人觉得AI能写代码之后不再需要程序员了,有人觉得AI写的代码实现不了复杂的功能,有人觉得AI写的代码有bug修复起来更花时间,有人觉得AI会偷走自己的业务代码。。
但不可否认的是,对于大多数开发者,AI已经是工作中的一部分。下面我会分享一个使用AI完成一个桌面端小工具的例子。体验一下使用AI能提升多少效率。
当然如果不想看例子我也把总结放到最前面。
当前工作中,我们通常在windows上开发代码打包,在实验室环境上部署服务进行测试。因此我希望能开发一个桌面端的小工具。来解决打完包到部署服务之间的GAP。
实现的基本功能如下:
用到的AI工具:豆包。(当然使用Trae会有更好的体验,但是考虑安全因素不使用外部ide)
输入限制:不输入任何已有的本地代码,仅允许输入提示词、实现本工具新写的代码、豆包自身生成的代码。
因为我没有太多开发桌面端的经验,因此也通过简单描述工具功能寻求豆包建议。可以看到首次提问时我对整个工具并没有非常清晰的规划,但是豆包仍然给出了多个建议。
同样对于不熟悉的领域也寻求了专家的建议,出现了和豆包建议重合的框架Tauri。因此最终选用的Tauri框架来实现。
打开Tauri官网
根据官网文档安装依赖:
按照官网文档创建项目:
考虑到团队内部的技术积累,选取前端UI模板Angular:
前端实现直接手写了html+ts代码,主要包含两个功能:
使用自然语言描述对我而言更复杂也更花费时间,手写代码实现基本的页面框架更高效。代码中为相同类型的组件预置了相同的class,我期望这种写法在后续使用AI补全css代码时能得到更好的结果。
<main class="container">
<form class="url-form" (submit)="query($event, inputUrl.value)">
<div class="form-row">
<textarea #inputUrl id="url-input" class="url-text textarea" placeholder="支持传入多个url 每个url单独一行 例:
https://xxxx1.com
https://xxxx2.com
......"></textarea>
<button type="submit" class="button primary">查询</button>
</div>
<div class="form-row">
<input type="text" class="search-text input" placeholder="请输入搜索关键字" [(ngModel)]="filterKey"
[ngModelOptions]="{standalone: true}" (input)="applyFilter()">
<input type="checkbox" class="checkbox" [(ngModel)]="selectAll" (change)="toggleAll()"
[ngModelOptions]="{standalone: true}" /> 全选
<input type="checkbox" class="checkbox" [(ngModel)]="onlyZip" (change)="applyFilter()"
[ngModelOptions]="{standalone: true}" /> 仅显示zip/gz文件
</div>
</form>
<div class="table">
<ng-container
*ngFor="let v of data.filteredData | paginate: { itemsPerPage: itemsPerPage, currentPage: currentPage }">
<div class="fileRow">
<input type="checkbox" class="checkbox" [(ngModel)]="v.checked" (click)="checkBoxClick($event,v)" [ngModelOptions]="{standalone: true}" />
<div class="fileText">{{v.name}}</div>
</div>
</ng-container>
</div>
<form (submit)="download($event,user.value,userPwd.value,roowPwd.value,turnkey.value,downLoadPath.value)">
<div class="group">
<div class="row">
<div class="label">登录用户:</div>
<input #user id="user-input" class="input" placeholder="请输入登录用户" value="sopuser" />
</div>
<div class="row">
<div class="label">登录用户密码:</div>
<input #userPwd id="userPwd-input" type="password" class="input" placeholder="请输入登录用户密码" value="" />
</div>
</div>
<div class="group">
<div class="row">
<div class="label">ip:</div>
<input #ip id="ip-input" class="input" placeholder="请输入turnkey ip地址" value="" />
</div>
<div class="row">
<div class="label">下载目标目录:</div>
<input #downLoadPath id="downLoadPath-input" class="input" placeholder="请输入下载目标目录:" value="" />
</div>
</div>
<div class="download-info" *ngIf="data.fileList.length > 0">
<button type="submit" class="download-button button primary">下载</button>
</div>
</form>
</main>
基本样式如下:
提示词如下,后面附上了上一步手写的全部html代码:
deep research会进行一次反问,获取更详细的需求。
生成css小样:一次性返回了500行左右的css代码,这里不全部展示了。我们以button为例,可以看出AI生成的css代码是比较完善的,不仅仅符合了我们需要的风格,还为其添加了hover,active,focus等状态样式(相比初级的前端开发首次完成开发任务的完成度)。
将css文件加入项目代码后页面,基本符合日常使用需求:
这里我在提示词中直接给出了一个实例和返回结果。直接生成了可用的代码。生成代码中含有示例使用方式方便合入。
生成代码样例,已经包含了完整的功能实现,代码符合Angular写法,放入项目中直接可用,并且包含了防止内存溢出处理(超出预期):
生成页面效果:
这是一个后端比较经典的功能,发起多个请求,当其中存在失败的请求后单个请求重试。这时候对VibeCoding的使用已经比较熟悉了,描述也更加结构化,生成的代码逻辑上没有错误,我对一些变量名进行修改后放入项目代码直接可用。
生成代码样例:
在后端上,虽然说明了需要Tauri 2.0框架下的代码样例,但是生成的仍然是1.0的代码,并不兼容。看来对一些非主流的框架还是有一些限制。
考虑查询rust接口文档,跟着文档实现还是很快的:
reqwest:https://docs.rs/reqwest/latest/reqwest/
ssh2:https://docs.rs/ssh2/0.9.5/ssh2/index.html
框架问题还是查询官方文档最快,按照文档完成打包配置,一行命令打包。
出于信息安全考虑本次并没有使用ide来完成整个Vibe Coding的过程。
最近在家里使用trae开发,感到build agent的功能还是非常不错的。给了本地执行cmd的权限后很多事可以通过自然语言来执行。这对于整个开发过程来说无疑更加节省时间和高效。不过当存在网络受限的问题时(如需要切换下载源)时,仍然需要手动排查。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。