1. 教 AI 上班:带出我的数字同事 —— 把开发习惯交给 Qoder,从零搭脚手架

1. 教 AI 上班:带出我的数字同事 ------ 把开发习惯交给 Qoder,从零搭脚手架

「教 AI 上班」系列 · 第 1 篇:先说清我要什么,再让它教我怎么提问、照我的风格把架子搭起来。

前言

我想要的数字同事很简单:按我定好的技术选型,老实把具体业务代码写完、把 bug 改掉,别自己换架构。它只管代码生成器之外那部分,外围的 harness、openspec、superpowers 还是得靠 AI 来规范。

一开始我也说不清要做成啥样,就把需求一句一句交给 Qoder:先让它给思路、把范围收到后端,再照 ivy-simple-api 的风格从零搭起一套架子。它漏了就补、跑偏了就逼它改,改对了再把踩的坑记回 spec,反复几轮,直到它能脱离参考源码自己生成。

先交个底:这是一套完整的项目,不是搭个空架子就收------从按我的开发方式把业务代码写出来、改 bug,到测试,再到本地部署,这一路我都会讲到。

一、终极要求

1.1 数字同事负责哪一段活

我想做一个简单的数字同事,他能按照我的开发方式进行开发。

他主要任务是,正常的业务开发和修改bug,按开发文档进行开发。简单说就是按我选定好的技术选型,认真的完成具体的开发任务。

1.2 从数据库设计到代码生成器

我开发的习惯是,先讲简单的CRUD这种。

先用Pdman进行数据库设计,我也将ivy-simple.pdman.json放在services里面,要迁移或修改,你看着办。

然后手动创建数据库,结合代码生成器生成controller,service,dao,entity等代码,详见ivy-simple-api。

代码生成器这一块就按SKILL直接生成,数字同事的工作是生成的代码之外的,按我的开发方式编写具体业务代码。

我做了很多封装,所以生成的代码相当简单,我想的是不同的公司或项目,要先能创建所有的源码,只有微服务才会通过oss,maven来引用cores,这时才需要oss。

大部分技术选型都按ivy-simple-api来,未完成的,可以按同样风格补充。

这是我的总体需求。最终结果是能按SKILL生成可执行代码。结合 harness,openspec,请指导我一步一步完成所有操作。

而开发的外围 harness,openspec,superpowers这些还是要的,这个数字同事,只是负责具体代码开发,其他的还是要AI来规范,如果后期我修改了具体的技术实现方案,也可以同时升级数字同事。

是以skill方式还是其他方式,也可以讨论一下。

二、怎么和Qoder提问

2.1 从模糊需求收到后端起步

2.1.1 先甩模糊需求要思路

一开始我也不知道要做成啥样,就把这堆模糊需求直接甩给它,让它结合 harness、openspec、superpowers 先给思路:

复制代码
我想编写一个数字同事项目,我也不知道是编写成什么样的。
我的要求是
他能按照我的开发方式进行开发。
他主要任务是,正常的业务开发和修改bug,按开发文档进行开发。
简单说就是按我选定好的技术选型,认真的完成具体的开发任务。
我的编写方式我会结出源码。
结合harness openspec superpowers ,请先指导我该怎么做。
2.1.2 把范围收到后端起步

聊了几轮,我把范围收到后端,让它先按我的习惯从数据库设计和代码生成器起步:

arduino 复制代码
这个同事先做后端部分,结合业务开发文档,先用Pdman进行数据库设计
我也将ivy-simple.pdman.json放在当前目录下\里,有默认带过来的字段,以及字段类型,所有id都是String类型。
然后手动创建数据库,结合代码生成器生成controller,service,dao,entity等代码,详见ivy-simple-api。
先通过RepoWiki分析和学习我的ivy-simple-api。
代码生成器是以前我写的,现在就不需要了,你也要将这些按需求生成,是生成SKILL还是其他方式,结合Qoder来定。
数字同事的工作是生成的代码之外的,按我的开发方式编写具体业务代码。
我做了很多封装,所以生成的代码相当简单,我想的是不同的公司或项目,
要先能创建所有的源码,只有微服务才会通过oss,maven来引用cores,这时才需要oss。
大部分技术选型都按ivy-simple-api来,未完成的,可以按同样风格补充。
这个数字同事才是我的最终需要的结果。要结合harness,openspec等不断验证,测试,最终保证数字同事这个出品的质量。

2.2 让它搭出来、提交、再自测

2.2.1 反问是否完事了、要求提交

它给了一版,我反问是不是完事了、还要不要我动手,顺带要求提交:

perl 复制代码
现在就好了?还有没有要我做的,
如果都完成,就提交git,commit push
2.2.2 追问项目放哪、要不要自测

提交完我不放心,追问以后项目放哪、也不测一下能不能跑:

复制代码
以后我要做项目,是放在哪里?
不要顺便测试一下有没有成功吗?
2.2.3 列六条要验的点逐条核对

我干脆列了六条要验的点,让它对着一条条核:

检查功能

1、我要的是能生成完成的代码

2、sa-token等

3、doc.httml

4、带网关的

5、代码生成器也是要做的,这个可能是Qoder做的是吧。

6、数字同事也是可以按我的这些要求来开发项目的。

复制代码
检查功能

1、我要的是能生成完成的代码
2、sa-token等
3、doc.html
4、带网关的
5、代码生成器也是要做的,这个可能是Qoder做的是吧。
6、数字同事也是可以按我的这些要求来开发项目的。

2.3 补漏:cores、application 和改名

2.3.1 补齐 cores 与 application

核下来发现 cores 和 application 都没生成,我让它补齐,还要求把 springutils 的 banner 加进 application:

复制代码
现在还有点问题,cores代码也是要生成的。
docsolo你也没有生成application啊
其他微服务才不用,使用oss拉取
要能生成完整的项目。
补充一下,application里面要加上springutils的那个banner
2.3.2 sql 与开发文档反哺回 spec

又发现 doc 里的 sql 和开发文档没反哺回 spec,我叫它把这些问题改回文档:

sql 复制代码
在项目中doc,里面有sql,存放真实的sql和pdman的文档。开发文档也是放在doc中的
你要将这些问题,反哺回去,修改spec和相关的文档
2.3.3 starter 改名 docsolo

既然整套叫 docsolo,starter 就不该还挂着 ivy 的名,我让它改名:

复制代码
既然叫 docsolo 那么就不要叫 ivy-starter,而是改为docsolo-starter-*
2.3.4 包名自己定、每改必 push

包名我想自己定,顺便立了条规矩------每改一次都要 push:

perl 复制代码
包名,最好是指定的,
可以提问,说创建项目,有哪些必须填的,都弹出来填好后就可以了。
还有每次修改后,要提交git,我指一定要push。

2.4 连上库,逐个接口跑测试

2.4.1 连 130 初始化、逐个接口测

我这边 130 有现成的 redis、mysql,把账号丢给它,让它初始化库后拿 doc.html 逐个接口测,并强调要回归到数字同事:

我开启130里面有redis,mysql

redis 密码 wayhua

mysql root/Ivy@2024

css 复制代码
我开启130里面有redis,mysql
redis 密码 wayhua
mysql  root/Ivy@2024

你初始化数据库等,然后逐个接口通过doc.html进行测试,并验证。同时要回归到数字同事,从而保证以后可以直接使用。
2.4.2 maven 用 IDE 自带的

构建我要求用 IDE 自带的 maven 和指定 JDK,别自己乱找:

markdown 复制代码
等等,maven最好使用ide中的。
- **JDK**:`D:/Program Files/Java/jdk-17.0.5`(JAVA_HOME 同路径)
- **Maven**:`D:/Program Files/JetBrains/IntelliJ IDEA 2025.1/plugins/maven-plugin/lib/maven3/bin/mvn.cmd`(必须 mvn.cmd,构建一律 `mvn -o` 离线)
- **本地仓库**:`F:\maven/repository`

这个最好是本机是这个其他机器,可以按ide搜索一下。

三、结构跑偏,逼它反思反哺

3.1 命名与结构跑偏

3.1.1 模块命名搞错、强调反哺

模块命名它搞错了,bootstrap/model 该是父 pom、该用单数,我借这处又强调一次反哺:

css 复制代码
docsolo-bootstrap
docsolo-model
这两个是不对的,应该是父pom和复数去掉,变为单数。bootstrap一定要有service。
这种修改一定反哺数字同事

其实应该是 vip.wayhua.jet.core
          vip.wayhua.jet.docsolo
          这样的才是最好的,不过前面改成docsolo了也就先这样。
          以后的微服务 vip.wayhua.jet.sys
                      vip.wayhua.jet.docsolo
                      
要将这个反哺数字同事。 前面ivy是i版本,修改后就变成了j版本,叫jet。
3.1.2 按 jet 整体重构、规划 sys 验证

错的地方攒多了,我让它按 jet 这套整体重构,先测通再反哺,并规划后面用 sys 来验证:

复制代码
这样,按前面的jet来将整个代码重构。jet-starter-cores
然后做 jet-service-docsolo
先测试通过,反哺数字同事。
后面我会添加sys,jet-service-sys,来验证此数字同事。
这是当前任务,严格按harness和openSpec来分步执行

项目改名: jet-simple-wrapper

3.2 目录跑偏与连名字都照抄

3.2.1 目录结构全错、质问反思

结果目录结构整个跑偏,我质问它为什么犯这种错,要它反思反哺:

复制代码
怎么回事,目录结构全错了。

jet-service-bootstraps
  |-jet-service-docsolo-bootstrap
jet-service-models
  |-jet-service-docsolo-model
jet-starter-cores
哪能像你这样。为什么会犯这样的错误,要反思,反哺数字同事。
3.2.2 反向对比、去掉 -parent

我让它拿 ivy-simple-api 反向对比生成的架子,查有没有违规,还让去掉多余的 -parent:

xml 复制代码
反过来对比一下ivy-simple-api
与生成的jet-simple-wrapper对比,有没有违规的。
反哺数字同事。
另外:
    <artifactId>jet-simple-wrapper-parent</artifactId>
    去掉-parent
 
3.2.3 连名字都照抄、纠正

对比完它连名字都照抄了,我纠正它:要的是框架和结构,不是一模一样的名字:

复制代码
你这是不对的。没叫你连名字也一样,主要是框架,结构。
现在的名字不是
jet-simple-wrapper,我都指定了名字,肯定不能一模一样。不然怎么叫数字同事,不叫数字**
网关名字可加可不加

反哺数字同事。

四、分页接口来回拉扯

4.1 先按 spec 出计划再改

接口有硬伤,分页查询用了 GET、还塞了两个 @RequestBody,我让它按 spec 先出计划再改:

less 复制代码
IdCrudControllerController中
    @GetMapping("/list")
    public R<List<Dto>> list(@Valid @RequestBody Dto query, @Valid @RequestBody SortForm sortQuery) {
     @Operation(summary = "分页查询列表", description = "分页查询列表")
    @GetMapping
    public R<Paged<Dto>> page(@Valid @RequestBody  Dto query, @Valid @RequestBody  PageForm pageQuery) {
 
 这几个访求 是错的,要修改成post,但要SortForm和doto,有两个@RequestBody是有问题的。要修改,这个做为spec来修改一下。先做计划
vbnet 复制代码
怎么没反应了,按 采用A的D query; Integer page; Integer size; String[] sort; 这种方式内容由 AI 生成方式修改。

4.2 改反了,直接给定方法签名

4.2.1 入参改反了,重说一遍

它把入参改反了,我把真正要的形式重说一遍,还质问它到底测没测:

你是不是改反了,我要的是 D query; Integer page; Integer size; String\[\] sort;

这种方式,现在怎么改反了。就是不要SortForm

还有,就是你没测试吗?@Schema(description = "分页查询统一入参") public class PageQuery { 不要这个

kotlin 复制代码
你是不是改反了,我要的是 D query; Integer page; Integer size; String[] sort;

这种方式,现在怎么改反了。就是不要SortForm

还有,就是你没测试吗?@Schema(description = "分页查询统一入参")
public class PageQuery<D> { 不要这个
4.2.2 直接给定方法签名

越说越急,我直接给出我要的方法签名,让它照这个改、另一个同理:

怎么突然这么蠢了,我要的是

public R<Paged> page(@Valid @RequestBody Dto req,Integer page; Integer size; String\[\] sort){

less 复制代码
怎么突然这么蠢了,我要的是

 public R<Paged<Dto>> page(@Valid @RequestBody  Dto  req,Integer page; Integer size; String[] sort){
另外一个也类似
要反哺数字同事

五、彻底脱离参考源码,收到文档规范

5.1 追到连 wrapper 也脱离、代码进 skill

5.1.1 补 sort、要能脱离 example

改得差不多了,我提后续要求:补 sort 排序、controller 封装可逐步优化但不许脱离我的风格、最终要能彻底脱离参考源码:

bash 复制代码
这个代码可能还有不太完善的地方
我主要是增加了 sort的排序
重点是controller的这些封装,可以逐步优化一下,但不能脱离我的这个风格。
还有,就是最终是不要example的代码,也能生成。也就是这个数字同事,可以脱离ivy-simple-api的代码。
5.1.2 连 wrapper 也脱离、代码进 skill

我进一步要求连 ivy-simple-wrapper 也脱离、必需代码放进 skill 目录,还点它好像根本没真用 harness 和 openspec:

复制代码
还要说明,也脱离 ivy-simple-wrapper能自动生成哦,不要又改成依赖这个项目。
可以将一些必需的代码放在skill中某个目录。
我要的是完全脱离以前源码,能生成,且不能有错。
好像没有使用harness和openspec啊

5.2 开发文档必须严格照 SKILL 样式

5.2.1 问能否用 SKILL 出开发文档

代码稳住后我转到文档,问它开发文档按不规范生成、能不能用 software-engineering-document SKILL:

javascript 复制代码
现在代码没什么问题吧。
文档生成时有没有规范,开发文档。
software-engineering-document SKILL 有开发文档的格式
Qoder能不能用吗?
5.2.2 严格照 SKILL 样式、只替换

文档格式我卡得很死,必须严格照 SKILL 里的样式,只能替换不能自己造:

javascript 复制代码
software-engineering-document SKILL 中的文档格式是非常重要的,严格按这个文档生成
有目录,有样式,只能在此基础上替换,不能自己制作 ,如果自己制作样式会不对。skill中是什么样式就什么样式。

六、小结

到这儿,脚手架算是立起来了,从一句模糊需求到能跑起来的一整套 jet 架子,来回逼了好几轮,几条先记下:

  1. 怎么提问和问什么一样重要:一句话要把边界说死,别让它顺带牵出没要求的改动。

  2. 技术选型是我定的,它只管照 ivy-simple-api 的风格写生成器之外的业务代码,不许自作主张换架构、改包名。

  3. 代码生成器那套不用它碰,它补的是生成出来的代码之外的具体业务;一旦越界把 docsolo 的东西做成 ivy 同名,当场就得拽回来。

  4. 每改一次都要 push。目录结构跑偏、分页接口改反了这种事,光返工还不够,要它说清为什么犯、下次怎么避免。

  5. 反哺是刚需:doc 里的 sql、开发文档、踩过的坑,改完必须回填进 spec 和 SKILL,不然下一轮照样再犯一遍。

  6. 最终目标是彻底脱离参考源码也能生成------连 ivy-simple-wrapper 都不依赖,必需代码收进 skill 的目录里。

下一篇拿 rbac 多租户来验货,看它到底靠不靠谱。

相关推荐
用户55635255605639 分钟前
[避坑] AI工具雷达避坑 | frontend-design的真实问题
ai编程
架构师那点事儿40 分钟前
将 HuggingFace 自己的英译中模型迁移到 ONNX
人工智能·python·深度学习
智感子40 分钟前
一维时域信号里,AI 和传统方法谁更靠谱
人工智能
xianghongtao011643 分钟前
麦肯锡2026技术趋势01_智能体式软件开发_研究解读
人工智能
用户117910488331 小时前
别让AI随便启动你的LSP:hmharness给语言服务器加SHA256门禁 GitHub:swsgbl/hmharness
ai编程·harmonyos
章鱼哥19711 小时前
我给 DeepSeek 的编程智能体写了三个插件:余额胶囊、任务面板、番茄钟
ai编程·deepseek
青柠之夏cc1 小时前
智慧政务的 “最后一公里”:AI 客服与区块链如何让办事像网购一样简单?
人工智能
johnsmithCA1 小时前
给搜索的法规条文做了个「版本核验」流程:怎么确认手上的条文还是现行有效版
人工智能·自动化运维
付威20231 小时前
我用 Rust 重写了 Pi,启动快了 10 倍
人工智能