Internal Dev Handbook · 2026 Edition
AI 时代研发规范
新人手册
写给刚加入团队的你。
这不是普通的编程规范——是在 AI 工具全面渗透的时代,
怎么用对工具、写对代码、和团队高效协作。
Version 1.0 · 2026-03 · 内部文件
目录
  1. 思维方式:你不是在写代码,你在指挥 AI
  2. 动手之前:PRD 先行,需求不清不开发
  3. AI 工具使用规范
  4. 测试驱动开发(TDD):先写失败的测试
  5. Code Review:自己不能审自己
  6. Git 工作流:提交是沟通,不是备份
  7. 质量标准:什么叫做好
  8. 沟通规范:说清楚,不猜
  9. 禁止清单:这些事绝对不做
  10. 上线前检查清单
Chapter 01

思维方式:你不是在写代码,你在指挥 AI

2026 年,AI 编程工具已经足够强大——它可以写出可运行的代码、生成测试、重构模块。你的核心价值不再是写代码,而是想清楚要做什么、验证它是否做对了。

核心原则 好的工程师 = 能把需求说清楚的人 + 能判断输出是否正确的人。
不是打字最快的人,不是记 API 最多的人。

旧时代 vs AI 时代的工作方式

维度旧时代AI 时代
代码生产手写每一行AI 生成,人工审查
核心技能语法记忆、API 熟练需求拆解、验证能力、系统判断
犯错模式写错逻辑问题没想清楚、验证不够
速度瓶颈打字速度需求对齐速度
学习重点学语言、学框架学系统设计、学怎么提问

最重要的心态转变

1. AI 不会帮你想清楚需求。 你给 AI 一个模糊的任务,它会给你一个模糊的结果。垃圾进,垃圾出。

2. AI 的输出必须被验证,不能直接上线。 AI 不会告诉你它写错了。验证是你的责任。

3. 你需要理解 AI 写的代码。 不能因为是 AI 生成的就不读。你要能解释每一行的作用,出了问题你要能定位。

4. 慢下来想,快起来做。 多花 30 分钟想清楚需求,可以省掉 3 小时的返工。

Chapter 02

动手之前:PRD 先行,需求不清不开发

任何功能,不管看起来多简单,开始写代码之前必须有一份 PRD(产品需求文档)。这不是形式主义,是减少返工最有效的方式。

规则 没有 PRD,不开发。PRD 没有被确认,不开发。中途改需求,重写 PRD,重新确认,再开发。

PRD 必须包含的内容

1
目标(一句话)
这个功能解决什么问题?面向谁?成功的标准是什么?不能写"做一个排班系统",要写"让店长在 30 秒内生成一份满足签证合规的排班表"。
2
输入 / 输出
用户输入什么?系统返回什么?格式是什么?字段有哪些?边界情况(空值、超长、并发)怎么处理?
3
约束条件
有哪些硬性限制?性能要求?安全要求?数据结构限制?不能改的已有接口?
4
不在范围内
这个版本明确不做什么。写出来,防止需求蔓延。
5
验收标准
具体到可以测试的条件。不是"功能正常",而是"输入 X,系统在 Y 秒内返回 Z,错误情况显示 W"。

PRD 示例(好 vs 坏)

坏的 PRD 做一个用户登录功能,支持手机号和密码登录,要安全。
好的 PRD 目标:用户通过手机号+密码登录,获取 JWT token,有效期 7 天。

输入:POST /auth/login,body: { phone: string, password: string }
输出:{ token: string, expires_at: timestamp, user: { id, name, role } }

约束:密码 bcrypt 加密存储;同一 IP 5 分钟内失败超过 5 次锁定 10 分钟;token 存 Redis,支持主动失效。

不在范围:本期不做短信验证码登录、第三方 OAuth。

验收标准
✓ 正确账密 → 200 + token
✓ 错误密码 → 401 + error message
✓ 不存在手机号 → 401(不暴露是否存在)
✓ 连续失败 5 次 → 429 锁定提示
✓ token 在 Redis 中可查到,TTL = 604800s

PRD 确认流程

  1. 写完 PRD,发给直接上级确认
  2. 上级有疑问 → 当面讨论,不在群里来回猜
  3. 确认后才开始开发,确认记录保留(飞书文档 / GitHub issue)
  4. 中途发现需求有问题 → 立刻停下来,更新 PRD,重新确认,再继续
Chapter 03

AI 工具使用规范

我们使用 AI 编程工具(Claude Code / Codex 等)作为主力开发工具。用好它,能让你的效率提升 3-5 倍。用错它,会带来更多 bug 和更多返工。

什么任务适合交给 AI

任务类型适合程度备注
写样板代码(CRUD、API handler)非常适合提供清晰的输入输出定义
写单元测试非常适合给它验收标准,让它写测试
重构已有代码适合先有测试覆盖,再重构
debug 错误信息适合把完整错误信息和相关代码一起给
写文档 / 注释适合告诉它面向谁写
系统架构设计谨慎使用AI 给的方案要认真评审,不要直接采纳
数据库 Schema 设计谨慎使用必须人工 review,改 Schema 代价高
安全相关代码必须 review认证、权限、加密,每一行都要看

如何给 AI 下任务

给 AI 的 prompt 越精确,结果越好。参考这个格式:

# 背景
[当前代码库的相关背景,已有的数据结构]

# 任务
[具体要做什么,一句话到位]

# 输入 / 输出
[明确的输入格式和期望的输出格式]

# 约束
[不能改哪些、必须用什么库、性能要求]

# 验收标准
[写出测试用例,让 AI 同时写测试和实现]

# 不在范围
[明确不做什么,防止 AI 过度扩展]
黄金规则 给 AI 派任务时,必须包含验收标准。让 AI 先写失败的测试用例,确认测试失败后,再写实现代码。这是防止 AI 写出"通过测试但不解决问题"的代码的最有效方法。

收到 AI 输出后,必须做的事

  1. 读代码:每一行都要读懂。不能因为是 AI 生成的就跳过。
  2. 跑测试:不是"看起来对",是测试通过才算对。
  3. 边界测试:空值、超长输入、并发、网络失败——这些 AI 经常遗漏。
  4. 安全检查:有没有 SQL 注入风险?有没有暴露不该暴露的数据?
  5. 性能评估:有没有 N+1 查询?循环里有没有重复请求?

AI 工具的常见陷阱

常见陷阱 陷阱 1:AI 自信地给出错误答案。 AI 不会说"我不确定",它会给你一个听起来合理但实际错误的方案。永远要验证。

陷阱 2:AI 不了解你的业务背景。 它生成的代码可能技术上正确,但和你的业务逻辑冲突。要给足背景。

陷阱 3:AI 倾向于过度工程化。 它可能给你一个复杂的解法,而你只需要一个简单的。要学会说"更简单的版本"。

陷阱 4:把 AI 的输出直接提交。 AI 生成的代码是你的起点,不是终点。

长任务的拆分原则

不要一次给 AI 太大的任务。把大功能拆成小模块,每个模块独立完成、独立测试,再组合。

Chapter 04

测试驱动开发(TDD):先写失败的测试

测试不是功能写完后的补丁,而是开发过程的一部分。我们要求所有新功能采用 TDD 方式开发。

TDD 核心规则 先写失败的测试 → 确认测试失败 → 写最少的代码让测试通过 → 重构。
不允许在没有测试的情况下提交生产代码。

TDD 三步循环(Red → Green → Refactor)

R
Red — 写一个失败的测试
根据验收标准写测试用例。运行测试,确认它是红色(失败)的。这一步很重要——如果测试一开始就通过,说明测试写错了,或者功能已经存在。
G
Green — 写最少的代码让测试通过
不要一次写完所有逻辑。写刚好能让这个测试通过的代码,哪怕很丑。目标是测试变绿,不是写出完美代码。
R
Refactor — 在测试保护下重构
测试通过后,在不改变行为的前提下整理代码。重构过程中,测试必须保持绿色。

测试覆盖率要求

类型覆盖率要求说明
核心业务逻辑≥ 90%排班算法、计费逻辑、权限判断等
API Endpoints≥ 80%正常路径 + 主要错误路径
工具函数≥ 85%重点测试边界情况
UI 组件≥ 70%主要交互 + 渲染测试

什么测试必须写

测试命名规范

// 格式:[功能] should [期望结果] when [条件]
it('should return 401 when password is incorrect')
it('should lock account when failed attempts exceed 5')
it('should return empty array when no employees found')
it('should calculate total hours correctly with multiple shifts')
Chapter 05

Code Review:自己不能审自己

所有代码在合并到主分支之前,必须经过至少一个其他人的 review。没有 review,不合并。

规则 AI 生成的代码同样需要 review。"AI 写的,所以应该没问题"——这句话不成立。

PR 提交规范

提交 PR 时,描述必须包含:

  1. 这个 PR 做了什么(一句话)
  2. 为什么这么做(背景和决策理由)
  3. 怎么测试(测试步骤、测试结果截图)
  4. 潜在影响(这个改动可能影响哪些其他地方)
## 这个 PR 做了什么
添加用户登录接口,支持手机号+密码认证,返回 JWT token。

## 为什么这么做
当前没有认证机制,所有接口都是公开的。这是 MVP 的基础能力。

## 怎么测试
1. 正确账密 → 返回 200 + token(已测试)
2. 错误密码 → 返回 401(已测试)
3. 连续失败 5 次 → 返回 429(已测试)
4. 单元测试全部通过(截图附后)

## 潜在影响
- 后续所有需要认证的接口需要加 auth middleware
- Redis 需要提前部署

Reviewer 应该检查什么

检查项说明
逻辑正确性代码是否解决了 PRD 描述的问题
测试覆盖关键路径有没有测试,边界情况有没有覆盖
安全问题SQL 注入、XSS、权限越界、敏感数据暴露
性能问题N+1 查询、不必要的循环、缺少索引
代码可读性命名是否清晰,逻辑是否容易理解
错误处理异常是否被妥善处理,错误信息是否友好
向后兼容对已有接口的改动是否破坏了现有功能

Review 礼仪

长任务的独立 Review Session

对于复杂功能(超过 3 天的任务),完成一个模块后,用一个全新的 AI session 做 code review,不用做开发的那个 session。同一个 session 的 AI 有"确认偏差"——它会倾向于认为它写的是对的。

Chapter 06

Git 工作流:提交是沟通,不是备份

commit 信息是写给人看的,不是写给自己看的。三个月后,你或者其他人需要通过 git log 理解这段历史。

分支命名

feature/[功能描述]     # 新功能
fix/[问题描述]         # bug 修复
refactor/[模块名]      # 重构
docs/[文档名]          # 文档更新
test/[测试描述]        # 测试相关

# 示例
feature/user-authentication
fix/shift-calculation-overflow
refactor/schedule-engine

Commit 信息规范

# 格式
[类型]: [简洁描述](不超过 50 字符)

[可选:详细说明,解释为什么这么做,不是做了什么]

[可选:关联 issue #编号]

# 类型
feat:     新功能
fix:      bug 修复
refactor: 重构(不改变功能)
test:     测试相关
docs:     文档
style:    格式调整(不影响逻辑)
chore:    工具、依赖、配置

# 好的示例
feat: add JWT authentication for login endpoint
fix: prevent account lockout bypass via timing attack
refactor: extract shift validation into separate service

# 坏的示例
fix bug
update
wip
123
改了一点东西

工作流程

  1. 从最新的 main 拉新分支
  2. 在分支上开发,小步提交(每个完整功能点提交一次)
  3. 推送前,本地跑一次完整测试
  4. 提 PR,填写描述,等待 review
  5. review 通过,squash merge 到 main
  6. 删除已合并的分支
禁止行为 直接 push 到 main 分支。force push 到已有 PR 的分支(会破坏 review 记录)。一个 commit 包含多个不相关的改动。
Chapter 07

质量标准:什么叫做好

"功能好像可以用了"不等于完成。以下是我们的完成标准。

完成的定义(Definition of Done) 代码写完 + 测试通过 + code review 通过 + 文档更新 + 没有已知 bug = 完成。
缺少任何一项,不算完成。

代码质量标准

标准要求
可读性另一个人不需要解释就能理解代码意图
命名变量、函数、类名清晰表达意图,不用缩写(除非是通用缩写如 id、url)
函数长度单个函数不超过 50 行。超过则拆分。
注释注释解释"为什么",不解释"做了什么"(代码本身应该说清楚做了什么)
错误处理所有异步操作有 try/catch;所有外部调用处理网络失败;用户不看到原始错误堆栈
数据验证所有外部输入在入口处验证,不信任任何来自前端或外部 API 的数据
日志关键操作有结构化日志;敏感数据不写入日志

性能要求

安全要求

Chapter 08

沟通规范:说清楚,不猜

模糊的沟通是效率最大的杀手。学会说清楚你的问题、你的进度、你的阻塞点。

提问的方式

不要这样问 "这个功能怎么做?"
"遇到了一个报错,怎么办?"
"这里有 bug,帮我看看。"
应该这样问 "我在实现 [功能名],目前 [已经做了什么],遇到了 [具体问题],我尝试了 [解法 A] 和 [解法 B],都不行,原因可能是 [我的判断]。请问 [具体问题]?"

提问前,先自己查 10 分钟。查过文档、查过 stackoverflow、试过 AI 帮助,还解决不了,再问人。

进度汇报规范

每天结束前同步进度(站会 / 飞书群),格式:

今天完成:[具体完成的任务]
明天计划:[明天要做的事]
阻塞:[有没有被卡住的地方,需要什么帮助]

阻塞点必须及时暴露,不要卡着不说,等到 deadline 才说"我被卡了好几天了"。

估时规范

Chapter 09

禁止清单:这些事绝对不做

行为原因
把 API key 或密码 commit 到代码仓库不可逆,即使删掉也在历史记录里
在没有测试的情况下上线生产没有测试 = 没有安全网
直接 push 到 main 分支跳过 review,破坏协作流程
把 AI 的输出直接提交,不读不验证AI 会自信地给出错误答案
需求不清就开始写代码"简单功能因为假设不对浪费的时间最多"
发现问题不说,等 deadline 才暴露越晚说代价越高
生产数据库直接执行未测试的 SQL不可逆,没有回滚
在循环里执行数据库查询N+1 问题,会把服务器打挂
用 console.log 调试后忘了清理生产日志污染,可能泄露数据
注释掉的代码不删,直接提交代码库垃圾,用 git 找历史
忽略 linting 报错每个警告都是潜在 bug 的预警
用中文命名变量和函数国际惯例,保持英文
Chapter 10

上线前检查清单

每次上线前,逐条检查,全部通过才能上线。

代码层

数据层

安全层

运维层


最后一句话 这份规范不是限制你的,是保护你的。
每一条规则背后都有真实的教训——代码审查救过上线故障,PRD 先行省过两周返工,grep 扫描找过漏掉的引用。

遵守规范不是因为被要求,而是因为它让你更快、出更少的错、和团队协作更顺。
规范是起点,不是终点。你有更好的建议,提出来,一起更新这份文档。

v1.0 · 2026-03 · Internal