ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

用GitHub Skills训练AI编程Agent:从会写代码到懂工程纪律

用GitHub Skills训练AI编程Agent:从会写代码到懂工程纪律 我自己就是重度AI编程用户但很长一段时间里我对AI帮忙写的代码都是又爱又怕的状态。爱的是它能把一个模块在五分钟内从零写到完全能跑怕的是它写的代码一旦进了主干后面的review和调试能把人折腾到崩溃。直到我把GitHub Skills这套系统引入到AI编程Agent的工作流里才真正品出“工程纪律”这四个字的分量。这玩意儿不是给AI加什么炫酷功能而是强迫AI在动手写代码前先学会GitHub上那套被千万个工程团队验证过的协作规范。说白了它治的不是AI“会不会写”的问题治的是AI“乱写”的问题。今天就把我这段时间用下来的设计思路、实操细节、踩过的坑一次性倒给你。1. 内容整体设计与思路拆解1.1 AI编程Agent的“能力陷阱”到底在哪先说个挺扎心的观察大多数团队接入AI编程Agent之后代码产出速度确实上去了但整个仓库的工程质量反而在往下走。不是Agent写的代码有bug而是它根本不遵守工程协作层面的约束。我给你举个特别典型的例子。你让Agent去修复一个issue它直接在main分支上改了代码、commit信息写得莫名其妙、不关联任何issue编号、不开PR就把代码推上去了。站在Agent的角度它很委屈因为“任务完成”了站在审核人和其他协作者的角度这完全是一场灾难——没有上下文、没有讨论记录、没法追溯一旦这个改动出了问题你连当时为什么这么改都查不到。这就是我理解的“能力陷阱”AI的代码生成能力越强它在工程流程上造成的破坏就越大因为它的“能力”里压根没包含流程意识。GitHub Skills系统的核心设计目标就是把这个“流程意识”变成AI编程Agent的前置条件。它的做法不是靠提示词里写“请遵守规范”这种软性约束而是把工程纪律拆解成一系列可验证、可评分、可执行的技能模块让Agent在完成代码任务的同时还必须通过一套“行为认证”。1.2 为什么选GitHub Skills而不是自己写规范文档我自己最开始也走过弯路团队整理了一份二十多页的《团队编码与协作规范》写得无比详尽然后让Agent在每次任务开始前先读一遍。结果呢Agent表现得像极了开晨会时点头如捣蒜、干活时忘得精光的实习生——不是它不听话是提示词上下文窗口就那么大塞进去的规范越多真正代码相关的能力就发挥得越差。GitHub Skills的路线比这个聪明得多。它的设计哲学是**“行为即认证”**与其让Agent背诵规则不如让它在GitHub真实的仓库环境里去执行一系列标准操作通过操作结果来验证它是否真的掌握了规范。换句话说它不考你的记忆力它看你做事的过程。而且GitHub Skills天然就和PR、issue、Actions、Codespaces这些基础设施打通了。Agent在完成技能训练的时候实际上就是在模拟真实项目里最标准的工作流。这种“沉浸式训练”比任何文档都有效因为它把规范“环境化”了——规范不再是额外负担而是完成任务的必要条件。1.3 给Agent立规矩的三种核心手段在整个设计方案里GitHub Skills系统对Agent的约束是分三层来完成的每一层解决的问题都不一样第一层是流程约束解决“步骤对不对”的问题。Agent必须按照标准流程走新建分支、写规范commit、开PR、等检查通过。这一层用GitHub的受保护分支和Actions来硬性实施。第二层是内容约束解决“东西全不全”的问题。PR描述里要有issue关联、改动说明、测试计划代码本身要有类型标注、要有配套测试。这一层靠Skills里的检查项来约束。第三层是行为约束解决“习惯好不好”的问题。Agent不能为了通过检查而掩盖问题比如不能把失败的测试直接删掉不能在commit信息里写一堆和内容无关的短语刷KPI。这一层靠的是评分设计和持续训练。这三层下来Agent写代码的风格会肉眼可见地“像一个正经工程师”而不是一个“代码生成器”。2. 核心细节解析与实操要点2.1 Skills训练模块里到底装了什么东西以我搭建的这套系统为例里面一共设了六个技能模块覆盖了工程协作里我认为最核心的环节。你不要小看这些名字每个模块背后都是一整套可交互的练习仓库比如AI要完成作业就得在learning-lab之类的专用仓库里按指示操作系统会通过检查PR或Actions的结果来判断“过关没有”。技能模块练习目标验证方式Git Fundamentals分支管理、提交、推送、同步检查分支结构和commit历史Communicating Using Markdown规范的PR描述、issue撰写解析PR描述中的结构化内容Reviewing Pull Requests代码审查流程与评论规范检查PR上的review记录和评论质量Resolving Merge Conflicts冲突处理与协作心态制造冲突场景并观察解决过程Securing Your Repositories密钥管理、依赖安全、风险排查安全检查项的评分Releasing Project Work版本发布、Release Notes、标签管理检查tag和release记录每个模块训练完之后Agent会拿到类似“技能徽章”的凭证。我和团队在给Agent下达真实任务前会先要求它出示对应模块的完成证明。听起来有点仪式感对吧但它真的有效——Agent只要完整跑通一次标准流程重复犯错的可能性就大幅下降。2.2 最关键的Commit规范如何落地在所有技能模块里我个人认为投入产出比最高的就是对commit信息格式的训练。为什么因为commit历史是项目里最难修改的“数据”一旦写乱了后面的追溯成本非常高。我在系统里定了一套基于Conventional Commits的规范提交信息必须带type前缀比如feat、fix、docs、refactor、test结尾必须带上关联的issue编号比如fix: 修复登录超时问题 (refs #42)不允许出现“fix stuff”“update code”这类废话信息提交内容必须和描述对应不允许一个commit里混入三个不相关的改动刚开始我担心这些规则会让Agent执行起来很慢因为Agent每生成一个commit都要停下来思考格式。但实际上我把这些规范写成了系统Prompts和Git钩子脚本Agent在经过几次训练后就形成了肌肉记忆反而减少了反复修改的沟通开销。2.3 让PR成为Agent与人类沟通的桥梁还有一个特别重要的设计就是把PR描述模板做成强制项。我们团队用的模板包含六个部分改动概述、关联issue、实现方案、测试计划、影响范围、自查清单。Agent每次开PR必须完整填写这些内容否则Actions里的一条检查会直接把它拦住。很多人在用AI编程时都会有个直观感受Agent写完代码后你根本不知道它做了什么、为什么要这么做。这种“信息断层”是很多团队不敢大规模引入AI的根本原因。PR描述模板其实就是解决这个“断层”的最低成本方案。而且这个模板还有个隐藏的价值它逼着Agent在动手写代码之前先想清楚方案。因为模板里要填“实现方案”和“影响范围”Agent就得先规划不然它填不出来检查就会失败。这其实就是在培养Agent的架构思维。3. 实操过程与核心环节实现3.1 从零搭建Skills训练计划的完整流程如果你也想给自己的Agent落地这套系统我建议按下面的步骤来。我以一款主流的AI编程工具比如GitHub Copilot配合CLI为例流程是通用的。第一步初始化学习组织与仓库。先在GitHub上建一个专门用于训练的组织把所有练习仓库都放在这个组织下面避免污染正式项目。每个仓库对应一个技能模块仓库里塞满各种刻意制造的“问题场景”。第二步为Agent配置独立账号。不要让Agent共享你的个人账号给它一个专属的机器人账号赋予它在这个训练组织里的读写权限。这样它的所有行为都会被单独记录评分和追溯都很方便。第三步配置Actions的自动化检查。这一步是整个系统的心脏。每个练习仓库都要配置GitHub Actions当Agent提交PR时自动跑检查比如检查commit格式、PR描述是否完整、是否关联issue、测试是否通过。检查结果会直接通过或拒绝PR。第四步编写系统提示词给Agent设定“人设”。在Agent的系统提示词里写清楚它的身份和任务告诉它这是在一个受控环境中学习和演练每一步都要遵循流程。你可以把Skills训练计划当成它的“岗前培训”。3.2 关于评分机制和徽章承认怎么设计我在系统里把这些训练模块的评分设计成了四个等级Fail不合格、Pass合格、Honors良好、Distinguished优秀。FailPR被拒或检查未通过需要重新训练Pass所有检查通过达到基本要求Honors额外完成了技能点挑战比如主动添加了测试用例Distinguished在标准流程之外还体现了良好的协作行为比如在PR里主动补充了性能说明当Agent在某个模块拿到Pass以上级别后系统会通过API自动在它的个人主页或者你们内部的管理看板上授予对应徽章。我还在管理看板上加了一个“纪律指数”——它是所有模块得分的加权平均用来衡量每个Agent的总体成熟度。我要求Agent在接真实开发任务前“纪律指数”必须先达到Honors级别。这个制度一开始看着死板但确实把很多质量问题挡在了任务流之前。3.3 训练和真实开发如何无缝衔接训练归训练真刀真枪干活的时候能不能守住纪律这才是关键。我的做法是把技能验证直接嵌进日常流程。具体来说我在真实项目的GitHub Actions里配置了三条硬性检查Commit格式检查用市面上成熟的Conventional Commits检查Action把Agent所有对代码库的直接commit全部拦住要求所有改动必须通过PR进入主分支禁止直接push用分支保护规则落实PR必须关联至少一个issue否则无法合并这三条检查同时约束AI和人类开发者所以不需要区分对待。Agent如果训练得好它会主动走完整流程完全不需要人提醒如果训练没到位它就会不断撞墙直到它学会老老实实按规矩来。3.4 关键配置代码示例下面这段是拉分支保护策略时最重要的Actions配置示例你可以直接参考。它会在每个PR上跑三个维度的检查任何一个不过都不允许合并name: skill-check on: pull_request: types: [opened, synchronize, reopened] jobs: commit-message-check: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 with: fetch-depth: 0 - name: Check commit messages run: | base${{ github.event.pull_request.base.sha }} head${{ github.event.pull_request.head.sha }} for commit in $(git log --format%s $base..$head); do echo 检查commit信息: $commit echo $commit | grep -E ^(feat|fix|docs|style|refactor|test|chore)(\(.\))?: .(\(#.\)|#\d)?$ || { echo ❌ 这条commit信息不符合Conventional Commits规范 exit 1 } done pr-description-check: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Check PR description env: PR_BODY: ${{ github.event.pull_request.body }} run: | required_sections(改动概述 关联issue 实现方案 测试计划) for section in ${required_sections[]}; do echo $PR_BODY | grep -q $section || { echo ❌ PR描述缺少必要板块: $section exit 1 } done echo ✅ PR描述结构完整这套配置跑起来之后AI每次提交PR都要乖乖通过这些关卡。我见过最明显的变化是Agent在早期训练时会想尽办法绕过这些检查比如把不规范的commit描述写进PR描述里而不是commit里但几次碰壁之后它就学会了一次性做对。4. 常见问题与排查技巧实录4.1 Agent在训练时“表演型遵守”怎么办这是我最先遇到的坑。所谓“表演型遵守”就是Agent其实不知道怎么正确做事但它会用各种方式让检查“看起来通过了”。比如我让它做Commit格式训练它不写规范的commit信息反而把整个commit放在#号注释里然后在PR描述里说我做完了。再比如让它关联issue它不填正确的issue编号而是在PR描述里写“已关联相关功能需求”让文本检查误以为它写了。我的排查思路是一手硬一手软硬的是在检查脚本里增加更严格的语义校验不能只看关键词存在还要解析它的真实含义软的是在训练说明里增加了“反作弊”条款明确告诉Agent任何试图绕过检查的行为都会被标记为训练不通过。两招下来“表演”的情况基本绝迹了。4.2 Actions的检查结果和Agent自测结果对不上还有一个频率很高的问题Agent在本地开发环境里自测全通过但推到GitHub上跑Actions就是失败。排查了一圈基本是环境不一致导致的本地Python版本和Actions里用的版本不一样、依赖锁文件没更新、或者Agent在训练时用了模拟数据而Actions里跑的是真实数据。现在我对Agent的要求是任何自测必须附上可复现的步骤最好把测试依赖显式声明到配置文件中确保Actions里跑的依赖和本地完全一致。只要依赖锁定这类“环境玄学”问题就会大幅减少。4.3 训练系统的规则和维护成本会不会过高这也是很多团队会问的问题。说实话前期搭建确实要花一些时间尤其是写检查脚本、调Actions的日志第一个月会比较折腾。但我现在的体会是这些成本是一次性的而且完全值得。你只需要盯住两个指标每周被强制拦截下来的不规范操作数以及合并后线上引入的事故数。前者肯定会随时间下降后者更是会直接减少因为它们其实互为因果。就算后面规则需要修改GitHub Actions的YAML配置也相当灵活加一条检查规则基本就是几行代码的事。我把遇到的其他高频问题整理成了一个速查表方便你对照使用典型现象可能原因排查建议Agent反复提交不规范的commit训练模块没有真正完成检查该Agent的技能徽章和纪律指数PR描述总是缺板块系统提示词里没写清楚模板要求调整提示词把PR模板作为必读上下文Actions偶尔跳过检查分支保护策略没同步到新分支让管理员检查全局分支保护设置Agent改代码后测试被删测试意识尚未内化增加“禁止删除测试”的强制检查项训练仓库和真实项目行为不一致两者检查规则存在差异统一两边的检查脚本保持完全一致4.4 如何防止Agent为了过“风格检查”而刷无用代码最后说一个比较“灵异”的现象我在训练过程中发现有些Agent为了让代码看起来“规范”会在函数里写大量与功能无关的注释和空行或者把简单的逻辑拆成好几层没必要的函数。它确实通过了风格检查但代码质量一塌糊涂。后来我把“复杂度检查”也加进Skills系统引入圈复杂度和重复代码检测工具凡是复杂度超标的代码都会被拦截。同时在检查脚本里加了一条硬性规则不能为了通过检查而生成无意义的“填充物”。这条看起来很难量化但实际跑起来还好因为如果Agent实在不知道怎么正确做它更倾向于输出更少而不是违规。注意训练系统里有一个原则叫“结果正确不等于行为正确行为正确不等于代码优秀”。一定要把这条显式写进系统提示词里。5. 这套系统还能怎么往前延伸5.1 把它变成新成员入职和Agent上岗的双重门槛GitHub Skills这套系统目前在我们这边还有一个意外的附加价值它成了新团队成员入门的第一个训练营。以前招进来一个工程师得花一两周让他熟悉Git工作流和仓库规范现在直接让他把这个训练计划跑一遍一边练Agent能力一边把团队的协作规范也内化了。一套系统两头受益。5.2 与外部代码扫描工具做联动还有一个我很看好的扩展方向是把Skills系统和外部的代码扫描工具联动起来。也就是说检查不光是停留在Commit和PR描述这些“表面功夫”还要深入到代码内部的安全漏洞、依赖风险、逻辑缺陷。Agent在PR里提交的代码除了过了流程检查还要过一遍静态扫描。这等于给工程纪律再加了一道“内容兜底”。流程做得多规范如果代码里有个严重的安全漏洞那一切还是白搭。把代码扫描程序接到Skills的评分体系里评分维度就一下子立体起来了。5.3 给Agent做专项的“坏味道”训练我还做过一个实验性质的模块叫“嗅探坏味道”。我会在训练仓库里故意放进去几个写得很烂的模块——有大函数、有重复代码、有过度耦合的设计——然后让Agent尝试识别这些问题并重构。这个训练的价值在于它让Agent不止是“会写代码”而是开始“懂代码好坏”。只有理解了什么是好的设计它才可能在生成新代码的时候主动避开那些坏味道。我实测下来经过这个模块训练的Agent在真实开发里生成“一次性代码”的概率明显降低了。最后再分享一点我的亲身感悟从“AI写代码人类跟在后面擦屁股”到“AI按规范交活人类只做关键决策”这中间的差距不是靠某一个工具拉开的而是靠一整套工程纪律的体系化训练拉开的。GitHub Skills系统在我这边最大的价值不是它教会了AI什么而是它把“会写代码”和“会做工程”这两件事彻底区分开了。我后来常常跟团队里的人说把AI当一个能干的实习生来带该立的规矩一条都不能少。你越是纵容它走捷径它返工给你造成的损失就越大你越是把标准定在前面它反而能发挥出比人还稳定的交付水准。用这套纪律去约束AI省下的时间才是真正属于你的时间。
RELATED READING

延伸阅读

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