Claude Code 在大型代码库里的工程实践

简介: Anthropic 发布Claude Code大型代码库最佳实践:强调“代码库需适配AI”,而非仅依赖模型。核心在于通过CLAUDE.md分层文档、LSP符号导航、hooks自动维护、skills按需加载、MCP接入内部系统等工程化配置,让Claude高效理解复杂项目(含C/C++/Java等)。配置即能力,治理与负责人机制同样关键。

前几天,Anthropic 发布了一篇面向工程团队的 Claude Code 最佳实践文章,重点讨论了在大型代码库中的使用方式。在今天这篇文章中,我们总结了这篇博客的实践内容,并顺便看看:大型团队真想把 AI 编程工具放进日常开发中,有哪些经验是可以直接借鉴的。

开始之前,先声明下“大型代码库”指的是什么。它不只是几百万行代码的 monorepo(单一代码库),还有维护了不知道多久的遗留系统、分布在若干个仓库的微服务架构,以及上述情况混在一起的更复杂的工程环境。

此外,提到 AI 编程语言不一定立马想到的编程语言,比如 C、C++、C#、Java、PHP,也在本次讨论的范围。

一句话总结

Claude Code 在大型代码库里的表现,不只取决于模型本身,还取决于代码库有没有被整理成“Claude 能看懂、能导航、能验证”的状态。

Claude Code 浏览大型代码库的方式

Claude Code 浏览代码库的方式,很像一个软件工程师平时读代码的姿势:先在文件系统中查找相关文件,读些代码,然后再用 grep 找到需要的信息,沿着函数调用、模块引用继续往下追代码逻辑。

和很多基于 RAG 的 AI 编程工具不太一样,Claude Code 是在本地环境直接读取和搜索代码,不用先把整个代码库做成索引,也不用把代码库上传到远程服务器。RAG 类编程工具往往会先给代码库构建索引,再根据问题检索相关片段。然而,大型工程团队的代码变化太快了,函数改名、模块删除…这些频繁的操作,让索引很容易跟当前代码库对不上。

Claude Code 采用 Agentic Search 来解决代码更新同步问题。简单来说,就是让 Agent 直接读取当前代码库,去找和任务相关的代码。这样就不用额外维护一套中心化索引,也避开了向量化流程跟不上代码变化的问题。

对每天都有大量代码提交的团队来说,这一点很关键:Claude Code 读取的是最新的代码库,而不是某个已经滞后的代码快照。与此同时,这种方式也有代价。Claude Code 并不是一开始就知道该从哪里理解这个项目。它需要一些初始化的上下文,比如哪些目录重要、入口文件在哪里、当前模块有什么约定、测试和构建命令怎么跑。

如果你让它在一个十亿行代码库里“找出所有类似模式”,但不给任何方向,它很快就会陷进大量无关信息里,耗完了上下文窗口,最后还不能解决真正的问题。因此,大型代码库想要用好 Claude Code,不能只是把任务丢给它,还要提前把代码库整理成 Claude Code 更容易导航的样子

这也说明了下文为什么会反复提到 CLAUDE.md、Skills、LSP、MCP 这些配置。它们本质上都在解决同一个问题:让 Claude Code 少走弯路,快速找到正确上下文。

和模型一样重要的 Harness

很多团队刚开始用 Claude Code 时,会先关注模型能力,比如 benchmark 和测试任务表现。但在真实环境里,模型之外的工程环境同样重要,这就是 Claude Code 依赖的 harness。它包括 CLAUDE.md、hooks、skills、plugins、MCP servers,以及 LSP 和 subagents。

这些模块不能简单地堆在一起,要先用 CLAUDE.md 整理好项目上下文,再用 hooks、skills、plugins 和 MCP 逐层扩展。基础上下文越清楚,后面的自动化、专门能力和内部系统接入,才越容易发挥作用。

CLAUDE.md:先说清楚基础上下文

CLAUDE.md 是 Claude 每次会话开始时会自动读取的上下文文件。一般来说,项目根目录下的 CLAUDE.md 负责说明整个项目的基本情况,像是项目结构、关键约定、容易踩坑的地方;子目录里的 CLAUDE.md 则更偏向说明当前模块,记录这个目录下的开发习惯、测试命令和本地规则。

CLAUDE.md 的作用很基础,但不能写成大杂烩。因为每次会话开始,Claude 都会读取这些内容。如果你什么都往里面塞,反而会占用上下文,拖慢 Claude 的判断。比较适合放进 CLAUDE.md 的信息,是那些不太会频繁变化、经常会用到、对大多数任务都有用的信息。

这有点像给新人写项目入门文档。根文档不需要变成一本百科全书,它只用告诉新人:这个项目大概怎么分层,哪些地方最容易踩坑,遇到问题应该先看哪里。子目录文档再补充更具体的模块规则。这样 Claude 进入一个代码库后,就不需要每次都从零开始摸索了。

Hooks:让配置自己变好

hooks 很容易被认为是“拦截错误操作”的脚本,用来拦截一些危险操作。其实,它最有价值的地方,是让 Claude Code 的配置可以持续更新。

像是会话结束后用 stop hook 总结哪些经验该补进 CLAUDE.md,或者是会话开始前用 start hook 自动加载团队或模块上下文,都是很好的工程实践。此外,对于 lint、format 这类固定检查,hooks 也比普通提示词可靠,因为它不是提醒 Claude“记得做”,而是直接把检查变成自动执行的流程。

Skills:按需加载专门知识

在大型代码库里,Claude Code 会遇到很多不同类型的任务。像是安全审查、文档更新、发布流程、支付服务部署、数据查询等等,这些任务都需要一些专门知识。但这些知识每次都塞进会话里的话,上下文很快就会变得很臃肿。

Skills 要解决的就是这个问题。它可以把某类任务需要的经验、流程和注意事项单独打包起来,等下次遇到相关任务时再加载。这样 Claude 既能用到专门知识,又不会让每次会话的上下文被无关信息占满。

Skills 还可以和具体目录绑定。例如,支付团队可以把部署相关的 skill 绑定到 payments 目录。这样,只有研发在这个目录下工作时,它才会自动生效;同时,在 monorepo 的其他模块进行开发,就不会受到这个 skill 的影响。

Plugins:把有效配置分发出去

在大团队里,经常会出现这种情况:某个小团队已经把 Claude Code 用顺了,但经验只留在自己内部。新人来了得重新摸索,其他团队也很难直接复用经验。

这时候,Plugins 就派上用场了。它可以把已经跑通的 skills、hooks、MCP 配置打包成一个可安装的插件。新人工程师装上之后,不需要从零配置,就能拿到一套已经验证过的上下文和能力。组织内部也可以通过统一的插件市场,分发和更新这些配置。

Anthropic 提到过一个例子:一家大型零售公司把 Claude 接到了内部分析平台上,让业务分析师可以在日常工作中直接拉取业务数据。后来,他们把这个能力做成 plugin,作为一套标准配置分发出去,方便大范围地推广使用。

LSP:Claude 按符号导航

LSP,全称 Language Server Protocol,是 IDE 用来理解代码结构的一套协议,很多“跳转到定义”“查找引用”能力都靠它实现。把 LSP 接给 Claude Code 后,Claude 就不只是按关键词搜代码,而是能按符号理解代码关系:从函数调用跳到定义,追踪引用,区分不同模块里的同名函数。

对大型代码库来说,LSP 很重要。没有它,Claude 很多时候只能靠文本匹配;一个普通函数名就可能搜出大量结果。得再筛一遍,才能知道哪些结果和任务有关。Anthropic 提到,有公司在推广 Claude Code 前会先部署 LSP,就是为了让 C、C++ 这类代码的导航更可靠。

MCP Servers:连接内部工具和数据

MCP servers 的作用,是让 Claude 接入代码库之外的内部工具和数据源,像是内部文档、工单系统、分析平台、搜索工具或业务 API。这样 Claude Code 处理业务时,除了看代码,还能查到相关文档、工单、数据和内部系统信息。有些团队把结构化搜索做成 MCP 工具的话,Claude 就可以直接调用了。

MCP 好用,但不适合一上来就做得很复杂。比较稳妥的做法,是先把 CLAUDE.md、hooks、skills 这些基础配置跑顺,再考虑接入内部文档、工单系统、分析平台这类外部系统。

Subagents:把探索和编辑拆开

Subagent 你可以理解为是一个单独拉出来的 Claude。它有自己的上下文窗口,可以先去完成一部分任务,比如阅读代码、梳理模块、分析某个子系统,然后只把最终结果交回给主 agent。

在大型代码库里,这个能力很适合把“看代码”和“改代码”分开。先让一个只读 subagent 去摸清某个子系统,把发现的信息整理成文档;主 agent 再根据这份结果,去做实际修改。

这样主 agent 就不用把所有探索过程都装进自己的上下文,把空间留给真正要改的代码和关键决策。

图注:Claude Code 扩展能力一览

这张图表总结了 Claude Code 扩展层的几个组成部分:

这里要注意,LSP 是通过 plugin 层访问的;subagents 是一种任务委派能力,而不是一个需要像其他扩展点那样配置的组件。

三种成功的配置模式

Anthropic 说,大型代码库应该怎么配置 Claude Code,取决于这个代码库本身的结构。他们在多个成功部署案例里,看到了三个反复出现的模式。

让代码库在变大之后依然好找

Claude 能不能快速找到正确上下文,决定了 Claude 在大型代码库里能不能帮上忙。上下文给太多,会拖慢会话;给太少,它又不知道该从哪里开始理解项目。

所以,好的配置不是把所有信息都塞给 Claude,而是让代码库本身更容易被它读懂。这里有几个比较关键的做法:

  • CLAUDE.md 要轻量、分层。根目录的 CLAUDE.md 只放项目结构、关键约定和容易踩坑的地方;子目录里的 CLAUDE.md 再补充当前模块的本地规则。根文件不要写成百科全书,信息太多反而会变成噪音。

  • 尽量从相关子目录启动,而不是总从 repo 根目录开始。Claude 会自动向上查找并加载路径上的 CLAUDE.md,所以根目录上下文不会丢。实际使用时,从任务相关的子目录启动,反而能减少无关文件和配置的干扰。

  • 测试、lint、build 命令也要按目录写清楚。如果 Claude 只改了一个服务,却每次都跑全量测试,很容易超时,还会把无关输出塞进上下文。比较好的方式,是在对应子目录里写明这个模块该跑哪些测试、lint 和构建命令。

  • 用 ignore 规则减少噪音。生成文件、构建产物、第三方代码,不应该让 Claude 反复读。把这些排除规则放进项目配置里,团队成员就能共享同一套降噪方式。

  • 目录结构不清楚时,可以准备一份代码库地图。在根目录放一个简单的 markdown 文件,列出主要目录分别负责什么。对 Claude 来说,这相当于一张目录页,可以先帮它判断应该从哪里看起。

  • 大型代码库最好接入 LSP。它能让 Claude 按符号找定义和引用,先过滤掉大量无关匹配,再去读真正相关的代码。对多语言代码库,尤其是 C、C++ 这类项目,推荐 LSP。

总的来说,这一部分的重点是不要让 Claude 在大型代码库里盲搜。先把上下文、目录边界、测试命令、忽略规则和符号导航整理好,它才能更容易地找到正确位置。

主动维护 CLAUDE.md

CLAUDE.md 不是写完就放着不管的。

模型会持续变强,过去为了约束旧模型写下的规则,到了新模型上,可能会变成限制。早期模型做大型重构时容易跑偏,技术团队可能会在 CLAUDE.md 里写了一条规则:每次重构只改一个文件。这个规则在当时是有用的,但如果新模型已经能稳定处理跨文件修改,它就会反过来束缚 Claude 的能力。

Skills 和 hooks 也一样。很多配置一开始是为了解决某个具体问题:模型能力不够,或是 Claude Code 当时还不支持某个功能。一旦这些限制被新模型或新版本工具解决了,原来的配置就会变得多余,成为性能的负担。

Anthropic 提到过 Perforce 例子:有团队以前会用 hook 处理文件写入,确保 Claude 修改文件前先执行 p4 edit。后来 Claude Code 支持了原生 Perforce mode,这个 hook 就不需要再保留了。

因此,Claude Code 的配置要定期 review。比较合理的节奏是每三到六个月检查一次,尤其是大模型版本更新之后。如果团队发现 Claude Code 的表现进入瓶颈,也可以检查一下:是不是旧的 CLAUDE.md 规则、hooks 或 skills,已经不再适合当前模型了。

给 Claude Code 指派负责人

技术配置做好了,不代表团队就会自然用起来。Claude Code 要在组织里真正推广,还需要有人把基础环境搭建好。

比较推荐的做法,是在大规模开放之前,先由一个小团队,甚至一个负责人,把 CLAUDE.md、plugins、MCP、权限策略这些基础配置跑通。这样,后面的人接触 Claude Code 时,就有了一套已经能工作的环境,而不是自己从零摸索、到处踩坑。

这类搭建工作一般会放在开发者体验或研发效能团队下面,因为它本来就和开发者工具、工程效率、新人上手有关。有些组织里,也开始出现类似 Agent 负责人的角色,专门维护 Claude Code 的配置、插件和使用规范。如果没有专门团队,至少也要明确一个负责人。这个人要能决定 Claude Code 的设置、权限策略、插件市场和 CLAUDE.md 规范,也要负责持续维护这些配置。

自下而上的使用热情很重要,但如果没人把有效经验沉淀下来,很容易变成各个团队各配各的、各踩各的坑。最后,好经验只留在小圈子里,整个团队的使用也很难继续往前推进。

在大型组织里,还要尽早考虑治理问题:哪些 skills 和 plugins 可以用,AI 生成代码要走什么 review 流程,怎么避免不同团队重复造同一套配置。比较稳妥的方式,是先从一组经过批准的 skills、明确的代码审查流程和有限范围试点开始,再逐步扩大。

说到底,Claude Code 的推广不只是工具问题,也是一件工程组织问题。配置、权限、流程和责任人都明确了,开发者才更容易把它真正用进日常工作里。

如何应用

这里需要提醒一点,上面这些经验主要适用于比较常规的软件工程环境。就是说,代码主要由工程师维护,仓库使用 Git,目录结构相对标准。大多数大型代码库都属于这个范围。

但如果工程环境比较特殊,就需要额外调整。像是游戏引擎项目有着大量二进制资产,团队使用的是非 Git 版本控制,或者有很多非工程师也会参与代码修改。这些场景下,Claude Code 的配置方式就不能直接照搬上文了。

虽然本文给了些通用模版,但真正落到团队里,还是要结合自己的代码库结构、工具链和组织流程来判断:哪些先做,哪些后做,哪些根本没必要做。

小结

这篇文章的价值,更多在于把“AI 编程工具怎么进团队”这件事讲清楚了。

它没有把问题简单归结为模型能力,而是回到工程现场:代码库怎么组织、上下文怎么管理、规则怎么执行、经验怎么复用。

对团队来说,这可能比某个单点技巧更值得参考。

相关文章
|
5天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
2627 9
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
13天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3442 12
|
16天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3518 25
|
9天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2642 6
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
7天前
|
人工智能 自然语言处理 供应链
|
7天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
1202 3
|
28天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23611 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」

热门文章

最新文章