☰
给 Claude 定规则:用 CLAUDE.md 让 Claude Code 写出团队风格的代码
2026/9/27 17:18:51 网站建设 项目流程

1. 为什么 Claude Code 写出来的代码总像“外人”

团队里用 Claude Code 的人一多,问题就冒出来了:同一个项目,A 同事生成的代码用@Slf4j,B 同事生成的却用LoggerFactory.getLogger();有人抛BusinessException,有人直接throw new RuntimeException();变量命名一会儿驼峰一会儿下划线。代码能跑,但 review 的时候满屏都是风格问题,改起来比自己写还累。

这不是 Claude 能力不行,而是它默认按“全网代码的平均值”来写。训练数据里各种风格都有,你不告诉它你们团队的规矩,它就只能猜。猜对了是运气,猜错了是常态。

解决思路很直接:把团队编码规范写成 Claude Code 每次启动都会读的规则文件,也就是CLAUDE.md。它放在项目根目录,Claude Code 启动时自动加载,相当于给 AI 定了一份“家规”。规则写得越精确,生成代码的风格就越接近团队里老手的手笔。

这篇面向正在用 Claude Code 做团队协作的开发者,交付一套可复制的CLAUDE.md配置骨架、Plan Mode 的验证动作,以及规则写太粗导致失效的排查方法。如果你还没装 Claude Code,先跑一行命令:

npm install -g @anthropic-ai/claude-code

装完在项目目录下执行claude,它会自动读取项目结构,然后就能用自然语言对话了。接下来重点讲规则怎么定。

2. 前置准备:TaoToken 接入与 Claude Code 环境

Claude Code 要跑起来,得先解决模型调用的问题。我这边用的是 TaoToken 的 API 接入,官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。整个流程分三步:拿 Key、配环境变量、验证连通。

2.1 获取 API Key

登录后进入控制台,在 API Keys 页面创建一个新 Key。建议按项目或按人分配,方便后续排查用量。创建后立刻复制保存,页面刷新后就不再完整显示。

2.2 配置环境变量

Claude Code 通过环境变量读取 API 地址和 Key。在~/.bashrc或~/.zshrc里加上:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的Key"

改完执行source ~/.zshrc让配置生效。注意ANTHROPIC_BASE_URL不要带末尾斜杠,否则部分版本会拼接出双斜杠导致 404。

2.3 验证连通

在任意目录跑一次简单对话,确认 Key 和地址都对:

claude -p "回复 ok 两个字母即可"

返回ok就说明链路通了。如果报 401,检查 Key 是否复制完整;报连接超时,检查ANTHROPIC_BASE_URL是否写成了https://taotoken.net/api/(多了斜杠)。

提示:团队协作时,建议把 Key 放在共享的密钥管理工具里,不要直接提交到 Git 仓库。.env文件记得加进.gitignore。

3. 可复制的 CLAUDE.md 配置骨架

规则文件的核心原则是“精确到类名和方法签名”。模糊的“注意异常处理”等于没写,Claude 会按自己的理解来。下面这份骨架可以直接复制到项目根目录,按团队情况改。

3.1 基础骨架

# CLAUDE.md - 项目规则 ## 技术栈 - Java 17, Spring Boot 3.2.x - MyBatis-Plus 3.5.7, Sa-Token 1.38.x - Hutool 5.8.x, Lombok 1.18.30 ## 代码规范 - 类名 PascalCase, 方法/变量 camelCase, 常量 UPPER_SNAKE - 使用 @Slf4j 记录日志, 禁止 LoggerFactory.getLogger() - 业务异常抛 BusinessException(code, message) - Controller 返回 ResponseEntity, 统一用 BaseResponse 包装 - 所有 public 方法必须有 Javadoc - 对象拷贝使用 BeanUtil.copyProperties ## 目录结构 src/main/java/com/example/ ├── controller/ # REST 控制器 ├── service/ # 业务逻辑 (interface + impl) ├── mapper/ # MyBatis-Plus Mapper ├── entity/ # 数据库实体 ├── dto/ # 请求/响应对象 └── exception/ # 异常定义 ## 禁止 - 禁止硬编码敏感信息 - 禁止空 catch 块 - 禁止字符串拼接 SQL

这份骨架控制在 60 行左右,Claude 读取时不会因为太长而忽略后半部分。社区经验是把CLAUDE.md控制在 200 行以内,超出就拆到子规则文件。

3.2 分层规则管理

项目变大后,把所有规则塞进一个文件会失控。推荐拆成.claude/rules/目录:

项目根目录/ ├── CLAUDE.md # 核心规则 ├── .claude/ │ ├── rules/ │ │ ├── java.md # Java 领域规则 │ │ ├── test.md # 测试规范 │ │ └── security.md # 安全规则 │ └── settings.json # 权限、模型、沙箱配置

CLAUDE.md里用@引用:

## 代码规范 @rules/java.md @rules/test.md @rules/security.md

这样改 Java 规则不用动测试规范,团队成员也能按需加载。注意settings.json管的是“能做什么操作”(权限、沙箱),CLAUDE.md管的是“怎么写代码”,两者职责别混。

3.3 规则粒度对照

模糊写法精确写法效果差异
注意异常处理业务异常抛 BusinessException(code, message)前者加 try-catch 打印堆栈,后者抛具体异常
用日志使用 @Slf4j,禁止 LoggerFactory.getLogger()前者可能用 System.out,后者锁定注解
命名规范类名 PascalCase,方法 camelCase,常量 UPPER_SNAKE前者仍可能混用,后者可逐条核对
注意安全禁止字符串拼接 SQL,用 MyBatis-Plus 条件构造器前者可能忽略,后者直接约束写法

写规则时优先用正面指令。“业务异常必须抛 BusinessException”比“不要用 RuntimeException”遵守度更高,负面禁止有时反而让模型困惑。

4. 验证请求与 Plan Mode 实操

规则写好了,怎么确认它真的生效?两个动作:一次直接对话验证风格,一次 Plan Mode 验证方案。

4.1 直接对话验证

在项目目录下启动 Claude Code,给一个明确的小需求:

claude

然后输入:

在 UserService 里加一个 getUserById 方法,按 CLAUDE.md 的规范写

观察生成结果。如果规则生效,应该看到@Slf4j注解、BusinessException抛出、Javadoc 注释齐全。如果还是出现LoggerFactory.getLogger(),说明规则没被读到或写得不够精确。

4.2 Plan Mode 验证方案

需求不明确或涉及多个文件时,先用 Plan Mode。输入/plan后描述需求:

/plan 给项目加一套基于角色的权限校验,涉及 Controller 和 Service 层

Claude 会先分析现有代码结构,列出几种方案(比如注解式拦截 vs 手动校验),分析利弊后给出推荐方案和执行步骤。你确认方向没问题,再让它动手写代码。

我的经验是:超过 3 个文件需要修改的任务,先用 Plan Mode。不然 Claude 直接上手改,改到一半发现方向不对,整个上下文就废了,只能重开对话。

4.3 完整工作流

CLAUDE.md 加载规则 │ ▼ /init 读取项目结构 │ ▼ 需求明确? ──是──→ 直接对话,Claude 按规则改代码 │ 否 ▼ /plan 规划方案 → 你确认 → 执行 → Review

这个闭环跑顺后,Claude 生成的代码风格基本和团队老手一致,review 时不用再纠结格式问题。

5. 本篇常见错排查

规则不生效,通常不是 Claude 的问题,而是配置或写法出了偏差。下面几个坑我踩过。

5.1 规则文件没被读取

现象:生成的代码完全无视CLAUDE.md。排查顺序:确认文件在项目根目录(不是子目录);确认文件名大小写正确(CLAUDE.md不是claude.md);确认启动claude时的工作目录就是项目根目录。如果用了@rules/java.md引用,检查路径是否相对于项目根目录。

5.2 规则太笼统导致失效

现象:写了“注意异常处理”,Claude 还是抛RuntimeException。原因是“注意”这个词没有可执行边界。改成“业务异常抛 BusinessException(code, message),不允许 RuntimeException”,遵守度立刻提升。规则要写到类名和方法签名的粒度。

5.3 规则文件过长被截断

现象:前面的规则生效,后面的被忽略。CLAUDE.md超过 200 行后,模型可能只关注前半部分。解决办法是拆分到.claude/rules/目录,主文件只留核心规则和引用。

5.4 强制行为写错位置

现象:在CLAUDE.md里写“禁止生成 Co-Authored-By”,但提交时还是带上了。这类强制行为应该放到.claude/settings.json里配置,比如attribution.commit: "",从源头关掉。CLAUDE.md管代码风格,settings.json管操作约束。

5.5 API 报错排查

如果对话时报 401,检查ANTHROPIC_API_KEY是否完整;报 404,检查ANTHROPIC_BASE_URL是否多了末尾斜杠;报超时,检查网络和地址是否写成https://taotoken.net/api。这些配置问题在接入文档里有详细说明,遇到报错可以先对照排查。

6. 把规范固化进每次输出

给 Claude 定规则的核心就一条:把团队编码规范写成机器可读的精确指令。写到“用 @Slf4j,禁止 LoggerFactory.getLogger()”这个粒度,Claude 基本不会再出错。规则文件分层管理,核心规则控制在 200 行以内,领域规则拆到.claude/rules/,强制行为交给settings.json。

团队协作场景下,建议把CLAUDE.md纳入 code review 流程。每次 review 发现新共识,就同步更新到规则文件里。时间长了,这份文件就是团队编码规范的活文档,新成员入职看它也能快速对齐风格。

如果你还在选模型接入方式,可以先从模型对话页面试一下效果,确认链路通了再配到 Claude Code 里。长期做编码和 Agent 任务的团队,Coding Plan 的用量和成本更可控。API Key 的创建和管理在控制台的 API Keys 页面,接入细节可以对照接入文档操作。规则定好之后,Claude Code 写出的代码就像团队自己的人写的一样,review 效率会明显不一样。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询