我做出了软件工程最好的Skill

1. 我做出了软件工程最好的Skill

smyw 文章头图:左侧是「我做出了软件工程最好的 Skill」标题与「先把需求变成可交互原型,确认后再让 AI 写代码」副标题,右侧是一屏客服工作台原型预览和一条「这里,改成弹窗,对,就是这个意思」的反馈气泡,页脚印着 GitHub 仓库地址

[!abstract] 速览

  • 这个skill的目的,是在修改前,可视化的展示他想要修改的界面,逻辑和内容,并且提供给用户修改的窗口,你可以类似低代码的方式拖动界面,询问,注释,或者给他意见。
  • 在点开一个修改后,你可以看到这次修改的页面修改内容和逻辑修改内容,也可以看到具体的请求URL等,如果你对这个修改不满意,你可以直接点击删除,把这个修改删掉。
  • 同时,你也会注意到有一个「界面上定位的按钮」,他可以直接转跳到对应的界面上,你可以直接得知,这个修改的逻辑,和界面上的对应关系。
  • 此外,你还可以看到他新增了什么API,删除了什么API,如果他为了一个功能新增了数十个API,或者给了高权限API,你完全可以在这里就得知。
  • 最后,你可以复制所有的修改内容到你的Agent对话中,当然,如果不涉及界面修改,你完全不需要带Json这么大的内容,可以取消勾选,只提供修改意见。

你是否曾经有以下场景

[!danger] 典型翻车现场

User:帮我做一个功能,我需要xxxx,你可以使用xxx,xxx

AI:(一顿忙活),已做好,生成xxx测试

User:你这里怎么做的界面,用户怎么点击呢?你这个功能入口在哪?这个按钮位置不对啊,数据库怎么这样修改?为啥你加入了这些逻辑xxxxx

AI:(又是一顿忙活),已改好,请查收,(输出一大堆看不懂的话)

User:什么意思,说简单点,你这里不对啊,xxxx,(重复数次,崩溃

在过去,我经常使用各种软件工程的Skill,比如matt,pstack等,这些都是非常不错的Skill,对开发也有很大的帮助,但是,过于庞大的代码量修改,让我基本放弃了对AI的代码修改和审计。

这没问题,因为AI写的东西,AI能看懂就行了,问题在于,我很难理解他做了一堆修改会带来什么影响,什么结果。

[!warning] 许愿柳

AI写出的东西,往往像是一个许愿柳,条件越是简单的描述,会带来完全失控的结果,如果你向许愿柳许愿世界和平,他也许会摧毁所有生物来达到和平的条件。

当然,我做的这个Skill并不能解决世界和平,也无法解决许愿柳问题,唯一能做的,是能提前知道他会做什么来完成我的愿望,这有点像是杀戮尖塔的SL。

这个Skill是基于我开发中不断修改反馈而总结而成的,当然,我可以想象到也许早就有人做过部分功能类似的东西,毕竟软件工程也只是一套经验总结,不过我觉得,开源他并没有什么坏处。

这个Skill叫做:show me you want,简称 /smyw

https://github.com/nishuzumi/show-me-you-want-skill

这个skill的目的,是在修改前,可视化的展示他想要修改的界面,逻辑和内容,并且提供给用户修改的窗口,你可以类似低代码的方式拖动界面,询问,注释,或者给他意见。也可以在AI想要修改的任何逻辑上发出疑问并且给出修改界面。

下面会逐步展示这个Skill提供的能力

1.1. 1.整屏线框 + 编号改动

smyw 画布界面:左侧「本次改什么」面板列出 8 条界面改动,中间是客服工作台的整屏线框原型,改动处用绿、红、黄三色编号标签标出,并用连线连到右侧对应的改动说明卡片

在需求描述完后,改动的内容那个,会按照原型图的方式生成一个画布,并且通过编号标记每一处修改,如果是包含交互的内容,则会有连线将多个画板进行关联。

点开编号 5 的改动卡片:右侧抽屉显示表单「回复客户」(原「回复」)的改动前后对照,改动前有快捷回复和 POST /api/tickets/:id/replies,改动后增加了 AI 润色 openDrawer 与 PATCH /api/tickets/:id

在点开一个修改后,你可以看到这次修改的页面修改内容和逻辑修改内容,也可以看到具体的请求URL等,如果你对这个修改不满意,你可以直接点击删除,把这个修改删掉。

1.2. 2.批注和移动

编辑方案模式下查看按钮改动:编号 3「标记已解决」的卡片显示「移到了别处」,页面底部是选择位置/布局与建议类型、填写批注的输入框和「添加批注」按钮

当然,单纯的删除并没有什么意义,也许你希望这个逻辑应该是在另外一个板块里面的,你可以点击右上角编辑方案,并且使用拖动的方式,把对应模块移动到其他地方,你几乎可以移动到任何card下面,比如你觉得这个新增的模块应该是另外一个div的子模块或者二级菜单,你可以将它移动过去,或者画布之外,并且通过批注功能,告诉AI应该怎么做。

1.3. 3.更详细的内容

开启组件标注后的原型:每个区块都被框出组件名,如 TicketList、Thread、AI Suggestion、ReplyBox、SimilarTickets,并标出各自对应的请求与函数,如 GET /api/tickets/:id/ai-draft

右上角的组件按钮,允许展示所有组件的名称。同时,你也可以看到每一个按钮的详细请求逻辑,他到底调用了什么功能,是否需要用ws优化,这些你都可以详细的给他定义。

1.4. 4.逻辑可视化

流程变化视图:用户、前端、后端、数据库四条泳道并排对比改动前后,新增节点为绿色、删除节点为红色,每个节点都带「在界面上定位」入口

如果只是界面,这并不能作为一个好Skill,因此,他还附带了一个流程变化可视化的功能。你可以看到不同部分需要添加或者删除的逻辑。同样的,你也可以点击这些逻辑,给出你的建议,或者疑问。

同时,你也会注意到有一个「界面上定位的按钮」,他可以直接转跳到对应的界面上,你可以直接得知,这个修改的逻辑,和界面上的对应关系。

1.5. 5.后端可视化

后端变化视图:改动前后对照列出 TicketController 的接口、AIReplyService 新增的 draft 与 polish、Reply 模型新增的 aiDraftId 字段,删除的 QuickReplyService 以红框标出

此外,你还可以看到他新增了什么API,删除了什么API,如果他为了一个功能新增了数十个API,或者给了高权限API,你完全可以在这里就得知。

同样的,数据库修改也会展示出来。

1.6. 6.组件修改

组件属性面板:可修改组件类型(区块 section)、标题、补充说明、函数/行为占位、宽度和子元素排列,并提供转为弹窗、下拉菜单、抽屉、气泡等选项

还记得我一开始说你可以拖动组件的位置吗?不止如此,你还可以修改组件的类型,也许你觉得这个地方应该用多选框,用下拉组件等,你都可以点击修改。

你也可以点击一个修改的窗口,将它变成二级菜单,原来的位置会出现一个按钮,如果你觉得按钮形式不行,你也可以删除这个按钮,连接到其他的那你觉得对的交互处。

缩小到 53% 的无限画布:整屏线框与多张改动说明卡片靠连线关联,其中一张卡片用长连线指向画布右下角的另一张卡片

1.7. 7.整体修改意见

反馈 Tab:可点选「整体风格不符」「和现有页面不统一」「信息密度过高」等标签并填写总体意见,下方是「Agent 想请你确认」的两个选择题和已记录的 2 条批注

有时候,你可能有一些总观上的意见,比如信息密度太高,太复杂,等,你可以在最后的反馈Tab提出意见,并且回答AI给你说的一些问题。

把反馈交给 Agent 的区域:提供「复制反馈」「确认方案,可以开始做」「下载 .md」三个按钮,下方可勾选附带完整方案 JSON,并预览生成的 Markdown 反馈内容

[!tip] 只带修改意见即可

最后,你可以复制所有的修改内容到你的Agent对话中,当然,如果不涉及界面修改,你完全不需要带Json这么大的内容,可以取消勾选,只提供修改意见。

1.8. 8.多页面支持

第二个示例「任务管理:用标签替代分类」:31% 缩放的画布上并排摆放三块原型画板,左侧「界面改动(9)」按标签列表和标签管理分组罗列增删改项

有时候,一次修改也许并不单单是一个页面,他可能是涉及到多个页面的复杂功能逻辑,因此,这个Skill提供了一个无限画布,你可以在这个画布上看到所有的页面修改内容


这个Skill当然还并不非常完善,介绍的能力也只是冰山一角。不过对于我来说,他已经到了一种让我激动的地步,发出来这个东西,也主要是想看看,不同的开发者,是否还有不同的反馈和需求。

不过这是我目前来看,最能满足我所有需求的Skill了(单纯软件开发来说)

[!info] 预测未来

解决许愿柳难题是非常困难的,但是如果知道会发生什么,也算是一种预测未来了,在时间线还没有发生的时候,做一些改变,也许会比反复修改方便的更多。

其实,很多东西都可以使用大量的Plan,或者细致的提示词来修改,可惜我有一点点成人ADHD,再加上快节奏时代下,我无法细致的做到很多事情,与其跳出舒适区,还不如把舒适区变得更大,这就是这个Skill想要做到的东西