AI 与人类共享的编码指南

内容管家 AI领域评论0字数 2917阅读9分43秒阅读模式

导语

随着工程组织规模扩大,让所有人遵循统一的软件开发规范变得越来越困难。每个人都有自己的习惯和风格,工单系统、Scrum 和部署流水线等机制应运而生,试图为开发流程注入一致性。而在代码层面,则通过编码标准和规范来实现。

到了 2026 年,软件工程师手写代码的比例越来越低,越来越多地依赖编码代理(coding agents)根据设计意图生成代码。这些代理若要参与企业代码库,就必须遵守既定的标准和规范。幸运的是,市面上大多数代码生成器已经支持为代理配置标准和规范。

代理不是初级开发者

然而,为代理制定编码规范与 onboarding 一名初级开发者完全不同——你不能丢几份文档给它然后放任探索。代理执行速度快,却缺乏对代码上下文的深入理解。而人类程序员的大量上下文认知,其实来自对特定形式、风格和模式的隐性积累。代码中的"红旗"被称为"代码异味"(smells),这个说法本身就揭示了人类代码理解中那种直觉性的本质。尽管外界讨论热烈,编码代理至少在专业场景下并不是靠直觉运行的。

随着代理生成的代码越来越多,软件工程的认知负担正在向设计和架构层面转移。代码审核&查验也将成为大多数工程师首次审视代码的窗口——因为代码并非由他们亲手写出,他们只知道需求是什么,却不掌握代码的来龙去脉。为代理制定的编码指南,可以为这个本质上非确定性的过程注入一定的确定性。

代理编码指南的特殊性

为代理(或人)制定的编码标准和规范(本文统称"指南"),需要比传统版本略有不同——更明确、更具示范性、更一目了然。但也不会相差太多,因为好的文档本来就应该服务于所有编码实体。

基本原则

代理生成的代码需要能够与大量已在线上运行的既有代码协同工作(除非你有幸只做全新的绿地项目)。这意味着代理需要:

  • 使用相同的语言和库
  • 接入既有的构建和部署系统
  • 适配平台工程系统和范式

如果你的前端用的是 Express,就不能让代理用 React 来写代码。

除了技术栈本身,工程团队还有一整套方法论和最佳实践,用以维护共享代码库。其中有些是通用最佳实践,有些是团队文化,有些则是团队对最佳实践的有意偏离。这些对人类同事而言可能被视为"常识",但对代理则不能想当然。

Vish Abrams(Heroku 首席架构师)指出:"需要考虑的是,你到底给了它什么样的提示,比如 DRY 原则?有些经典的编程原则对资深工程师来说是常识,部署方面也是如此——你希望把配置和代码分离来构建应用。你可以告诉 LLM 用这种方式构建,也可以简单地说'给我写个贪吃蛇游戏',然后它爱怎么写怎么写,完全不管后续可维护性。" 这可能正是重新审视编码指南的时机。许多最佳实践诞生于代码还是"手工艺品"的年代。如果你现在只在代码审核&查验阶段接触代码,也许某些规范需要调整——比如为了便于审核&查验,代码中是否应该保留更多功能副本(随 PR 一起展示)?这没有标准答案,但许多最佳实践的本质目的是让代码对人类更易读、更易维护。

代码层面的具体决策

编码和写作一样,存在大量因组织而异的小决策。这些对外部人来说可能显得微小随意,却可能产生下游影响,并拖慢习惯特定约定的同事的审核&查验速度。以 Stack Overflow 博客的编辑规范为例:我们使用序列逗号(serial comma),而有些人不用——并且他们是错的。

和风格指南一样,代理编码指南应该明确说明团队在语言结构选择上的决策及其理由。以下是值得纳入的几个决策点:

  • 变量和方法命名:命名是软件工程中的经典难题。你希望代理自由发挥创建 FactoryBuilderBuilderFactory,或者混用 camelCase 和 underscore_style 吗?如果代码库内存在不同风格(例如 C++ 和 SQL 代码风格不同),应分别说明。同时明确如何识别和解决重复命名问题。
  • Tab 还是空格:如果团队对此有明确立场,让代理知道即可。有些 IDE 和语言可能让这个争论变得毫无意义——但无论怎样,确保代理清楚规则。
  • 代码布局:某些编程语言(如 Python)对缩进和格式有严格要求,而另一些语言(尤其是花括号语言)则允许更自由的布局方式。研究表明,布局方式会影响代码理解的速度。
  • 异常处理和日志:代码需要优雅地失败,代理需要了解你对线上软件故障处理的预期和数据收集方式。理想情况下这些能自动完成,但大多数时候需要在代码中显式编写相关逻辑——不如让代理顺手写了。
  • 注释规范:代理可以写注释,但应该在方法之前还是之后?注释是否遵循缩进规则?你使用 API 文档生成器吗?注释要详细到什么程度?这些人类程序员可能靠直觉判断的事,代理需要明确指引。

以上并非代理编码指南的完整清单,你大概率会在使用过程中发现代理的各种恼人小癖好。

导语

想让 AI 编程代理按照你的期望工作?光有技术栈不够——你还需要一套结构清晰的编码规范文档。本文综合了多位工程负责人的实战经验,总结出面向 AI 编程代理的规范撰写方法论,涵盖指南设计原则、示例写法、错误反馈机制以及落地步骤。

指南设计原则

清晰一致,避免歧义

规范文档的首要标准是「显而易见」:任何人都能一眼看懂如何执行。撰写完毕后,试着以最挑剔、最不讲道理的方式去测试它——只要你能找到一种方式曲解它,就说明它还不够清楚,需要重写。

风格上不必追求完美,但必须保持可预测性。整套文档使用简单、重复的句式结构,AI 对模式化的表达有明显偏好。

语言要直白,别给 AI 设陷阱

工程师写文档时,默认读者英文水平参差不齐,可能是非母语者。相应地,应避免使用习语(idiomatic expressions)或其他需要二次解读的语言结构。

"Don't confuse the AI. Be simple, explicit, and boring."

代码示例同理。覆盖所有边界情况,不给 AI 留下任何「自行判断」的空间。每个决定都要有明确的理由——哪怕这个理由只是「我们是 Python 团队,用 Tab 缩进保持一致性」这样的标准约定。

Graphite CTO Greg Foster 指出,工程师通常会潜移默化地吸收代码库的隐性上下文:花一晚上写一堆新函数时,也在同时吸收整个代码库的氛围与规范。规范的职责正是把这种隐性知识显式化。

示例:展示模式的艺术

为什么示例比步骤清单更有效

作者坦承自己曾一度排斥在文档中加示例——直到不得不用文档解决问题的那一刻,才恍然大悟。截图、示例代码、API 调试台……这些比编号步骤清单更能教会用户如何上手工具。

代码示例的本质是一个模板:CTRL+C 后 CTRL+V 就能改出自己的版本。AI 同样需要一个可复制的模式。

正确与错误的对比示例

同时展示「正确实现」和「错误实现」两种示例。AI 可以通过对比判断大多数场景下代码应该如何编写。每条规则配多个示例也无妨,但务必确保示例之间风格统一。

还可以提供一份「黄金标准文件」——即完整遵循所有规范的代码范例。单个示例类似单元测试,黄金标准文件则是端到端测试。团队可以测试哪种方式效果更好。

错误即反馈:持续优化规范

把失败当作迭代素材

如果你和 AI 编程代理打过足够多交道,大概已经明白——第一版规范不可能一次到位。Charity Majors 在其博客中提到,CI/CD 的核心价值在于缩短反馈循环;AI 代理也不例外。

代码中出现的错误,是更新 standards 文件的绝佳机会。这些错误往往能揭示那些你原本没意识到的隐性规范——那些「secret requirements」。

Sourcegraph CEO Quinn Slack 打了个比方:

"有一种人只是随手敲 prompt,'chicken-type',他们并不真正想让 AI 赢。另一种人会花大量时间定义规则、写 agents.md 文件,把 AI 应该如何运作说得明明白白。出了错,他们就更新文档,让它转起来形成飞轮。"

人类反馈同样重要

另一个不可忽视的反馈来源是你的工程团队。将 standards 文件放在 Stack Internal 或其他文档库中,让所有人都能编辑、评论、更新。毕竟,这份代码规范最终会影响所有人的日常开发与 code review,每个人都应该有发言权。

落地:让规范与 AI 共存

写入 agents.md 或封装为 Skill

规范写完之后,关键是让它「活在代码旁边、活在代理上下文中」。将所有规则显式写入 agents.md 或打包为 Claude Skill,并纳入标准代码仓库管理——就像管理部署流水线一样管理它。

不过,这不意味着放弃其他确定性工具。Linter、Formatter、静态分析工具在构建流程中仍有其一席之地——它们负责捕捉 AI 最容易搞砸的基础问题。

大公司已经走在前面

DeepMind/Google 高级产品经理 Logan Kilpatrick 指出,已经在管理数百乃至数千名工程师代码风格的大公司,在这方面有先天优势:

"大公司有完善的形式指南、最佳实践、软件开发流程。所有这些都是完美的上下文,可以喂给模型,让它真正为你所用。缺少这些上下文,你基本就是在盲猜。"

这意味着:越早把隐性规范显式化、文档化,就越早能让 AI 成为真正的开发助力。

延伸阅读

 
内容管家

发表评论