Appearance
AI 友好型项目:定义、标准与改造方法论
整理日期:2026-03-26
来源:权威资料综合研究(srungta.github.io、operationalsemantics.dev、llmx.tech)
核心定义
AI 友好型项目(AI-Friendly Codebase)是指:让 AI 在有限的上下文预算内,能够准确理解项目意图、找到正确位置、生成符合规范的代码的代码库。
理解这个定义的关键是 AI 的核心限制——上下文窗口(Context Window)。即便 Claude 拥有 200k token 的上下文,一个中等规模项目(67,000 行代码)展开后约 250 万 token,AI 一次只能看到不到 10% 的代码库。
AI 在处理项目时,本质上是一个刚入职的新员工:不知道代码在哪里、不知道为什么这样写、不知道该遵循什么规范,只能靠猜。
标准:让 AI 容易写对
1. 可预测的代码模式
AI 是模式匹配机器。如果项目里有 10 个 Controller 都遵循同样的结构(构造函数 → 私有方法 → 公开方法 → 错误处理),AI 写第 11 个时会自然复现这个模式。反之,风格各异的代码库只能让 AI 猜测,猜测就会出错。
实践要点: 日志写法、配置处理、API 命名、目录结构、文件命名——这些都应该在整个项目中保持一致。
2. 自文档化的目录结构
目录名本身就应该是文档。
# 差:需要打开文件才知道里面是什么
src/utils/
src/helpers/
src/lib/
# 好:不用读文件就知道去哪里找什么
src/tools/wallet/
src/tools/nft/
src/api/auth/3. 文件大小的甜蜜区间
| 行数 | 状态 |
|---|---|
| 50–150 行 | 最优(一个完整功能单元) |
| 150–300 行 | 可用 |
| 300–500 行 | 开始困难 |
| 500+ 行 | AI 无法在一个上下文里完整理解 |
每个文件应该只做一件事,做完整。
4. 浅层的依赖图
理解 a.ts 需要先加载 b.ts,b.ts 又依赖 c.ts、d.ts、e.ts——AI 需要消耗大量上下文预算追踪依赖链。
最佳实践: 最多 2 层导入深度,避免循环依赖,避免深层继承链。
5. 上下文文件(Context Files)——最重要的基础设施
这是 AI 友好型项目最核心的基础设施:
CLAUDE.md/AGENTS.md/.cursorrules:项目级别的 AI 指令文件,告诉 AI 这个项目是什么、用什么技术栈、遵循什么规范、有哪些禁忌。每次会话自动加载。README.md/ARCHITECTURE.md:给 AI 提供 30,000 英尺的全局视角。- 每个目录下的
README.md:让 AI 不用打开文件就能知道这个目录里有什么、如何扩展。
CLAUDE.md 应该回答:项目是什么、技术栈是什么、目录结构如何、关键约定是什么、哪些地方不能动、常用命令是什么。500 字以内的精准描述比 5000 字的流水账有用得多。
6. 自包含的文件实现
每个文件应该尽量不依赖其他文件就能被理解。重要的常量、类型、验证逻辑可以内联,而不是分散到多个 utils 文件里。
typescript
// 差:理解这个文件需要加载 5 个其他文件
import { validateAddress } from '../../utils/validation.js';
import { formatBalance } from '../../utils/formatters.js';
import { ETH_DECIMALS } from '../../constants.js';
// 好:自包含,AI 无需加载其他文件
const ETH_DECIMALS = 18; // 本地常量
// 验证逻辑内联
if (!args.address?.match(/^0x[a-fA-F0-9]{40}$/)) {
throw new Error('Invalid Ethereum address');
}标准:让 AI 难以写错(护栏)
Linter 是最强大的护栏
AI 编程 Agent 会把构建失败当作反馈信号——lint 报错,它会自动修复再重试。把代码规范写进 lint 规则,比写进文档有效 10 倍。
关键原则: 重要的规则要设置为 error(中断构建),而不是 warning(AI 会忽略 warning)。
如果某件事在代码评审时反复被提到,就把它写成 lint 规则。
测试是验证护栏
一个写得好的参考测试文件,AI 可以照着模式生成新测试。测试本身也是 AI 验证自己改动是否正确的反馈机制。
好的测试应该是自文档化的:不需要理解实现细节,只需要看测试本身就能理解被测行为。
三类常见反模式
上下文爆炸: 一个功能散落在 15 个文件里,AI 要加载完才能理解,上下文直接打满。
配置散落: 配置分散在 10 个不同文件里,AI 需要全部加载才能理解系统配置。
深层继承链: Base → Extended → MoreExtended → EvenMoreExtended,AI 必须加载整条链才能理解最末端的类。
隐式约定: 代码里充满了"大家都知道"的潜规则,但没有任何文档记录,AI 无从得知。
历史项目改造方法论
改造不需要一次性推倒重来,分三个阶段渐进推进。
第一阶段:建立基础(1–2 周)
核心是"给 AI 一张地图",成本低、收益高。
- 创建
CLAUDE.md(或AGENTS.md)放在项目根目录 - 在每个主要目录下加
README.md - 识别项目里最常见的代码模式,找出写得最好的那个文件,标注为"参考文件",在
CLAUDE.md里明确指向它
第二阶段:建立护栏(3–4 周)
核心是"让 AI 难以犯错"。
- 启用 Linter 并把重要规则设为 error 级别
- 建立快速验证构建:只跑 lint + 单元测试的轻量构建,供 AI Agent 迭代时使用
第三阶段:结构优化(持续进行)
这一阶段才涉及代码结构本身的改造,优先从改动最频繁的模块开始。
- 对于超过 500 行的"上帝文件",按职责拆分,每个文件只做一件事
- 对于深层继承链,考虑用组合替代继承
- 对于散落各处的配置,集中到一个或少数几个配置文件
实用原则: 每次修改一个模块时,顺手把它改造成 AI 友好的形式,而不是专门开一个"AI 友好化"的大项目。改造成本分摊到日常开发里,阻力最小。
上下文预算思维
把上下文当作预算来管理:
总预算:200k token
文件查看:每个文件约 -5k token
对话历史:-20k token
AI 响应缓冲:-20k token
可用工作空间:约 155k token
最多可同时查看约 30–40 个文件设计目标: 让 AI 完成一个典型任务所需加载的文件数控制在 30 个以内。
黄金法则(10 条)
- 一个概念,一个文件
- 自包含的实现
- 重要的东西内联
- 在使用点处文档化
- 扁平优于嵌套
- 显式优于隐式
- 单文件最多 300 行
- 最多 2 层导入深度
- 每个目录都有 README
- 示例优于解释
与人类友好型项目的关系
AI 友好型项目和人类友好型项目,在绝大多数标准上是重合的。清晰的命名、合理的模块划分、完善的文档、一致的代码风格——这些对人类新员工有用的东西,对 AI 同样有用。
真正 AI 特有的需求只有两点:
- 上下文文件(
CLAUDE.md这类):人类不需要但 AI 必须有 - 文件大小的硬约束:人类可以通过跳转和搜索理解大文件,AI 受限于上下文窗口做不到
改造历史项目的最好心态:不是为了 AI 而改造,而是借 AI 的压力,把项目变成一个对任何人(包括 AI)都友好的代码库。
参考来源
- Making Your Codebase LLM Friendly — Shaswat Rungta, 2026
- Context Window Management: Building AI-Friendly Code at Scale — Myron Koch, 2025
- AI-Ready Codebase Guide 2025 — llmx.tech