世界杯体育然后让 JoyCode 生成经过图-开yun云体育入口(官方)登录入口
环球好世界杯体育,我是刷 GitHub 停不下来的苍何。
刷了很久的 GitHub,发现个有道理的开源样式。

看了下,这是京东开源的 joycode-agent,目下在 SWE-Bench Verified 基准测试中凭借 74.6% 的高通过率位居榜单全球 Top3。

SWE-Bench Verified 是通过使用真实寰球开源样式中的 Bug 陈诉和 Issue 来测试 Agent 从通晓问题到自主生成、集成和考据诞生代码的无缺端到端智商,是 AI Coding 时代走向和居品落地的行业风向标之一。
从跑分和智商上来看,JoyCode 针对的应该是企业级研发场景。
我点进去他们官网,就可以班师下载 JoyCode 这款智能编码器用。

参预后,导入 vscode 成立,作念下疏忽诞生,然后用京东账号登录。

可以看到,JoyCode 内置了好多的资源和 MCP 器用。

也内置了好多主流的大模子,都可以班师使用,也可自界说添加模子,集成了 Git 作念代码的版块处理,自动生成 commit message 信息。
看了 JoyCode 诞生,可以开启代码评审,针对每次提交的代码,自动进行质料、安全、编码表率、逻辑子虚等多维度的扫描,并提供诞生提出。

稍许回来下它的中枢智商:
1、多智能体架构:可定制智能体,通过"先规划、后实行"的战术,以团队阿谀方式智能拆解复杂任务。
2、赞陈规约编程:基于需求、遐想、实施的三阶段责任经过,可完毕从需求到寄托的端到端笼罩。
3、CSR 险阻文引擎:通过对代码仓库的深度瓦解,全面通晓代码仓库险阻文等集成斥地环境信息。
4、可一键云表部署。
看了京东云官方公众号音信,说是 JoyCode 已干事京东上万名研发东谈主员,撑持数亿级用户居品研发,生成代码取舍率超 50%,斥地周期裁汰 40%。

于是乎,我又开动了一顿测试,来望望 JoyCode 本色智商如何。
既然主打的是企业级智能编码器用,那就来几个企业级斥地最为温雅的几大问题。

快速上手老样式
大部分时期,企业中并不老是在斥地新样式,而是在原有样式上作念些功能的迭代或者业务的更新。
尽头是关于新东谈主,新加入样式团队后,要快速掌持系数这个词样式,绝非一件容易的事,稍许表率点的团队会有估计文档,但好多团队样式,就果真唯唯一份代码。
最让东谈主糟糕的是,这份代码,连个细巧都莫得,业务逻辑和数据结构,要东谈主肉去通晓,消耗时期极其漫长,糟糕面具 +1。
我尝试用 JoyCode 来作念这方面的责任,就拿我的真实企业级开源样式 PmHub 来测试吧。
先让 JoyCode 基于样式源码帮我生成样式架构图。

可以看到 JoyCode 自动切换到架构图遐想模式,然后上来就先分析了样式中的 pom. xml 依赖文献及 Readme 文献,以及对系数这个词样式通晓就开动吭哧吭哧自动调用 draw. io 帮画样式架构图了。
这里我等了不少时期,半途致使有些念念烧毁,骂一句辣鸡,然后滚去寝息。但终末出来的终结,让东谈主很惊喜。

除了规复了系数这个词样式标时代架构,还把各个层的流转用流动箭头作念了艳丽。可以说,这是目下为止,我最闲适的一次架构图遐想践诺。
JoyCode 生成 . drawio 文献后,通过插件或者 draw.io 就能盛开了。
了解了系数这个词样式架构,还需要凭证数据结构来从数据层面了解业务。可以让它生成对应的 ER 图,来匡助了解。
prompt:基于该 sql 文献,生成实体 - 关联图,并按照业务域对数据库表进行分类
这里有个细节,由于 sql 文献很是大,在 Chat 界面可以看到,JoyCode 会对系数这个词险阻文进行合理压缩,然后制定该任务的 todolist,agent 会实行任务。

先看下稍许疏忽一些的任务,将表按照业务域作念分类,这个澈底没啥问题。

到了绘制这,由于表过多,我本就没缠绵它能一次成,在一番处理后,终于生成好了。

说真话,这和我理念念中的 ER 图有些距离,不外用来作念样式辅助通晓,若干有些用。
有了清楚的数据结构,关于有些复杂的业务逻辑,可以借助 AI 来进行代码条理稽查,可以通过经过图来辅助通晓。
比如 PmHub 样式中的这串代码:
/**
* 任务待落后提醒
*/
@Component
@Slf4j
publicclass TaskNotifyJob {
@Autowired
private ProjectTaskMapper projectTaskMapper;
@Autowired
private ProjectTaskNotifyMapper projectTaskNotifyMapper;
@Scheduled ( cron = "0 0 9 * * ?" )
@Transactional ( rollbackFor = Exception.class )
public void taskNotify ( ) {
List tasks = projectTaskMapper.queryTaskNotifyJob ( ) ;
// 现时时期
LocalDate localDate = LocalDate.now ( ) ;
tasks.stream ( ) .filter ( taskNotifyDTO -> StringUtils.isNotBlank ( taskNotifyDTO.getUserWxName ( ) ) && taskNotifyDTO.getCloseTime ( ) != null )
.forEach ( taskNotifyDTO -> {
if ( ProjectStatusEnum.PAUSE.getStatus ( ) .equals ( taskNotifyDTO.getStatus ( ) ) ) {
return;
}
LocalDate closeDate = taskNotifyDTO.getCloseTime ( ) .toInstant ( ) .atZone ( ZoneId.systemDefault ( ) ) .toLocalDate ( ) ;
if ( ChronoUnit.DAYS.between ( localDate, closeDate ) == taskNotifyDTO.getNotifyDay ( ) ) {
log.info ( " 待落后任务提醒开动 , 用户 id:{}, 企微 id:{}, 任务 id:{}", taskNotifyDTO.getUserId ( ) , taskNotifyDTO.getUserWxName ( ) , taskNotifyDTO.getTaskId ( ) ) ;
// 进行待落后音信提醒
TaskOverdueRemindDTO taskOverdueRemindDTO = new TaskOverdueRemindDTO ( ) ;
// 诞生任务称呼
taskOverdueRemindDTO.setTaskName ( taskNotifyDTO.getTaskName ( ) ) ;
// 诞生见知用户 id
taskOverdueRemindDTO.setUserIds ( Collections.singletonList ( taskNotifyDTO.getUserWxName ( ) ) ) ;
// 诞生天数
taskOverdueRemindDTO.setNum ( taskNotifyDTO.getNotifyDay ( ) ) ;
// 诞生任务确定地址
String url = SsoUrlUtils.ssoCreate ( appid, agentid, host + path + ssoPath + URLEncoder.encode ( host + "/pmhub-project/my-task/info?taskId=" + taskNotifyDTO.getTaskId ( ) ) ) ;
taskOverdueRemindDTO.setDetailUrl ( url ) ;
taskOverdueRemindDTO.setOaTitle ( " 任务行将落后提醒 " ) ;
taskOverdueRemindDTO.setOaContext ( " 您的任务【" + taskNotifyDTO.getTaskName ( ) + "】还有【" + taskNotifyDTO.getNotifyDay ( ) + "】天到期,请实时处理!" ) ;
taskOverdueRemindDTO.setUserName ( taskNotifyDTO.getUserName ( ) ) ;
taskOverdueRemindDTO.setLinkUrl ( OAUtils.ssoCreate ( host + "/pmhub-project/my-task/info?taskId=" + taskNotifyDTO.getTaskId ( ) ) ) ;
RocketMqUtils.push2Wx ( taskOverdueRemindDTO ) ;
// 进行查询 若是数据库不存在纪录 则就插入纪录
LambdaQueryWrapper
if ( projectTaskNotifyMapper.selectOne ( qw ) == null ) {
// 插入纪录
ProjectTaskNotify projectTaskNotify = new ProjectTaskNotify ( ) ;
projectTaskNotify.setProjectId ( taskNotifyDTO.getProjectId ( ) ) ;
projectTaskNotify.setTaskId ( taskNotifyDTO.getTaskId ( ) ) ;
projectTaskNotify.setOverdue ( 0 ) ;
projectTaskNotify.setUserId ( taskNotifyDTO.getUserId ( ) ) ;
projectTaskNotify.setUserWxName ( taskNotifyDTO.getUserWxName ( ) ) ;
projectTaskNotify.setCloseTime ( taskNotifyDTO.getCloseTime ( ) ) ;
projectTaskNotify.setTaskName ( taskNotifyDTO.getTaskName ( ) ) ;
projectTaskNotifyMapper.insert ( projectTaskNotify ) ;
}
log.info ( " 待落后任务提醒收尾 " ) ;
}
} ) ;
}
}
可以选中这段代码后,讲明该代码。

然后让 JoyCode 生成经过图。

代码评审
在团队斥地中,斥地完代码时常需要进行代码评审,也简称为 CR,这个责任时常会团队内交叉进行,最终上线需要时代 leader 进行最终 CR。
当今就可以把这个责任先交给 AI 来作念一轮前置评审,识别出估计风险,保证代码质料。

JoyCode 会给出一份评审陈诉,比肩出编削提出和优先级排序。

在完成斥地后,作念代码提交,JoyCode 大约自动添加 git commit 信息。

接口变坐褥代码
在本色企业级斥地中,前后端会同步斥地,通常是先界说好接口,然后前后端都基于该接口进行斥地。
是以如何将界说好的接口(API 文档)漂流为坐褥级代码,就显得很费事。
我尝试在 JoyCode 中测试该功能,比如照着咱们开源的 PmHub 样式标接口文档,咱们尝试作念点有道理的事情。
PmHub 接口文档地址:https://laigeoffer-pmhub.apifox.cn
给到如下教唆词:
基于该 API 文档:https://laigeoffer-pmhub.apifox.cn 中的 " 我的样式 " 模块进行斥地,请严格除名斥地表率和接口界说,前后端分离,保证样式可运行。
他会先凭证 API 文档创建需求文档、遐想文档和任务文档。

然后就开动吭哧吭哧的由前端到后端的斥地。我这里选的是 JoyCode 的规约编程模式。
一句话讲明规约编程:你无须手把手教 AI 怎样作念,你只管用轨则(规约)把"要什么"和"尺度是什么"界说明晰,AI 就能我方写出 100% 得志你条件的代码。
在职务列表中可以分解了 22 个任务,恭候实行,咱们点击阐述一都实行。

在职务队伍中就可看到系数任务,JoyCode 会按照任务规定循序实行。

这里我发现了一处小细节,在 JoyCode 中多个任务是可以并行的,比如这个号召:
cd pmhub-ui && npm install
它就能在终局我方并行实行,在 Chat 中的代码任务也在同步实行。
在生成前端代码这个任务中,可以看到不管是使用的框架照旧文献类定名的立场都特别的和表率保持一致,致使还学习了定名立场,环境成立。
我列了一张对比图:

特别的相似。前端页面也澈底可用。

登录进来后就可以看到样式处理功能模块了。

这是一个基于 API 文档诳骗 JoyCode 生成的样式处理系统,全程我唯一要作念的是把 API 丢给 JoyCode,然后让他规划任务,按照指定的规约进行编程。
JoyCode 的发达还可以� �,在严肃的企业级场景中,不会瞎搞,像是个憨实的法度员。
一句话需求到 PRD
我从 GitHub 了解到,JoyCode 内置了一些器用,能将一句话需求快速周折为专科产研翻译,生成 PRD 文档。
来测试下成果。
教唆词:帮我生成专科的 PRD 文档,我需要斥地一个样式处理系统,赞助新建样式、样式中新建任务。

可以看到将白话的一句话需求漂流为了专科的业务谈话。
全栈斥地
我也蛮念念试试在 JoyCode 中进行全栈斥地,
这里我班师诳骗原先 PmHub 的 PRD 文档和遐想原型文档,进行全栈斥地。
ps:这亦然规约编程的实行尺度,不提出班师上手斥地,在斥地前界说好相应需乞降遐想,材干让 AI 更好的完成任务。
我的方向很疏忽,帮我一比一复刻一个 PmHub 出来。
但由于 PmHub 功能好多,澈底复刻需要时期,这里我就以基础的智商来作念了复刻。底下是我全体的完毕经过。

第一步,PRD 分析。
PmHub 的需求分析长这么:

教唆词:你是又名全栈架构师,以上是样式处理系统的 prd,帮我凭证这个 prd,
生成一个要津遐想说明。并生成系统全体交互经过 UML 时序图

生成的时序图,经过解救和格式疏忽优化取得如下:

这里的 UML 逻辑需要屡次查对,Chat 修改,最终能取得相宜的成果,稍许有些花时期。
第二步,遐想原型文档分析。
这是 PmHub 的原型遐想图,班师将它丢给 JoyCode。

以上是样式处理系统的原型遐想文档「URL 相接」,请基于此进行时代有探讨遐想。
可以看到终结会更偏向遐想需求:

第三步、生成 API 接口文档
接口先行,并行斥地,是敏捷斥地的必重点,这里我改进性的让 JoyCode 先凭证以上信息生成 API 接口文档,然后凭证上头的措施再循序生成前后端代码及数据库代码。
由于模块好多,提出区别单个模块生成。
基于以上信息及文档,帮我生成样式处理模块中的样式列表和添加样式标 api 接口文档,我要能班师导入到 apifox 中。

然后还生成了 api 文档说明。

这里需要导入到 Apifox 中进行 check,确保相宜后不绝接下来的操作。
第四步,生成代码。
这里我的教悔是凭证 api 文档以及原型遐想稿会有很好的成果,AI 不会瞎搞,格式和接口都是按照预定的来。
包括时代遐想、架构遐想,这些在规约中仍是指定,这等于规约编程的魔力吧。
和之前相同,JoyCode 会凭证条件,老真古道写代码。
由于时期关联,我就只闪斥地了登录页面、样式列表页和新建样式,包括系数这个词框架此次我也让生成好了,这么下次单模块斥地就能班师使用。
登录页:

这是样式列表页:

这是添加样式页面:

可以说,98% 以上规复了我 PmHub,包括页面组件格式和功能。
固然,过程中会有一些问题需要解救,但在 JoyCode 中也能浅显的处理。
我体验下来,JoyCode 关于复杂任务的通晓和处理成果是很好的,若是给的富饶详备,比如原型遐想,基于 API 接口斥地等。
更能线路出好的成果。
还可以在 JoyCode 中一键部署,不外我的功能还没斥地澈底,就先不部署了,到时再多调调,看下能否澈底复刻出一个 PmHub 出来。
呼,当今真浅显了。有了 AI 规约编程,你无须手把手教 AI 怎样作念,你只管用轨则(规约)把"要什么"和"尺度是什么"界说明晰,AI 就能我方写出得志你条件的代码。
以后接办莫得细巧和文档的屎山样式时世界杯体育,也许咱们终于无须再戴上糟糕面具了。

