8. AI编写的SKILL,坑我一一试过,这次我自己改写:Beyond Compare逐行CodeReview:Trae写主体,WorkBuddy改bug

8. AI编写的SKILL,坑我一一试过,这次我自己改写:Beyond Compare逐行CodeReview:Trae写主体,WorkBuddy改bug

前面七篇,从四大准则重写、文档 SKILL、后端 SKILL 到前端 SKILL,两个 AI 工具轮番上阵------Trae 积分烧光,换 WorkBuddy 接着干。特别耗Token也是一个特别大的问题,还有就是老错误总是犯,不读取SKILL,直接开干,结果代码完成不对。这一篇,把 Trae 和 WorkBuddy 生成的前端代码放在一起,用 Beyond Compare 逐行对比,看看谁更接近我自己写的代码,又各自埋了什么雷。

一、后端代码对比

这时候就要使用前面讲解过的编程工具,Beyond Compare 了,如果不记得可以去查看一下。

像这种全新的代码,特别是后端,基本上是 Trae 编写的,WorkBuddy 只是修改了 bug。要比较还是要先从最核心的代码开始,比如 a->b->c,还有 b->c 这种推导,先从最后一个节点开始比较,这样才干扰比较少。你非要说我就从 a 开始不行吗?不吵,也是行的。

Core 中 BCrypt.java

也说做了注释说明了,以前版本只支持 2a,前面生成的密码是 2b,所以才有这样的修改。

这些差别是因为增加了很多没有完成代码,而 Trae 生成的代码没做到这一步就没有 token 或积分了。

这些就可以不用看,仔细看一下,每个具体的 Controller 链路。

由于工具不同创建的数字库的模拟数据也不一样,所以创建了两个不同的表。

二、特大问题,驼峰和下划线

菜单表

配置

你看只要是红的基本上是这个问题

现在好奇这个不报错。

这个问题,不知道为什么,我也没想过会要写进 SKILL 啊,也没想到Trae能犯这样的错误。就是驼峰的问题。

三、Controller 中编写业务

这个可以明确的说是我强制要加上去的,因为当时前面登录时没有日志,所以我强制加上的,结果将业务编写进了 Controller。这个要添加进 SKILL,并强制一下。

也顺手使用 WorkBuddy 改一下代码。

less 复制代码
查看了一下代码,发现登录日志编写进了controller,这是不对的,controller尽可能不要写业务,应该写在service中。
并修改一下SKILL,将这条要求编写进去。
还有前面说的驼峰问题,
 if (!StringUtils.isEmpty(form.getParentId())) {
            criteria.andEqualTo("parent_id", form.getParentId());
        }
       
        if (!StringUtils.isEmpty(form.getOrderNum())) {
            criteria.andEqualTo("order_num", form.getOrderNum());
        }
        
        正确的是
         if (!StringUtils.isEmpty(form.getParentId())) {
            criteria.andEqualTo("parentId", form.getParentId());
        }
       
        if (!StringUtils.isEmpty(form.getOrderNum())) {
            criteria.andEqualTo("orderNum", form.getOrderNum());
        }
        
        
       这个你改过了,我的要求是写进SKILL。
       先修改日志,然后将要修改的SKILL列出来我再确认。

对,这样修改才是正确的。

objectivec 复制代码
SKILL调试模式,
按你说的修改
修改完成后,关闭调试模式

顺便修改了一下 SKILL,前面我们就说过,生成代码,调试代码的所有目的都是为了 SKILL 的,为了可以使用 SKILL 生成其他代码。

less 复制代码
    @SaIgnore
    @Operation(summary = "用户登录(用户名 + RSA 密文密码 + 图形验证码)")
    @PostMapping(value = "/login")
    public R<String> login(@RequestBody LoginForm form, HttpServletRequest request) {
        String token;
        try {
            token = authService.login(form);
        } catch (Exception e) {
            // 登录失败落库(doc/03 §9:登录失败写 jet_login_log),不影响异常原样抛出
            loginLogService.recordLogin(form.getName(), "1", e.getMessage() == null ? "登录失败" : e.getMessage(), request);
            throw e;
        }
        loginLogService.recordLogin(form.getName(), "0", "登录成功", request);
        return R.success(token);
    }
这代码改的,毛病真的不是一般的差啊,说了写在Service中,难道不是写在AuthService中?
objectivec 复制代码
我上次写进去的"正确示例"是 AuthController.login() 只调用 loginLogService.recordLogin(...)------这恰恰是你要否定的写法。当前调试模式已关闭,我不能擅自动 SKILL,但这点必须先给你标出来(下面最后会专门说)。

我说过了,不要在controller中写业务,authservice.login代码不能判断不能添加登录日志吗?还要写在controller里


controller 不得直接调用其他 service 来编排副作用
这一条不是我叫添加上的,是前面改SKILL时,你的理解添加上的。不是说不可以调用其他service,我当时是一句话在一起的。
我说的是controller中的service,service除了icrudservice外不可以直接调用dao。结果添加上了上面这一条。
如果要改SKILL先给出再确认
objectivec 复制代码
SKILL调试模式,
按你说的修改
修改完成后,关闭调试模式
复制代码
想一想,我都禁止了其他的serivce不可以访问dao,那只能是调用icrudserivce了。肯定service可以调用service

其实 Trae 开始创建是对的,不过是因为没有添加日志,终于将代码搞过来了。

四、前端代码看一下

前端代码就不好使用 Beyond Compare 来对比,先尝试一下。

代码基本上是一样的,但是排版就太有问题了。

五、完全测试 WorkBuddy 的代码

5.1 运行后端

5.2 前端代码

5.3 测试了 bug

vbscript 复制代码
Required request body is missing: public vip.wayhua.jet.core.dto.R<java.util.List<Dto>> vip.wayhua.jet.core.controller.IdCrudController.list(Dto,java.lang.String)
    at service.interceptors.response.use.httpStatus (request.js:56:25)
    
   用户管理 报错
复制代码
修改一下菜单,
系统管理
日志管理 放在同一级

5.4 新增部门报错

这应该是通用错误,应该是将删除做成伪删除,要添加配置

shell 复制代码
这应该是通用错误,应该是将删除做成伪删除,要添加配置	
你还是要删除新增,删除,
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'del_flag' cannot be null
### The error may exist in vip/wayhua/jet/sys/dao/DeptMapper.java (best guess)
### The error involves vip.wayhua.jet.sys.dao.DeptMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO jet_dept  ( id,ancestors,created_by,created_time,del_flag,description,email,extro,leader,name,order_num,parent_id,phone,status,updated_by,updated_time ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'del_flag' cannot be null
; Column 'del_flag' cannot be null
    at service.interceptors.response.use.httpStatus (request.js:56:25)
    
   项目是:
jet-ai-api
jet-core-admin-v3 

使用 WorkBuddy 吧,不然没有免费积分了。

css 复制代码
你确保所有的delFlag都添加了吗?使用@LogicDelete,如果手写的去掉。
makefile 复制代码
java: 找不到符号
  符号:   类 LogicDelete
  位置: 类 vip.wayhua.jet.sys.pojo.Dept
  
  查一下还有没有类似的错误,难道你不测试吗
objectivec 复制代码
操,你不读取SKILL吗?里面不是配置了JDK之类的吗?

你看,其实无论怎么写 SKILL 都无法保证 AI 每次都读取 SKILL 的。你看下面的内容,我为了避免每次查询,所以写 SKILL 里面一些要查询的内容。结果还是查询

为什么让 AI 沙箱测试,就会要 maven,jdk,有点好奇沙箱不是建立在我的电脑里面?关键还是每次都要搞半天,这个可以小优化一下子的,不是说沙箱就完全是自己的。只要和我的数据隔离就好了,总觉得搞个沙箱,好像就是整一套完整的系统,类似虚拟机,并且每次都不一样。好浪费啊

objectivec 复制代码
操,是 jet-starter-sa-token 依赖下载超时 怎么要下载,不是源码里面有的吗?有没有脑子
这个错误前面就犯过太多次了,我还写进SKILL了。先install,不就有了?
为什么这么弱智?
复制代码
操*** ,skill肯定是放在.claude里面的。

你看,其实还是没有严格按四大铁律来执行,导致会一直查询 jdk 之类。

对 ai 是真的无语啊!无论你怎么操作,都是困难的。

objectivec 复制代码
其实这个不用删除啊,install就可以了,并且我有强制要求不可以删除其他目录的
算了吧,将就一下吧,为什么不严格按SKILL来呢?真的唉

现在基本功能是没问题的,下面我再逐一查看代码。

小结

回顾这一场 Trae vs WorkBuddy 的 CodeReview:

  1. 驼峰下划线是特大坑:一对比发现所有的serviceImpl都是问题,并且红的全是驼峰下划线写错。这个问题我都没想过要写进 SKILL,但它就是反复出现。没有想到trae会犯这样的错误,已修改SKILL。
  2. 登录日志写进 Controller 是错的:开始没有添加登录日志,我要求加的结果业务落到了 Controller。正确做法是下沉到 Service(AuthService.login 里判断并落库),并把它固化进 SKILL。期间还发现一条"controller 不得直接调用其他 service"是 AI 自己加的------我说的是非icrudservice 不能直接调用 dao,不是 service 不能调 service。
  3. 前端代码基本一致,排版太差:Beyond Compare 不好比前端,但肉眼看代码逻辑基本一致,排版问题明显。
  4. 完全测试又踩老雷:新增部门报 del_flag 不能为 null(伪删除没配)、@LogicDelete 找不到符号、沙箱测试还要现下 maven/jdk 依赖、jet-starter-sa-token 下载超时------这些前面都写进 SKILL 了,它还是不读、还是犯。
  5. 最气人的结论:无论怎么写 SKILL,都不能保证 AI 每次都读 SKILL。四大铁律的"常驻强制"机制,就是为了解决这个------但它还是查 jdk、还是不读。对 AI 是真的无语。

下一篇,把生成的所有代码做一次完整 CodeReview,逐行分析,看看跟我手写的有没有区别。

相关推荐
艾伦_耶格宇1 小时前
【AI】-7 从知识库到 AI Agent -进阶
人工智能·知识库·obsidian·opencode·ai运维
全栈弄潮儿1 小时前
用 AI 生成单元测试:从第一个测试用例开始
aigc·openai·ai编程
千里码aicood1 小时前
基于知识图谱的《平凡的世界》知识问答系统设计与实现
人工智能·知识图谱
tachibana21 小时前
把RAGAS跑起来
数据库·人工智能·ai·架构·大模型·llm·rag
北京晶数信息科技1 小时前
加油机数据采集设备原厂 · OEM 定制 · 五位一体数据采集 · 成品油交易即开票全方案(一)
大数据·人工智能·物联网
AI发掘1 小时前
手写稿被AI检测误标58%?三款AI降重工具实测:只改疑似段,不动原创内容
人工智能·aigc
滨哥GPT1 小时前
Codex修改环境变量后项目还是报错怎么办?.env、配置加载与运行环境排查
docker·ai编程·环境变量·开发环境·codex·env
程序员差不多先生1 小时前
OpenAI 把 Codex Harness 开源:AI Agent 的“操作系统“之争正式开打
人工智能·开源
开发者导航1 小时前
【有趣网站】免费优质资源与实用工具导航:开发者导航
人工智能·程序人生