链载Ai

标题: AICoding实践:从Prd到代码生成 [打印本页]

作者: 链载Ai    时间: 昨天 17:13
标题: AICoding实践:从Prd到代码生成

一、业务背景

在AI技术重构软件工程范式的新阶段,大模型技术正推动编程模式从"工具辅助型"向"需求驱动型"的历史性跨越。我们期待未来蚂蚁安全与智能实验室所有提交到代码库的代码中,大部分是由codefuse自动生成的, 这就对codefuse在原有代码补全以及AI partner能力的基础上,提出了更高的要求,希望把codefuse按“AI需求执行者”的目标构建,让AI直接理解自然语言需求,自主完成需求解析、任务拆解、跨仓库的文件搜索、代码生成、相应测试代码生成等全流程动作。

二、目标

1. 业务需求实现从需求到代码的端到端生成。
2. 大安全域提交到代码库的代码由AI生成的占比为60%。
3. 实现企业级代码规范和要求,实现风险左移:需求拆解时自动符合变更三板斧,符合适合大安全的设计要求(如发布功能必须有散列设计,查询必须有limit设计等)。

三、面临的主要挑战

a. 已有的复杂的代码资产

• 已有代码资产复杂性:已有的代码仓库都是规模达数十万行代码量级的,呈现典型"天书式"架构特征,包含大量废弃代码碎片、多版本逻辑共存的兼容方案及补丁式代码堆积,形成复杂的技术债网络。

• 智能解析瓶颈:目前的代码库,实证新入职开发人员在无资深导师指导下,难以独立读懂uctfront项目核心逻辑,而现有AI编程系统受限于代码表面特征统计,对跨文件依赖关系、隐式业务规则等深层逻辑的识别准确率不足。

b. 业务复杂,需求理解困难

安全业务背景知识庞杂,经历十几年的发展,很多业务规则散落,AI 只能基于现有代码统计规律,无法穿透代码表象理解业务语义,自动对齐真实业务语义,产品功能,这就导致AI在需求理解时,模型不理解涉及到的业务背景知识,经常出现不理解“已有仓库文件”,以及无法找到需要修改的“已有代码文档”。


四、建设方案

针对以上两个问题,经过不断探索与实践,最终从以下几个模块实现最终的AICoding能力:

1. 建设框架

2. 扩充业务知识,增强模型能力

a.业务知识体系化

面对庞杂的业务代码内容以及复杂的业务背景知识,需要从安全业务wiki、安全代码wiki、通识wiki、需求wiki多维度结构化补充背景知识,支撑跨仓库、跨业务链路、跨技术栈等复杂场景的生码能力。

b.上下文知识扩充,增强业务理解能力

ⅰ.RAG检索业务知识

对于大模型不理解特有业务场景的问题,使用业界通用方案,RAG在线检索相关的业务语义文档做代码生成的增强上下文。但是使用RAG知识库召回数据过程,会存在以下问题:

【召回准确率低】

当前RAG知识检索能力,普遍存在的召回率低问题,采用以下方式去优化:

【支持库存储&检索耗时成本高】

为了增强用户体验,同时考虑到大规模数据存储的成本,从以下几个角度进行多维优化:

ⅱ.知识图谱能力扩充

在实践过程中,发现现有知识库都是以markdown格式做初始召回文本,但这也会存在一个通用问题:在语义检索时只会命中md文档的某一个chunck块,导致召回结果完整性缺失。

针对此问题,使用知识图谱能力,基于“文件路径+仓库”节点索引标签,定向检索知识库召回文档,扩充wiki内容。

同时,考虑到知识图谱的存储召回耗时成本,简化图谱结构,仅保留必要的文档、仓库、bundle、需求、rpc、drm节点,剔除扩散比大的方法、属性等节点。最终在不降低语义质量前提下,将知识图谱规模从10亿+节点,简化到100万+节点。

c.模型能力强化

除了RAG+知识图谱方式扩充背景知识外,模型自身的需求拆解和业务理解能力也需要不断增强。

在当前的强化学习训练过程中,我们主要面临数据质量的挑战,并已制定相应的改进思路与落地计划。

【训练集数据质量】

3. 标准化workflow,端到端生码

3.1 自动生成系分

【问题】

【方案】

#各模块说明## 模块名## **业务实体**| 实体 | 属性及类型<br/>(默认varchar类型) | 索引键 | 字段值说明 || --- | --- | --- | --- |

### **领域功能**
| 领域 | 领域服务 | 领域功能 | 功能描述 | 规则约束 || --- | --- | --- | --- | --- |

### **应用服务**
| 服务域 | 服务接口 | 服务方法 | 方法流程描述 | 校验约束 || --- | --- | --- | --- | --- |

# 业务流程与状态机说明### 状态机说明#### 实体名| 实体 | 当前状态 | 事件/操作 | 下一状态 | 校验约束 || --- | --- | --- | --- | --- |

### 业务流程说明

# 与其他bundle或系统的交互
| 交互方 | 交互方式 | 触发时机 | 主要接口/消息 | pom信息 | 业务目的/说明 | 出入参说明 || --- | --- | --- | --- | --- | --- | --- |
# 高可用相关能力
| 能力 | 是否需要 | 待补充内容 || --- | --- | --- |

3.2 需求拆解子任务

【问题】

众所周知,上下文描述越清楚,AI生码越准确。因此,对于一个完整的模块功能,哪怕是管理时任务,也会有很很多业务细节需要实现。当把这些内容直接全部给大模型生码时,经常会出现超token,或者业务细节实现不符合预期的问题。

因此,提供供给模型生码的需求,内容越简单,功能越原子化越好。但是拆解后的子需求越简单,意味着子需求个数越多。在拆解时,需要合理定义需求的原子性和复杂度,最终需要在需求复杂度和个数之间找到平衡点,实现需求个数较少,生码质量又要相对较高。

【方案】

拆解后需求结构(e.g):

3.3 仓储生码规范生成

【问题】

【方案】

利用模型和codefuse具有的仓库索引能力,增加通用指令,以现有仓储具体场景为例,初始化生码规范(.project_rule),实现不同仓库的架构兼容规范。并在后续生码过程中将该规范内容作为生码上下文约束内容。例如以下是针对实际生产itask仓库自动生成的项目规范:

3.4 分层生码

Q:为什么不按照纵向分模块拆分生码,而是横向分层生码

A:

1. 在系分和需求拆解阶段,已经按照模块拆分,且根据模块间依赖问题,排序生码子任务。

2. 考虑到流程规范性,约束按照mvc分层生码,不仅能避免模块生码过程,模型偶尔丢失controller层代码问题,也能避免不同接口依赖同一个表或者接口、方法,导致merge冲突问题。

【问题】

【方案】

3.5 自动review需求效果

【问题】

以管理时ai生码为例,从prd生码,哪怕是单一需求模块,也需要同时覆盖crud多个能力,mvc多层代码,开发人员cr过程无法一行行check代码,直接采纳对模型信任度还不够,风险高。

【方案】

通过自定义prompt,固化需求实现效果总结指令,从变更代码结构、功能覆盖范围、稳定性需求、代码实现方案等多维度总结,降低cr难度。

4. 评测与数据更新,持续增强能力

a.动态更新知识库,确保数据准确性

b.能力评测

【评测重点】

五、建设进展

1. 通过AIcoding编码实际使用情况

CodeFuse 用户提交代码 AI 占比:43.25%

全部提交代码AI占比:36.01%

2. 生产实践效果

a.审理平台端到端生码

项目背景:通过需求单管理模块,管理业务方的审理需求,更好地串联生产用工流程

功能说明:需求单及版本的创建、编辑、审批、上线流程,支持草稿-审批-上线的状态流转,以及每月自动触发任务量级确认与通知。

AI生码效果:AI生码近20000行,按照仓库的数据访问规范dal/repository/service/controller,实现原始系分文档->标准化系分文档->任务拆解->codefuse生码的全过程

b.智能UI助手端到端生码

项目背景:探索大模型在质量域的提效方式之一,助力质量团队在UI自动化上达到快速编写和调试,自动保鲜提升稳定性等能力提升。为减少用户学习成本,且支持后续公开的快速扩展,采用智能体集成的方式建设智能UI助手。

功能说明:

1. 脚本管理模块基本能力:脚本创建、脚本展示、脚本刷新、脚本删除。
2. 集成antcode三方交互。
3. 非功能性需求:变更操作监控感知、异常处理等鲁棒性需求。

AI生码效果:AI生码3000+行,,代码采纳率70%+,按照仓库结构规范,实现由prd开始的端到端生码。

c.一键接入业务二方包

目标:针对相对固定的研发范式,从面向人的编码转换成面向智能体的编码,定制化指令,增强需求生码能力。实现熔断接入/压测接入/班车接入/流量接入 等场景的AICoding生码,一键接入二方包。用户只需编写剩余业务逻辑部分。

效果:已实现在风控系统中,自动接入熔断二方包。

六、下一步规划

1、目前面临的问题:

2、应对方案:

3、持续能力增强

3.1 、能力研发规划







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5