AI编程:[实践]AI编程工程化实践
摘要: AI开发需要结合规范与确定性工具,确保代码质量与效率。规范驱动开发分为需求、设计、任务三阶段,通过结构化流程将模糊需求转化为可执行任务。实践包括简单功能的“Vibe模式”(伪代码引导)和复杂功能的“Spec模式”(分步文档生成)。AI编程降低试错成本,但也可能加剧技术债务,需严格检查生成代码。核心挑战包括判断代码质量、避免过度设计,以及跨越AI编程疲惫期。最终目标是实现稳定、高效、可维护的
·
为什么要推规范开发?
AI 本身并不可靠,它需要明确的结构化引导,并与确定性的工具和原则相结合。
将确定性工具与 AI 工具结合,它们可以互相补充信息,并弥补差距。
一、前言
- 目标:通过现代软件工程的最佳实践,保障效率和质量。
- 说明:优秀的软件工程方法,具有跨平台的普适性。
- 方向:规范驱动开发,确保开发过程的系统性、可控性和质量。
- 策略:解决一个复杂问题的唯一方法,就是不断地尝试。一个问题有无数种糟糕的解法,和大概一万种不错的解法。我们的任务是在那一万种里找到最优解。
二、工程化实践
第一步:基于脚手架新建项目
- 后端工程:【通过 lf-infra-code-generator 创建初始工程】
- 前端工程:【通过 lf-cli 命令 创建初始工程】
第二步:基于模板生成代码
- 后端代码:【基于表结构,通过 lf-infra-code-generator 生成 业务代码】
- 前端代码:【基于表结构,通过 lf-infra-code-generator 生成 业务代码】
第三步:基于规范驱动AI开发
1、规范
- AI编程的升级:从"能用"到"好用",再到"专业"的升级
核心 | 具体内容 | 说明 |
---|---|---|
• 编程工具 | • Kiro • Qoder • Trae • Cursor • Augment • Claude Code • Gemini • … … |
• Kiro:已工程化实施步骤:需求、设计、任务。 • Qoder:已工程化实施步骤:设计、任务。 • Trae:可创建多个角色的Agent,模拟一个团队开展工作。 |
• 实施步骤 | • 需求设计阶段:做什么(requirements.md) • 方案设计阶段:如何做(design.md) • 任务规划阶段:如何一步步实现(tasks.md) |
• 将一个复杂问题,分解为三个独立,但又环环相扣的阶段,确保每一步都足够专注和深入。 • 通过这三个阶段的结构化流程,将一个模糊的功能想法,转变为一份清晰、详尽、且可被直接执行的编码任务清单 • 说明:每个阶段都是一次PDTAC循环 |
• 技术知识库 | • 技术方案模板.md • 技术架构规范.md |
• 如何在团队中共享? ○ 通过自定义MCP Server 来共享 ○ 搭建RAG向量数据库来增强Trae或Cursor的能力 |
2、实践
- 一个目标 : AI编程方法,具有跨平台的普适性
2.1、小功能(简单需求)
- 【Vibe模式】将某个功能的核心逻辑,按照伪代码的形式给到AI,AI可以较好且高质量的生成代码
- 分工
- 人:思考规划(指挥者)
- AI:任务执行(执行者)
- 注意
- 告别无脑使用,对稳定性和代码质量有高要求
- 大模型的特性,如果你让它一步到位,它就容易答错;如果让它一步步来,它反而更准。
步骤 | 说明 |
---|---|
• 第一步:详细描述核心逻辑 | • 输入 ○ 体现功能核心逻辑的伪代码 • 输出 ○ 代码 • 说明 ○ 让 AI 充分理解当前项目,学习当前项目的规范,阅读当前项目的现有功能,再生成代码 ○ 人作为大脑,写伪代码,AI作为执行者,生成实际代码 ○ 写伪代码,对AI生成的代码的掌控是最强的 ○ 思路不清晰时,可将关键信息写下来,给到AI,让AI来优化你的逻辑 |
• 第二步:没有第二步,仅第一步即可 |
• … … |
2.2、大功能(复杂需求)
- 【Spec模式】通过需求文档、设计文档、任务文档三个步骤,可以较好且高质量的生成代码
- 分工
- 人:需求提出者
- AI:需求规划者 + 方案设计者 + 任务执行者
步骤 | 说明 |
---|---|
• 第一步:先设计表结构(人+AI) 确定性步骤 |
• 专业能力:AI辅助表结构设计 |
• 第二步:基于表结构生成代码 确定性步骤 |
• 基建能力:生成基础的增删改查代码,在此基础上,让AI叠加业务功能 |
• 第三步:设计需求文档(人+AI) | • 输入: ○ 业务需求 ○ 技术知识库 ○ 现有代码仓库 • 输出: ○ AI需求文档(requirements.md) |
• 第四步:设计技术方案(人+AI) | • 输入: ○ AI需求文档(requirements.md) ○ 技术知识库 ○ 现有代码仓库 • 输出: ○ AI技术方案(design.md) |
• 第五步:设计任务计划(人+AI) | • 输入: ○ AI技术方案(design.md) • 输出: ○ AI任务计划(tasks.md) |
• 第六步:生成代码(人+AI) | • 输入: ○ AI任务计划(tasks.md) • 输出: ○ 代码 |
• 第七步:测试代码(人+AI) | • 最佳实践,研究中 • 验证代码的可用性 |
• 第八步:检查代码(人+AI) | • 最佳实践,研究中 • 保障每行代码都是熟悉的,避免后续迭代,难以改动 • 保障每行代码都是有用的,删除无用代码,避免技术债务累积 |
三、经验总结
- AI编程让技术债务加剧
- 在规划需求文档阶段,里面的内容,一定要仔细check每一项功能,否则最终AI生成时,会多生成一些功能的代码。
- 多的这些代码,需要清理掉,若被遗留下来后,就变为了历史债务。
- AI编程让试错成本降低
- 让推翻现有功能,快速重新开发,变得更具可能性(底层表结构设计要良好)
- AI是资深程序员的放大器
- 放大你的能力,简化你的工作
- 降低写优雅代码成本(你负责框定范围,甚至是一个模糊的方案,让AI来放大完善你的方案)
- AI让你更容易写出好代码
- 看代码
- 改代码
- 选代码(低级程序员)
- 删代码(高级程序员)
四、个人实践体感
- 实践过程中的一个错觉
- 你是否有这样一种感觉,当需求很密集的时候,写到后面,AI的效果总是差点意思,没有手写的丝滑。
- 这里的问题在哪里?是我用法的问题,还是AI的问题?
- 目前进入到一个AI编程疲惫期?如何跨越过去,用相对简单或低成本的方式,让AI的使用效果提升上来?
- 实践过程中的二个思考
- 如何判断生成代码是否是高质量的?
- 可否直接投产?或少量修改即可投产?
- 无效代码很少?或无用代码很少?
- 什么好代码?
- 满足功能需求和稳定性,兼顾用户体验、开发效率、可维护性和成本控制
- 四个维度来量化:稳定、体验、效率、成本
最后,留下一个值得探索问题:如何应对,AI过度设计,过度实现?
更多推荐
所有评论(0)