如果你持续关注 AI 编程工具,大概率已经看到了这个有点“反直觉”的消息:Claude Code 的核心维护者在一次更新里,大幅精简了系统提示词,据社区讨论,删减比例接近 80%。
这听起来很矛盾。我们一直以为,给模型的指令越详细、越完备,它的表现就越稳定。过去一年里,各种“千行提示词工程”模板满天飞,现在造工具的人却反过来做减法,而且效果似乎更好了。这不是一次简单的代码优化,它可能意味着 2026 年上下文工程的核心规则已经变了:从“往上下文里塞更多指令”,变成“让上下文中的每一条信息都产生确定性价值”。
这篇文章我想和你认真聊聊几件事:为什么负责维护 Claude Code 的人敢这么删;这个动作背后,系统提示词、CLAUDE.md、Skills、MCP 这些上下文载体各自承担了什么角色;以及作为普通开发者,我们应该怎样调整自己的提示词习惯和工程配置,才能真正跟上这轮变化。文章会包含 Claude Code 的安装、配置、模型接入和常见报错排查,适合正在把 AI 编程助手当作日常生产力工具的开发者阅读。
1. 被删掉的 80%,删的是什么
先说一个基本判断:这次删减不是“把规则文本删掉”,而是“把规则从提示词里抽走,放到更合适的位置”。
在传统的大模型应用里,系统提示词承担了大量职责:角色设定、任务边界、输出格式、工具调用说明、安全约束、失败处理…… 内容越堆越多,模型的输入长度被占掉一大块,但真正执行时,很多长尾指令根本不会被触发。更麻烦的是,系统提示词里的每一条都会参与注意力计算,指令越多,模型越容易“分心”。
Claude Code 的做法,是把那些“过去写在提示词里、但只在特定时刻才需要”的知识,转移到了其他机制中:
- 角色和互动规则保留在精简后的系统提示词里;
- 项目约定、代码规范、行为偏好下沉到
CLAUDE.md,按项目目录动态加载; - 可复用的领域能力封装成 Skill,由模型按需读取;
- 外部工具和数据源通过 MCP(Model Context Protocol)接入,不再在提示词里硬编码工具描述。
这个变化对应的正是上下文工程的新思路:系统提示词负责“稳定”,项目上下文负责“具体”,技能封装负责“复用”,工具协议负责“连接”。如果所有东西都塞进系统提示词,就等于让模型每次都背着整个工具箱出门,效率一定低。
从技术演进的角度看,这其实是一次分工重构。过去我们追求“一个提示词覆盖所有场景”,现在优秀实践是“按需加载,最小化常驻指令”。谁先适应这种变化,谁就能在同样的模型能力下获得更稳定的输出质量。
2. 系统提示词为什么不能无限膨胀
很多人容易把系统提示词当成“万能控制台”,觉得写得越细,模型就越听话。但真实情况要复杂得多。
大语言模型的输入长度有限,即使支持长上下文,也并不意味着“塞得越多,效果越好”。当系统提示词过长时,会出现几类典型问题:
第一,注意力稀释。Transformer 的注意力机制会平等看待输入里的大部分内容,提示词里 80% 的冗余指令会抢占模型对用户核心请求的注意力权重。指令越多,模型越容易忽略关键约束。
第二,矛盾累积。上千行的提示词里,前后文难免产生约束冲突。比如前面说“不要推测信息”,后面又写了大量带推测性质的示例,模型会变得无所适从。
第三,调试成本爆炸。如果你的系统提示词里有 200 条规则,当一次输出不符合预期时,你根本不知道是哪一条规则起了反作用。上下文工程最讲究可控性,而堆砌提示词是最不可控的做法。
从官方对 Claude Code 的持续更新中可以看出,维护团队一直在做“减法”:把输出格式改成更结构化、把可配置行为收敛到配置文件和命令参数、把长文档变成按需检索的参考材料。这套做法的核心逻辑是:不是模型读不懂长指令,而是长指令会降低模型在关键任务上的判断准确率。
对我们写提示词的启发很直接:常驻指令只保留高频、通用、不可妥协的部分;低频但重要的内容,放到按需加载的上下文里;能被工具或代码强制保证的事情,不要依赖模型的自觉。
3. 上下文工程的三个层次:上下文、技能与协议
理解了“为什么删”,我们再来看“删完之后靠什么撑住效果”。这里我把它拆成三个层次。
3.1 项目上下文层:CLAUDE.md 与 Memory
CLAUDE.md是 Claude Code 在项目根目录下识别的说明文件,相当于项目的“长期记忆”。它和系统提示词最大的区别在于作用域:系统提示词全局生效,而CLAUDE.md只在当前项目内加载。
这带来一个非常实用的能力:你可以把不同项目的技术栈、启动命令、代码规范、避坑经验分别写进各自的CLAUDE.md,互不干扰。模型进入项目时会自动读取,相当于每次开工前先看一遍你的项目文档。
# 文件路径:/path/to/your-project/CLAUDE.md ## 技术栈 - 后端:Spring Boot 3.x,Java 17 - 前端:Vue 3 + Vite - 数据库:PostgreSQL 15 ## 常用命令 - 本地启动后端:./mvnw spring-boot:run - 本地启动前端:npm run dev - 运行测试:./mvnw test ## 项目约定 - Controller 层只做参数校验和结果封装,不写业务逻辑 - 数据库变更必须提供增量 SQL 脚本,禁止手动改生产库 - 对外接口统一返回 Result<T> 结构 ## 避坑记录 - 本地连数据库使用 dev 配置,不要用 application-prod.yml - 修改实体类后必须执行 generate 任务重新生成 mapper# 新增 Claude Code 对项目的记忆文件 # 在项目根目录创建后,下次进入项目即可自动加载 touch CLAUDE.md这个文件的更新频率不需要高,但它直接影响模型在项目里的“默认行为”。建议重点记录三类内容:不会经常变的项目事实、容易踩坑的工程约束、团队约定俗成的规范。
3.2 技能层:Skills
Skills 是 Claude Code 中更模块化的一种能力扩展。简单说,它把某类任务需要的完整知识封装成一个独立的 Skill,每个 Skill 有独立的说明文件和示例。模型判断当前任务匹配到某个 Skill 时,才去读取它的详细内容。
/path/to/your-project/.claude/skills/review-code/ ├── SKILL.md # 技能说明、触发条件、使用流程 └── examples/ └── review-example.md # 典型示例# 文件路径:/path/to/your-project/.claude/skills/review-code/SKILL.md --- name: review-code description: 当用户要求做代码审查、质量评审、安全隐患检查时使用 --- # 代码审查 Skill ## 审查流程 1. 先梳理本次变更涉及的模块和数据流 2. 按优先级检查:正确性 -> 安全性 -> 性能 -> 可维护性 3. 每个问题标注严重级别和建议修复方案 ## 重点关注 - SQL 注入、SSRF、任意文件读写等安全问题 - 事务边界是否合理,异常是否会被吞掉 - 是否存在 N+1 查询、大对象加载等性能隐患有了 Skills 之后,那些“特定领域才用得上”的能力就不再需要写进全局提示词。这让 Claude Code 的系统提示词能保持精简,同时又不牺牲复杂任务的处理能力。对开发者来说,这也意味着你可以把团队内部的经验封装成可共享的技能包,而不是复制粘贴到每个项目的提示词里。
3.3 协议层:MCP 与外部工具
MCP(Model Context Protocol)解决的是“模型如何访问外部工具和数据”的问题。过去工具调用方式不一,每次接入新工具都要在提示词里写清楚调用规则和参数格式。有了 MCP 后,工具以标准协议暴露能力,模型通过客户端动态发现并调用。
{ "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_PERSONAL_TOKEN": "<your-token>" } }, "database": { "command": "npx", "args": ["-y", "@your-org/mcp-server-postgres"], "env": { "PG_CONNECTION_STRING": "postgresql://user:pass@localhost:5432/demo" } } } }# 在 Claude Code 中查看当前已连接的 MCP 服务 claude mcp list值得一提的是,MCP 配置文件中通常包含 token、连接串等敏感信息,建议通过环境变量引用,并且不要提交到公共仓库。使用第三方 MCP Server 前,最好先审查它的源码和权限范围,避免工具本身成为攻击入口。
这三层机制合在一起,构成了“精简系统提示词”的底气。系统提示词只保留最核心的对话规则,项目事实交给CLAUDE.md,领域能力交给 Skills,外部数据交给 MCP。每个模块各司其职,才能既保持轻量,又足够强大。
4. Claude Code 环境准备与安装配置
理解了上下文工程的变化,接下来我们把 Claude Code 跑起来,用实际配置验证上面的思路。
4.1 安装 CLI
Claude Code 目前以命令行工具为主,也支持通过 VSCode 扩展使用。安装前建议先确认 Node.js 环境版本满足要求,具体版本以官方文档为准。下面是一个通用安装流程:
# 检查 Node.js 版本 node -v npm -v # 全局安装 Claude Code CLI npm install -g @anthropic-ai/claude-code # 确认安装结果 claude --version# 如果遇到权限错误,尝试修复 npm 全局目录权限后再安装 npm config get prefix # 不建议直接使用 sudo 改全局权限,优先修复用户目录权限安装完成后,第一次运行claude会进入认证流程。根据终端提示完成登录或配置 API Key 即可。如果你是在团队协作环境或 CI 中使用,通常会走 API Key 方式,注意把密钥保存到安全的环境变量中。
4.2 VSCode 扩展方式
很多开发者习惯在编辑器里直接使用 AI 编程助手。Claude Code 也提供 VSCode 扩展,安装后可以在编辑器底部或侧边栏直接开对话。
# 在 VSCode 扩展面板搜索 Claude Code 并安装 # 或者使用命令行安装扩展 code --install-extension anthropic.claude-code// 文件路径:.vscode/settings.json { "claude-code.enable": true, "claude-code.autoLoadCLAUDE.md": true, "claude-code.includeProjectMemory": true }安装之后,打开一个项目目录,扩展会自动识别项目中的CLAUDE.md和.claude/skills目录。需要注意的是,不同版本的 VSCode 扩展可能使用不同的配置字段,如果某个配置项不生效,优先查看对应版本的文档,不要照抄旧教程。
5. 模型接入与第三方模型配置
Claude Code 默认使用官方模型,但社区里也有不少开发者尝试接入其他模型或自建模型网关。这里有一个非常常见的报错,值得单独说明。
有用户在配置自定义模型时遇到类似这样的提示:
deepseek-v4-pro is not a model this version of claude code recognizes这个报错的意思是:当前 Claude Code 版本无法识别配置中的模型名称。原因通常是以下几种:
- 模型名称拼写错误或版本号不匹配;
- 当前 Claude Code 版本尚未支持该模型;
- 配置的自定义模型 Endpoint 返回的模型 ID 和配置不一致。
# 查看当前 Claude Code 支持的模型列表 claude models list # 查看当前使用的模型配置 claude config list// 配置文件示例:~/.claude/settings.json { "env": { "ANTHROPIC_BASE_URL": "https://your-model-gateway.example.com", "ANTHROPIC_AUTH_TOKEN": "<your-token>" }, "model": "your-expected-model-id" }排查建议:先确认识别不到的模型名是否写错了;再确认模型网关返回的模型 ID 是否与配置一致;最后检查 Claude Code 版本是否需要更新。需要提醒的是,不要因为追求“免费模型”而随意使用非官方插件或脚本绕过认证,这既可能违反服务条款,也可能引入安全风险。
社区中也有配置切换工具,用来在多个模型服务商之间快速切换配置。这类工具能提升效率,但使用前一定要确认其来源、代码质量和权限要求,不要随意填入主账号密钥。
6. 一个完整示例:从项目初始化到配置落地
为了让你更直观地看到“精简系统提示词 + 项目上下文 + 技能”的组合用法,我构造一个最小可复现的 Python Web API 项目,演示完整流程。
6.1 项目初始化
mkdir claude-context-demo cd claude-context-demo python3 -m venv venv source venv/bin/activate pip install fastapi uvicorn httpx6.2 编写项目文件
# 文件路径:main.py from fastapi import FastAPI app = FastAPI(title="Context Demo") @app.get("/ping") def ping(): return {"message": "pong"}# 文件路径:CLAUDE.md ## 技术栈 - FastAPI + Uvicorn,Python 3.11+ ## 运行方式 - 启动服务:uvicorn main:app --reload --port 8000 - 请求接口:curl http://localhost:8000/ping ## 约定 - 新接口必须使用 Pydantic 模型接收请求体 - 所有接口返回 JSON 格式6.3 定义团队技能
# 文件路径:.claude/skills/add-api/SKILL.md --- name: add-api description: 当用户要求新增一个 HTTP API 接口时使用 --- # 新增 API 接口 ## 步骤 1. 在 main.py 中添加路由函数 2. 使用 Pydantic 定义请求和响应模型 3. 补充错误处理,统一返回错误码 4. 启动服务并用 curl 验证 ## 示例 参见 examples/add-user-example.md6.4 运行与验证
# 启动服务 uvicorn main:app --reload --port 8000# 另一个终端验证接口 curl http://localhost:8000/ping预期输出:
{"message":"pong"}这个示例虽然简单,但它完整展示了三层上下文的配合:项目事实在CLAUDE.md中,领域步骤在 Skills 中,模型只需要根据当前请求动态加载对应知识。你可以在这个基础上让模型帮你新增带数据库操作的接口,检验它是否遵守了CLAUDE.md和 Skills 里的约定。
7. 常见问题与排查思路
Claude Code 使用过程中,除了模型识别问题,还有几类高频报错,这里整理成一张排查表。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
安装后claude命令找不到 | npm 全局目录不在 PATH 中 | 执行npm config get prefix查看全局安装路径 | 将全局 bin 目录加入 PATH |
启动时提示process exited with code 3 | 依赖版本冲突或运行时环境不完整 | 查看错误日志中的堆栈信息,检查 Node.js 版本 | 更新 Node.js 或重装 Claude Code 依赖 |
进入后提示organization has disabled claude subscription access | 企业订阅策略限制 Claude Code 使用 | 联系组织管理员确认订阅策略 | 使用个人订阅或按管理员要求开通权限 |
| 自定义模型不被识别 | 模型名称、版本号或网关配置不匹配 | 执行claude models list查看支持列表 | 修改配置中的模型 ID,确保与网关返回一致 |
CLAUDE.md内容不生效 | 目录层级不对或未保存为 UTF-8 | 确认文件位于项目根目录,且编码正确 | 重新放置文件,重启 Claude Code 会话 |
| VSCode 扩展无法连接 | 扩展未配置认证信息 | 在终端先运行一次claude完成认证 | 重新登录或配置 API Key 后重启扩展 |
# 通过日志定位问题 # Claude Code 的日志通常放在用户目录下 tail -f ~/.claude/logs/*.log # 查看版本与运行环境信息 claude doctor遇到报错时,第一步永远是看日志,第二步是检查版本兼容性,第三步才是搜索社区方案。不要一上来就禁用安全策略或修改配置文件的权限,那样可能掩盖真正的问题,甚至带来安全隐患。
8. 上下文工程的最佳实践与工程建议
说了这么多,真正能落到团队工程实践里的建议是什么?我总结了下面几条。
8.1 系统提示词保持精简
无论是用 Claude Code 还是其他 AI 编程工具,系统提示词都应该尽量精简,只保留那些“任何任务都需要”的约束。具体任务相关的指令,放到项目文档或技能文件中。判断标准很简单:如果这条指令只在某类任务中才用到,它就不应该常驻在系统提示词里。
8.2 CLAUDE.md 是团队资产
CLAUDE.md的价值在于团队共享。建议把它纳入代码评审范围,每次修改都要像改架构文档一样慎重。内容要稳定,不要写“今天临时用一下”的命令,也不要写个人偏好。可以用“技术栈”、“常用命令”、“项目约定”、“避坑记录”的结构组织,方便模型检索。
8.3 Skills 按场景封装
如果团队经常重复某类复杂任务,就值得把它封装成 Skill。比如“接口开发规范”、“数据库迁移规范”、“代码审查清单”,都可以做成 Skill。这样既减少提示词里的软约束,也让模型在需要时能读取到完整的执行步骤。
8.4 安全边界和权限控制
Claude Code 拥有执行终端命令、读写文件的能力,使用时要遵循最小权限原则:
- 别在全局配置里存放高权限密钥;
- 对 MCP 服务与第三方工具做来源审查;
- 涉及生产环境的变更,必须走人工审批流程;
- 定期检查 Claude Code 的会话日志,确认没有意外的敏感操作。
# 查看当前 Claude Code 配置中的环境变量 claude config list # 确认没有把生产环境密钥写到全局配置中 cat ~/.claude/settings.json8.5 配套管理工具的使用
社区中常见的配置切换工具有助于管理多套模型或服务商配置,但使用前需要确认三点:源码是否公开、权限是否最小、密钥是否加密存储。不要为了省事而把所有账号信息明文保存在配置文件里。
9. 下一步怎么实践
如果你想切换到自己项目里验证这套“精简提示词”的思路,我建议按下面的顺序操作:
- 安装 Claude Code,并完成认证。
- 从一个简单的项目开始,编写精简的
CLAUDE.md,把项目最核心的事实写清楚。 - 跑几个典型任务,观察模型是否自动遵守项目约定。
- 遇到重复出现的复杂任务时,尝试封装成 Skill。
- 定期复盘
CLAUDE.md和 Skill 的实际触发率,删掉那些“写了但从来不会被用到”的内容。
当你开始做第五步时,其实就是在复现 Claude Code 维护者做的那件事:不是把提示词越长越好,而是让每一段上下文都有明确的用途和加载时机。能把不必要的指令删掉,才说明你真的理解了上下文工程。
AI 编程工具的演进速度很快,今天的最佳实践可能半年后就会被新机制取代。但“上下文是稀缺资源,要按需加载”这个原则,大概率会持续很长时间。希望这篇文章能帮你建立一个新的判断框架,在下一轮工具更新到来时,不用再追着教程跑。