ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI辅助编程升级:pdlc-skills技能库让Agent按PDLC流程完整交付

AI辅助编程升级:pdlc-skills技能库让Agent按PDLC流程完整交付

开篇先坦白一个现象:我们团队用AI辅助编码用了快一年,从最早拿它写正则、补单元测试,到后来接进IDE做代码解释,确实省了不少零碎时间。但每到"把一个功能从需求变成可合入的PR"这种完整任务,AI就露怯了——要么只会在单文件里打转,要么产出的代码风格和项目规范冲突,要么干脆把测试漏掉一多半。问题不在AI本身,在于我们一直在拿它当"高级补全插件"用,从来没给它一套完整的工作流程。后来我尝试把pdlc-skills这套技能库接入真实项目,才慢慢摸清楚:AI真正缺的不是写代码的能力,而是按项目生命周期(PDLC)一步步把事情做完整的"作业手册"。

这篇内容不是概念科普,而是把我在真实项目里落地pdlc-skills的完整思路、步骤和踩过的坑写出来,适合正在被"AI生成代码质量波动大、合入前返工多"困扰的开发者和技术负责人参考。

1. AI辅助编程卡在单文件级别,问题出在缺一套流程骨架

先说一个观察。大多数团队把AI工具引入开发流程后,自然形成的用法是"局部求助":遇到不懂的API问一下,写算法题让AI打个样,出bug了把堆栈粘进去让它分析。这种用法当然有价值,但它始终没让AI参与"完整交付"这件事。完整的软件交付不是"写一段代码",而是从需求澄清、方案设计、任务拆解、编码实现、测试验证,一直到代码审查、合并发布的整条链路。每个环节都有它自己的检查点、质量标准和容易翻车的地方。

PDLC(Project/Product Development Lifecycle,项目/产品开发生命周期)之所以在工程管理里被反复强调,就是因为软件开发最大的风险从来不在"写代码"这一个动作里,而在"人和人之间对需求的理解不一致""设计没想清楚就开始写""测试补不齐"这些流程缝隙中。pdlc-skills这个技能库的核心思路,就是把PDLC每一阶段应该做什么、按什么顺序做、做到什么程度算完成,固化成Agent(AI代理)能读取、能按步骤执行的技能文件。

我把它理解成"AI的作业手册",而不是"AI的代码生成器"。一份好的技能文件会告诉AI:你现在处于哪个阶段、这个阶段的输入是什么、必须完成哪几项动作、输出格式长什么样、满足什么条件才能进入下一阶段。人做的事情从"盯着AI写每一行代码",变成"在各个阶段节点核对AI的输出是否达标"。这个转变,才是把AI从玩具变成生产力的分水岭。

这套东西适合谁?我认为不是所有开发者都需要。如果个人项目很小、一次只改几十行代码,引入流程反而显得笨重。但如果团队正在做有一定规模的项目,或者你发现自己经常要花大量时间为AI生成的代码做"善后",那pdlc-skills这类技能库就非常值得认真试一次。

2. pdlc-skills的核心构成:不是插件,是Agent的作业手册

2.1 技能包长什么样:一个可版本化的目录结构

我没把pdlc-skills当成一个需要安装的IDE插件,而是把它当成一组可版本化、可裁剪的工程文件放进项目仓库。以我们当前的结构为例,大致是这样:

skills/pdlc/ ├── skill.yaml ├── 01-requirement-clarify.md ├── 02-architecture-design.md ├── 03-task-decompose.md ├── 04-impl-guideline.md ├── 05-test-plan.md ├── 06-code-review.md └── 07-release-check.md

每个Markdown文件负责PDLC的一个阶段,skill.yaml是整个技能包的入口声明,定义技能的名称、适用场景、触发条件和阶段流转规则。这个目录放进仓库后,可以被支持Skills机制的工具自动发现。我们用的CLI Agent和IDE插件都能正确识别这种结构。

2.2 一份技能文件里到底写什么

一开始我以为技能文件就是"给AI写一段更长更详细的提示词",后来发现完全不是一回事。一份合格的技能文件至少要包含四个部分:

第一是角色的定位,也就是让Agent明确"此刻你是需求分析师/架构师/测试工程师"中的哪一个角色。这个看起来简单,但实际效果差异很大。你不告诉AI角色,它倾向于用"一个全能助手"的姿态回答所有问题,输出往往泛泛而谈;明确角色后,AI会按这个角色的专业视角去提问和检查。

第二是输入和输出的格式。比如需求澄清阶段,输入是用户一段含糊的描述,输出是一份固定模板的PRD。如果没有输出格式约束,AI产出的文档结构会千奇百怪,人根本没法快速核验。

第三是执行步骤。每个阶段要按顺序执行哪些动作,步骤要细分到"能照着做"的程度。我会在3.2节展开讲动作清单的粒度问题。

第四是退出条件(exit condition)。这是最容易忽略也最关键的部分。一条技能必须明确规定"满足什么条件才算本阶段完成",比如"需求澄清阶段的退出条件是:所有待确认项均已确认,且PRD中包含可度量的验收标准"。没有退出条件的技能,AI很容易在"看似做了"的状态下过渡到下一个阶段。

2.3 和普通提示词的本质区别:可复用、带门禁

很多人会问,我不装技能库,每次手动写提示词让AI走一遍流程不就行了?技术上可以,但实际做不到。第一,你不可能每次在提示词里把十几条流程细节写全,稍微漏一条,AI就会回到"自由发挥"模式。第二,团队里每个人的提示词水平不一样,同一个AI在不同人手里表现天差地别。技能文件相当于把团队里"最会指挥AI的人"的经验沉淀成了统一标准。

技能文件还承担一个普通提示词做不到的事:门禁控制。它明确告诉Agent哪些步骤做完之前禁止进入下一步。比如,任务拆解没完成之前,不允许AI直接写实现代码。这种"流程门禁"就是我在标题里说的"作业手册"的价值——AI不会因为自己"手痒"而跳过必要环节。

2.4 技能文件的最小示例

以我们的01-requirement-clarify.md为例,核心部分长这样:

# 阶段:需求澄清 ## 角色 你是一名有十年经验的软件需求分析师。 ## 输入 用户提供的原始需求描述(可能模糊、不完整)。 ## 执行步骤 1. 将原始需求拆解为"用户痛点"与"期望结果"两部分。 2. 列出所有可能影响方案设计的未知项,包括:用户角色、数据来源、数据规模、并发量、部署环境、与现有系统的关系。 3. 对每个未知项,先给出你的假设和理由,再向用户确认。禁止跳过未知项直接写方案。 4. 根据确认结果,输出PRD草稿。 ## 输出格式 PRD必须包含以下章节: - 背景与价值 - 用户角色与使用场景 - 功能需求列表(编号 F1、F2…) - 非功能需求(性能、安全、可维护性) - 验收标准(必须可度量) - 待确认事项清单 ## 退出条件 - 所有待确认事项均有明确结论或有明确的推迟理由。 - 每条验收标准包含可验证的数字或规则。

这样一份Skill文件看起来不算复杂,但一旦落实,AI的行为模式会发生明显变化。最直观的感受是:它不再急着给出答案,而是先问问题、先补全信息。这在真实项目中太重要了。

3. 接入前要做的三件事:仓库体检、技能裁剪、环境装配

拿到pdlc-skills这类通用技能库,最忌讳的就是一股脑全部加载进Agent里开跑。我第一周就是这么干的,结果流程重得让人想放弃。后来总结了接入前必须做的三件事,缺一不可。

3.1 先给现有仓库做一次"痛点体检"

不要因为技能库很全,就觉得每个阶段都需要。先明确团队当前最痛的点在哪里。我建过一个简单的评估表格,让团队成员给各个PDLC阶段打分,分值表示"这个阶段返工率/抱怨度有多高":

阶段常见痛点信号我们当前严重度
需求澄清需求频繁变更、开发做到一半发现理解错了高
架构/方案设计设计文档缺失、代码结构随性中
任务拆解大任务无法并行、估时不靠谱高
编码实现风格不统一、低质量代码进入MR中
测试测试覆盖率低、边界条件遗漏高
代码审查review流于形式、问题堆积到合入后中
发布检查配置遗漏、回滚预案缺失低

我们最终的结论是:需求澄清、任务拆解、测试这三个阶段最痛,而架构设计和发布检查当时并不急。这个体检结果直接影响下一步的裁剪策略。

3.2 技能裁剪:把技能包分成三层,按需加载

pdlc-skills默认的技能文件比较完整,但真实项目不需要也不可能每个阶段都强制执行。我把技能分成三层:

  • 核心层:需求澄清、任务拆解、实现规范。这层是每次开发任务都必须走的,确保AI不跑偏。
  • 质量层:测试计划、代码审查。这层在涉及关键业务逻辑或公共模块时强制启用,简单CRUD级别的任务可以跳过。
  • 流程层:架构设计、发布检查、复盘。只有项目启动、版本发布或做重大重构时才启用。

这样分好之后,Agent就不会在一个"给后台加个导出按钮"的小需求上也要走一遍架构设计流程。分层的本质是给技能加一个"项目规模适配器",避免流程僵化拖慢效率。

3.3 环境装配:让Agent真的能读到技能文件

技能文件写好只是第一步,更重要的是确认你的AI辅助工具能正确加载它。不同工具的Skills机制加载方式不同,但原则一致:要么把技能目录放在约定的路径下,要么在Agent配置里显式声明。

我当时用了一个比较通用的做法,在IDE插件和CLI Agent的配置中分别做加载。CLI的方式是在启动参数里指向技能目录:

agent --skills-dir ./skills/pdlc --mode full

在支持SKILL.md规范的编辑器Agent中,则是把技能目录放到.agent/skills/pdlc/下,Agent会自动识别。关键提醒:配置完成后一定要做一个"冒烟测试"。随便让AI先回答一句"你加载了哪些技能",如果它答不上来,就说明技能没被正确识别,后面所有流程都是空转。

另外一个教训:技能文件本身一定要纳入Git版本管理,单独放在一个仓库或项目根目录的skills/下都可以,方便后续团队review和对技能做迭代。技能不是一次性配置,它应该像代码一样有变更记录。

4. 首次跑通全流程:从一个内部小工具的完整交付看效果

技术和流程说得再多,不如完整跑一个小项目来得直观。我们选择了一个内部运维用的日志聚合小工具作为pdlc-skills的试点,核心功能是:从多个服务器拉取指定时间段的日志,按错误级别聚合,输出一份摘要报告。选这个项目有几个刻意为之的标准:边界清晰、无历史包袱、两周内可验收、但又包含完整的PDLC环节。

4.1 需求澄清阶段:AI从"给方案"变成了"问问题"

这个项目在传统流程里半个小时就能开工写代码,但我们用技能库强制走了需求澄清。让我意外的是,Agent按技能要求问出了一连串我们内部沟通时压根没想到确认的问题:日志格式是统一的还是各服务器不同?拉日志的时间段最大跨度是多久?并发拉取时会话数规模是多少?输出报告是机器可读的JSON还是给人看的Markdown?需不要要支持按应用名二次过滤?部署环境是只能访问内网还是也走公网?

这些问题里,至少有三个会直接影响架构设计。比如并发规模和日志格式,直接决定了是按时间戳滚动拉取还是按文件分片并行。如果没有需求澄清这一步,按我们最初的模糊理解写出来的实现,大概率在第一轮联调时就会被推翻重做。最终Agent产出了一份37个字段的PRD,人只需要做填空和确认,沟通成本肉眼可见地降下来了。

4.2 任务拆解与实现:AI按卡片逐个实现,人按卡片验收

需求澄清之后,Agent按技能进入任务拆解,产出了一张任务清单。当时的效果比我自己拆得还细:

任务编号任务内容依赖预估工作量
T1定义日志采集接口和数据模型无0.5人天
T2实现多服务器并发拉取模块T11人天
T3实现日志解析与错误级别分类T11人天
T4实现聚合统计逻辑T30.5人天
T5实现报告生成(JSON/Markdown双格式)T40.5人天
T6编写单元测试与集成测试T2-T51人天
T7编写部署配置与READMET60.5人天

每个任务都带了验收说明。传统模式下任务拆解通常只到模块级别,AI在技能要求下拆到了可独立测试的粒度。这也让后续编码阶段可以真正按任务卡片逐个实现,实现过程中不再需要人反复解释上下文。

4.3 测试与审查:AI补上了最容易漏的边界条件

编码阶段整体波澜不惊,真正让我觉得流程值回票价的是测试阶段。技能文件里要求"先写失败用例再写实现",Agent自动产出了12个单元测试和1个集成测试。最让我意外的是它主动补了几个边界条件:日志文件为空时聚合任务要正常返回空报告;服务器返回非200时不能阻塞整个任务,要记录失败节点并继续;时间跨度为跨天时按天分片的边界处理。

这些边界在人类开发者的惯性里往往是要等测试人员提出来才补的,AI在技能约束下反而更容易覆盖。代码审查阶段,AI按检查清单自查了一遍MR,剔除了两个隐患:一个是并发拉取时对连接池大小没做限制,另一个是Markdown报告里的错误级别文案硬编码了英文,不符合团队的多语言要求。虽然问题不算深,但至少说明流程门禁在起作用。

4.4 和过去同类项目的数据对比

这个工具从启动到合入主干用了6个工作日,一共5次返工,其中3次是在联调阶段发现的需求理解偏差纠正。作为对比,我们上一个同样量级的小工具,用了9个工作日,返工12次。更关键的质量指标是代码评审问题分布:传统模式下评审意见集中在"接口命名不统一""异常处理遗漏""缺少边界测试"这类基础问题;而这次评审意见集中在了业务逻辑层面,比如聚合维度是否符合运维同学的真实工作习惯。这意味着AI把低层次问题消化在了流程中,人可以把精力放到更高维度的判断上。

5. 把通用技能包调成项目专属的两个关键抓手

通用技能库跑通之后,我最大的感受是:它像一个"平均水平的资深工程师",但每个团队的真实项目都有自己的规范和坑。想让pdlc-skills真正发挥价值,必须做两步定制。

5.1 把团队现有规范熔进技能文件

我们团队有自己的一套约定,比如CONTRIBUTING.md里的代码风格、分支命名规则、MR模板、定义完成的DoD标准。这些事情原来靠人记、靠Reviewer提醒,现在可以直接并入技能文件。

具体做法很简单:把规范文件里可执行的部分提炼成技能里的检查项。举例来说,我们的DoD有六条标准:代码通过CI全部流水线、测试覆盖率不低于80%、关键变更必须有文档说明、依赖更新必须锁定版本、日志必须包含traceId、PR描述必须关联需求编号。我把这六条直接写入06-code-review.md的退出条件里,并在04-impl-guideline.md中写明"实现代码时必须同时满足这六条DoD才允许提交MR"。

效果是立竿见影的:原来Reviewer每个MR都要重复提醒一遍的琐碎规范问题,AI在提交前就自己排查掉了。团队里大家开玩笑说,这个技能库把"团队记忆"从老员工的脑子里搬到了Agent的配置里。

5.2 建立技能本身的"演进机制"

技能文件不是写一次就能一劳永逸的。我建议每个团队都建立一个简单的技能演进闭环:每次跑完一个完整任务后,把"AI在这个项目里做得好"和"做得差"的地方记录下来,定期更新到技能文件里。

我们具体做法是每个迭代末开15分钟的技能复盘会。比如第一次跑完日志聚合工具,发现AI在并发模块中给出的asyncio.Semaphore默认值不合理,我们就给04-impl-guideline.md补了一条"并发限制参数必须显式说明依据,禁止使用默认值";有一次发布阶段发现部署脚本里端口配置和环境变量混在一起,我们就把发布检查里的退出条件改成了"配置项必须按环境拆分为独立文件"。经过三个迭代的演进,技能库已经非常贴合团队的实际项目状态,AI的产出质量稳定性明显提升。

6. 真实项目里的坑与我的取舍建议

接入过程中我们踩过不少坑,有些是很隐蔽的,值得拿出来供大家参考。每个坑背后都是我调整完方案之后的取舍逻辑,未必适合所有团队,但思路应该有参考价值。

6.1 坑一:技能全量加载,两周的任务拖成了三周

首次接入时我们把技能库的七个阶段全部启用了。结果Agent在一大半的任务上都严格按照全部流程走,连一个数据库字段加索引的小改动都先去做架构设计,还非要输出一份方案文档。流程之重让人抓狂。后来我用3.2节里的三层裁剪法,按任务类型和规模动态决定启用哪些技能,才让流程回归合理。

这个坑背后的教训是:技能库的本质是"流程保险丝",不是"流程仪式感"。小改动不需要走全量流程,但关键节点又不能省。判断标准只有一个:这个阶段返工的风险和成本是否高于执行流程的成本。

6.2 坑二:上下文窗口顶不住,把整个项目都丢给Agent

第一次跑完整项目时,我天真地想把仓库里所有代码都塞给Agent,让它在"全局视野"下干活。结果上下文窗口很快被撑爆,Agent开始在关键决策点上"遗忘"早期阶段确认过的需求细节。后来改为挂载技能时只注入与当前任务相关的模块说明和接口定义,效果反而更好。技能文件本身也要控制篇幅,每个阶段的目标是"足够让Agent正确完成该阶段的动作",而不是把团队的百科全书都塞进去。

6.3 坑三:让AI自己判断"哪一步算完成"

这是我认为最危险的一个坑。技能文件虽然写了退出条件,但如果你不强制"退出条件确认权在人手里",AI很容易在输出格式勉强达标时就自行进入下一阶段。比如需求澄清阶段的退出条件要求"所有待确认事项均有明确结论",AI如果按自己的假设补全却标注为"已确认",就是危险的。

我最终的方案是:所有阶段的退出条件都由一个中间产物来承载,人必须检查并确认这个产物后才允许Agent进入下一阶段。例如需求澄清的产物是PRD文档,架构设计的产物是方案说明,测试阶段的产物是测试报告。Agent负责用技能文件中的检查清单自查并通过,人负责最终"放行"。这个"人管审批、AI管流程"的分工,是保证整个机制不出大问题的底线。

6.4 坑四:技能文件被Agent悄悄忽略

这个问题最隐蔽。有些Agent工具在加载技能时会静默失败,但不会报错;你问它"当前技能是什么",它依然能给出笼统回答,但实际执行时根本没按技能里的步骤走。我踩过这个坑后学乖了:接入任何新工具时做的第一件事就是冒烟测试,让Agent执行一个技能文件的第1步,然后人核对行为是否符合。只有Agent的行为模式真正发生变化,才说明技能文件生效了。

基于我个人的使用体验,pdlc-skills这类技能库最大的价值不在于让AI写代码的速度变快了多少,而在于它把"一个功能什么时候算真正做完"这件事在团队里统一了定义。在此之前,开发说做完了、测试说没测完、产品说需求理解错了,这些摩擦的根源往往就是流程节点不清晰。技能库给了所有角色一个共同参照的作业手册,而AI只是这个手册最忠实的执行者。如果你也想试,建议先别贪多,挑一个边界清晰的中等规模任务,配置两个最有痛点的阶段,完整跑一遍流程。体验过一次"人对审批负责、AI对执行负责"的协作方式之后,你会明白我为什么不建议再退回纯粹的AI补全工具了。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进