为什么要推规范开发?

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) • 最佳实践,研究中
• 保障每行代码都是熟悉的,避免后续迭代,难以改动
• 保障每行代码都是有用的,删除无用代码,避免技术债务累积

三、经验总结

  1. AI编程让技术债务加剧
  • 在规划需求文档阶段,里面的内容,一定要仔细check每一项功能,否则最终AI生成时,会多生成一些功能的代码。
  • 多的这些代码,需要清理掉,若被遗留下来后,就变为了历史债务。
  1. AI编程让试错成本降低
  • 让推翻现有功能,快速重新开发,变得更具可能性(底层表结构设计要良好)
  1. AI是资深程序员的放大器
  • 放大你的能力,简化你的工作
  • 降低写优雅代码成本(你负责框定范围,甚至是一个模糊的方案,让AI来放大完善你的方案)
  1. AI让你更容易写出好代码
  • 看代码
  • 改代码
  • 选代码(低级程序员)
  • 删代码(高级程序员)

四、个人实践体感

  1. 实践过程中的一个错觉
  • 你是否有这样一种感觉,当需求很密集的时候,写到后面,AI的效果总是差点意思,没有手写的丝滑。
  • 这里的问题在哪里?是我用法的问题,还是AI的问题?
  • 目前进入到一个AI编程疲惫期?如何跨越过去,用相对简单或低成本的方式,让AI的使用效果提升上来?
  1. 实践过程中的二个思考
  • 如何判断生成代码是否是高质量的?
    • 可否直接投产?或少量修改即可投产?
    • 无效代码很少?或无用代码很少?
  • 什么好代码?
    • 满足功能需求和稳定性,兼顾用户体验、开发效率、可维护性和成本控制
    • 四个维度来量化:稳定、体验、效率、成本

最后,留下一个值得探索问题:如何应对,AI过度设计,过度实现?

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐