当前位置: 首页 > news >正文

AI驱动的软件工程(中):文档驱动的编码与执行


📚 系列文章导航
AI驱动的软件工程(上):人机协同的设计与建模
AI驱动的软件工程(中):文档驱动的编码与执行
AI驱动的软件工程(下):AI辅助的质检与交付(待更新)


大家好,我是阿威。

在上一篇文章 《人机协同的设计与建模》 中,我们探讨了如何与AI协作,将一个模糊的想法,通过一个结构化的三阶段流程,打磨成一套完整、严谨的设计蓝图。我们得到了《需求规格说明书》、《系统设计说明书》以及每个模块的《详细设计说明书》。

这套设计文档,是我们项目的坚实地基。但一个更严峻、也更令人兴奋的挑战随之而来:我们能把这套蓝图直接交给AI,让它自己来完成所有的编码实现吗?

如果你的经验和我最初一样,那么答案可能是否定的。直接把设计文档丢给一个通用的AI助手,然后说“照着这个去写代码”,结果往往是一场灾难。AI会很快忘记文档的细节,它会用自己“喜欢”的方式组织代码,它会在不同模块间创造出不一致的接口。最终,你得到的会是一个难以维护的、拼接起来的“代码怪兽”。

问题出在哪里?问题在于,我们只给了AI一张“地图”(设计文档),却没有给它一套“导航系统和驾驶手册”(开发流程与规范)。一个人类开发者拿到设计文档后,会运用自己脑中的整个软件工程知识体系——版本控制、代码规范、测试、日志记录——来进行工作。而AI的脑中,没有这些隐性的纪律。

要让AI成为真正的核心开发者,我们就必须为它显式地构建这一整套工程纪律

这就是我在这篇文章中要分享的核心方法论:AIDC(AI-Driven Development and Collaboration)。它的精髓在于,我们不依赖AI那短暂、不可靠的内置记忆,而是通过一系列外部化的文档,为它打造一个持久的“外部大脑”和一套强制执行的“行为准则”。我们不再请求它“写代码”,而是指令它“遵循流程”。

欢迎来到整个体系的“发动机舱”。在这里,我们将见证,设计蓝图是如何被一个遵循严格纪律的AI,一行行地转化为真实可用的代码。

AIDC方法论:为AI打造开发“熔炉”

AIDC的核心,是承认并正视AI的固有局限性,然后用工程化的手段去系统性地解决它们。这个方法论建立在四大原则之上,它们共同构成了一个足以熔炼出高质量代码的“开发熔炉”。

1. 外部化记忆 (Externalized Memory)
AI的记忆是昂贵且善变的。因此,我们将所有关键信息——需求、设计、计划、规范、甚至开发过程中的每一次提交记录——全部持久化为项目内的Markdown文档。这些文档共同构成了AI的“外部长期记忆”。在每一次执行任务前,AI的第一个动作,必须是“阅读”这些记忆。

2. 指令驱动执行 (Instruction-Driven Execution)
我们与AI的交互,不再是开放式的“对话”,而是明确的“指令下达”。通过一份我称之为“标准作业程序(SOP)”的文档,我们将AI的每一步操作都固化为可预测、可重复的指令。这从根本上杜绝了AI在执行任务时的随机性和行为偏差。

3. 自动化守卫 (Automated Guardians)
我绝不会浪费时间去检查AI写的代码有没有遵循PEP8,或者括号是不是对齐了。这些低级但重要的工作,必须交由自动化工具来强制执行。通过在流程中嵌入Linter、格式化器、类型检查器等工具,我们为项目建立了一道“自动化防线”,AI必须自己确保它的产出能通过这道防线。

4. 人机角色明确 (Defined Human-AI Roles)
在编码阶段,我们的角色再次转换。我不再是“架构师”,而是**“项目经理”和“代码审查者”。我负责下达高级别的开发任务(比如“去实现这个模块”),并在关键节点审查代码的业务逻辑。而AI的角色,则是“软件开发者”和“DevOps助理”**,它负责执行SOP中定义的所有具体、繁琐的战术操作。

基于这四大原则,AIDC的开发生命周期被划分为四个清晰的阶段。

关键输入/产出
AIDC 生命周期
新功能/模块
循环或完成
人类需求
设计文档
项目骨架
SOP与规范文档
功能代码与更新日志
阶段二: 奠基与初始化
阶段一: 设计与构思
阶段三: 规范与流程定义
阶段四: 迭代开发循环
1. 上下文同步
2. 制定计划 (TODO)
3. 编码实现
4. 自我检查 (Linter/Test)
5. 版本提交 (Git)
6. 状态归档 (Log/Plan)

阶段一我们已经完成。现在,我们从阶段二开始,看看如何一步步为AI铺设好轨道。

奠基与初始化:AI的第一次DevOps任务

在正式编码前,我需要AI为我创建一个专业、规范的开发环境。这本身就是对AIDC方法论的一次小型演练。

我会给AI下达第一个指令:

“根据我们已经完成的设计,请初始化AgentWeaver项目。你需要:

  1. 创建标准的项目目录结构(例如 agentweaver/, docs/, tests/)。
  2. 将我们之前生成的所有设计文档,归档到 docs/ 目录下。
  3. 初始化Git仓库。
  4. 创建一份专业的 .gitignore 文件、一份包含基础依赖的 requirements.txt 和一份包含项目简介的 README.md。”

AI会像一个DevOps助理一样,使用它的文件操作和终端工具,精确地完成这些任务。这个过程的产出,是一个结构清晰、已纳入版本控制的项目仓库骨架。更重要的是,它让AI从一开始就进入了“被指令、被管理”的工作模式。

规范与流程定义:锻造AI的“SOP”

这是整个方法论最核心、最关键的一步。我们要在这里,和AI一起,创造出未来将要严格“统治”AI自身行为的一系列“法律文件”。这些文件将构成它的“外部大脑”,是后续所有开发活动的基石。

我会指示AI创建以下几份核心治理文档:

  1. 《AI开发者标准工作流程(SOP).md》:这是给AI自己看的“用户手册”,是“指令驱动执行”原则的最终体现。它用最明确的指令语言,规定了AI从接收任务到完成提交的每一个步骤。后文我们会详细拆解这份SOP的内容。
# AI 开发者标准工作流程 (SOP)**版本: 1.0**## 1. 核心指令本文档是指导你在 AgentWeaver 项目中执行开发任务的标准操作流程(SOP)。**你必须严格、完整地遵循以下所有步骤**。在每个新会话开始时,用户会将此文档作为核心指令提供给你。---## 2. 阶段一:上下文同步与理解 (强制执行)在开始任何编码之前,你必须首先完成对项目状态的全面同步。这是强制性步骤,不可跳过或部分执行。-   **指令 1.1:理解高层设计**-   [ ] 读取并完全理解 `docs/需求规格说明书.md`。-   [ ] 读取并完全理解 `docs/概要设计说明书.md`。-   **指令 1.2:理解模块详细设计**-   [ ] 读取并完全理解当前任务分配的模块详细设计文档,例如 `docs/详细设计-X-模块名.md`。-   **指令 1.3:遵循开发规范**-   [ ] 读取并完全理解 `docs/开发编码规范.md` 。你后续的所有代码输出都**必须**严格遵守此规范。-   **指令 1.4:回顾开发历史**-   [ ] 读取并完全理解 `docs/开发日志.md` ,了解项目此前的关键决策和问题。-   **指令 1.5:明确当前进度**-   [ ] 读取并完全理解 `docs/项目开发计划.md` ,找到你将要开发的任务条目,明确其当前状态和依赖关系。---## 3. 阶段二:计划制定与任务执行在完全理解上下文后,开始进行计划和编码。-   **指令 2.1:制定开发计划**-   [ ] 基于以上所有文档,为你当前要开发的模块制定一个详细的、分步骤的执行计划。-   [ ] **必须**使用你的 `todo_write` 工具,将此计划转化为一个代办事项清单。清单的粒度应足够细,例如到**函数级别**或**接口级别**。-   **指令 2.2:执行开发任务**-   [ ] 严格按照你创建的代办事项清单,逐项完成开发。-   [ ] 使用 `edit_file` 工具进行编码。-   [ ] 每完成一个清单项,立即使用 `todo_write` 工具更新其状态为 `completed`。---## 4. 阶段三:代码验证与版本提交在模块核心功能开发完成后,或在每个有意义的节点,执行以下验证和提交流程。-   **指令 3.1:代码质量检查**-   [ ] **必须**使用 `run_terminal_cmd` 工具执行以下命令:1.  格式化代码: `black .`2.  静态检查与修复: `ruff check . --fix`-   [ ] 如果命令执行后报告任何错误,你**必须**修复它们,并重新运行检查,直到所有检查都通过。-   **指令 3.2:提交到版本控制**-   [ ] 使用 `run_terminal_cmd` 工具执行 `git add .`。-   [ ] 执行 `git commit`。**提交信息(commit message)必须严格遵循以下格式**:-   **格式**: `<类型>(<范围>): <主题>`-   **示例**: `feat(api): 实现创建任务的POST端点`-   **类型**: `feat` (新功能), `fix` (bug修复), `docs` (文档), `style` (格式), `refactor` (重构), `test` (测试), `chore` (构建或工具)。-   **主题**: **必须使用中文书写**,简明扼要地描述本次提交的内容。---## 5. 阶段四:项目状态归档与更新每次成功提交后,你**必须**立即更新项目的状态记录,以确保信息的实时同步。-   **指令 4.1:更新开发日志**-   [ ] 使用 `edit_file` 工具打开 `docs/开发日志.md`。-   [ ] **必须**在文件**末尾追加一行**,记录本次开发。**严禁修改历史日志**。格式如下:-   `YYYY-MM-DD HH:MM - <模块名>: <本次开发的简要总结,包括遇到的关键问题和解决方案>`-   **指令 4.2:更新项目开发计划**-   [ ] 使用 `edit_file` 工具打开 `docs/项目开发计划.md`。-   [ ] 找到与本次开发相关的任务条目(可以是模块、功能或接口)。-   [ ] 将其状态从“待开发”更新为“**完成**”。-   [ ] 如果开发中遇到问题导致阻塞,则更新为“**搁置**”或“**错误**”,并**必须**在同一行附上简要原因。---
**流程结束。此工作流是确保你高效、可靠地参与本项目的核心。请在每次会话中严格遵循。** 
  1. 《项目开发计划.md》:这是一个高阶的路线图。我会让AI基于《系统设计说明书》中的模块列表,生成这份计划。它通常是一个Markdown表格,包含模块名、负责人(默认是AI)、状态(如:待开发、进行中、完成)、依赖关系和预计完成日期。这份文档是“外部化记忆”的一部分,用于宏观地追踪项目进度。
    在这里插入图片描述

该项目计划文档完全由AI自主生成并在开发完成某个模块时遵循《AI开发者标准工作流程(SOP).md》规则自主更新,无需人类干预

  1. 《开发日志.md》:这是一份严格按时间顺序、只增不改的日志文件。我要求AI在每一次代码提交后,都必须在这里追加一行记录,注明时间、开发的模块,以及对本次工作的简要总结。这份日志提供了宝贵的、可追溯的开发历史。
    在这里插入图片描述

开发日志文档也完全由AI遵循《AI开发者标准工作流程(SOP).md》自主生成、更新

  1. 《开发编码规范.md》:这份文档定义了代码风格、命名约定、注释标准等。我会提供一些初步的规则,然后让AI将其扩充和完善,并保存成正式文档。在后续的开发中,AI必须严格遵守这份它自己参与制定的规范。
    在这里插入图片描述

该规范文档由人类指导AI完成,在AI进行编码时会依据《AI开发者标准工作流程(SOP).md》定义的流程规则完全遵守该开发编码规范

当这四份文档创建完成后,我们就拥有了一套完整的项目治理体系。AI不再是一个自由的“艺术家”,而是一个有法可依、有章可循的“工程师”。

迭代开发循环:SOP驱动下的AI一日

现在,万事俱备。我们终于可以进入激动人心的编码阶段了。让我们以开发“AIFactory”模块为例,完整地走一遍AI在SOP驱动下的标准工作流程。

我的任务下达过程非常简单,我只需要对AI说:

“任务:实现‘AIFactory’模块。请严格遵循《AI开发者标准工作流程(SOP)》进行操作。”

接下来,所有事情都将由AI根据SOP自动完成。


步骤一:上下文同步(强制)

这是SOP中的第一条,也是最重要的一条指令。AI必须首先阅读所有相关的“记忆”文档,以构建完整的上下文。它会依次执行:

  • 读取 docs/需求规格说明书.md
  • 读取 docs/系统设计说明书.md
  • 读取 docs/详细设计-AIFactory模块.md (本次任务的核心依据)
  • 读取 docs/开发编码规范.md
  • 读取 docs/开发日志.md (了解历史)
  • 读取 docs/项目开发计划.md (明确当前任务的位置)

这个看似冗余的步骤,恰恰是解决AI“失忆症”的唯一有效方法。它确保了AI在开始工作时,脑子里装的是项目的全局视图,而不仅仅是我刚刚下达的一句简单指令。


步骤二:制定计划(TODO List)

在完全理解了上下文之后,SOP指令AI进行任务分解。
AI会基于详细设计-AIFactory模块.md中的内容,使用它的todo_write工具,为自己生成一份细粒度的、精确到函数级别的执行计划。

这份TODO清单可能会是这样:

  • [ ]agentweaver/core/ 目录下创建 ai_factory.py 文件。
  • [ ]ai_factory.py 中定义抽象基类 BaseLLM
  • [ ] 实现 OpenAIModel 类,继承自 BaseLLM
  • [ ] 实现 LocalHFModel 类,继承自 BaseLLM
  • [ ] 实现核心类 AIFactory
  • [ ]AIFactory 中实现 register_model 方法。
  • [ ]AIFactory 中实现核心方法 get_model,包含缓存逻辑。
  • [ ] 为模块添加必要的异常类,如 ModelNotFoundError

这份清单不仅让任务的执行过程变得透明、可控,也再次强化了AI的短期记忆,让它对即将开始的工作有了清晰的步骤规划。


步骤三:执行编码

AI会严格按照它自己创建的清单,逐项进行编码。它会使用edit_file工具,一次只专注于一个最小化的任务,比如创建文件、实现一个类或一个方法。

每当它完成一项,比如实现了BaseLLM类,它就会再次调用todo_write工具,将对应项的状态更新为completed

  • [x]agentweaver/core/ 目录下创建 ai_factory.py 文件。
  • [x]ai_factory.py 中定义抽象基类 BaseLLM
  • [ ] 实现 OpenAIModel 类,继承自 BaseLLM

这个过程会一直持续,直到清单上的所有任务都被勾选完成。


步骤四:自我检查(自动化守卫)

在模块的核心功能编码完成后,SOP中一个强制性的验证流程被触发。
AI必须使用run_terminal_cmd工具,在项目根目录下执行以下命令:

  1. black . (代码格式化)
  2. ruff check . --fix (静态检查与自动修复)

如果这些命令返回任何错误或警告,SOP要求AI必须自行修复这些问题,然后重新运行检查,直到所有检查都干净通过。我,作为人类,完全不需要介入这个过程。自动化工具成为了保证代码基础质量的第一道,也是最有效的一道防线。


步骤五:版本提交

通过所有自动化检查后,代码进入了提交阶段。
SOP要求AI使用run_terminal_cmd工具执行git add .git commit

其中,commit message必须严格遵循我在《开发编码规范.md》中定义的格式
例如:feat(core): 实现AI工厂模块的核心功能

  • 类型(type): feat (新功能), fix (bug修复), docs (文档) 等。
  • 范围(scope): 影响的模块,如core, api
  • 主题(subject): 用中文简明扼要地描述本次提交。

这种规范化的提交信息,使得我们的Git历史清晰、可读,为未来的代码考古和自动化工具集成打下了良好基础。


步骤六:状态归档

一次成功的提交,并不意味着一个开发循环的结束。SOP的最后一步,也是“外部化记忆”原则的最后一道保障,是让AI立即更新项目的状态记录。

AI会使用edit_file工具,执行两个操作:

  1. 更新开发日志: 在docs/开发日志.md文件的末尾追加一行新记录,严禁修改历史。

    2023-10-27 15:30 - AIFactory模块: 完成了核心功能的开发,包括模型注册和基于配置的动态加载。关键是实现了缓存机制以提高性能。

  2. 更新项目开发计划: 在docs/项目开发计划.md中,找到“AIFactory模块”这一行,将其状态从“进行中”更新为“完成”。

至此,一个完整的、闭环的、可追溯的开发循环才算真正结束。从上下文同步到状态归档,每一步都在SOP的严格规定下进行,AI的行为是可预测的,其产出是高质量且符合规范的。

结论:从“创作者”到“流水线工人”

通过AIDC方法论,特别是这套文档驱动的迭代开发循环,我们成功地改变了AI的角色。它不再是一个天马行空、难以捉摸的“创作者”,而更像是一个高效、精准、不知疲倦的“流水线工人”。

我们为它铺设了轨道(项目骨架),教会了它读懂图纸(设计文档),给了它一本操作手册(SOP),并设定了质检标准(自动化工具)。我们把复杂的软件开发过程,分解成了一系列AI可以理解并能精确执行的、标准化的“工序”。

这套体系的威力在于,它是可复制、可扩展的。每当有一个新模块要开发,我们只需要重复这个循环即可。整个项目的开发过程,变成了一系列稳定、高效的“事务”。

当然,代码写完,并不等于项目完工。AI生成的代码,即便通过了所有静态检查,其业务逻辑是否正确?在真实环境中能否顺利运行?当多个模块集成在一起时,是否会出现意想不到的问题?

这就引出了我们这个系列的最后一篇文章要解决的问题:终局质检。在下一篇中,我将分享一套人机协同的质检与交付流程,为我们这个由AI构建的项目,进行最终的质量把关。

http://www.dtcms.com/a/276995.html

相关文章:

  • 深入解析 ArrayList
  • XGBoost三部曲:XGBoost原理
  • Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)脚步
  • Transformer 小记(一):深入理解 Transformer 中的位置关系
  • 【PTA数据结构 | C语言版】字符串截取子串操作
  • ABP VNext + 多级缓存架构:本地 + Redis + CDN
  • ref 和 reactive
  • EWSGAN:自动搜索高性能的GAN生成器架构
  • LeetCode 1156.单字符重复子串的最大长度
  • 维基艺术图片: 数据标注 (2)
  • C语言基础教程(002):变量介绍
  • 一文读懂现代卷积神经网络—使用块的网络(VGG)
  • 基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500)
  • 08.如何正确关闭文件
  • 数智管理学(三十三)
  • 归并排序递归法和非递归法的简单简单介绍
  • Gin框架统一响应与中间件机制学习笔记
  • DH(Denavit–Hartenberg)矩阵
  • KL散度:信息差异的量化标尺 | 从概率分布对齐到模型优化的核心度量
  • 使用QtTest
  • 反激变换器设计全流程(一)——电路拓扑及工作流程
  • Chrome v109.0.5414.168 绿色便携版 Windows 7/2012R2 最终版 下载
  • 开发语言的优劣势对比及主要应用领域分析
  • GROW领导力模型
  • Unity物理系统由浅入深第四节:物理约束求解与稳定性
  • 【算法分析与设计】研究生第一次算法作业latex源码+pdf
  • docker容器高级管理-dockerfile创建镜像
  • 飞算 JavaAI 智能编程助手:颠覆编程旧模式,重构开发生态
  • Java小白-线程 vs 虚拟线程,Java并发的新旧对决
  • LeetCode--44.通配符匹配