七、上下文成本管理
你添加的每个功能都会消耗 Claude 的一些上下文。了解这些成本有助于你构建高效的设置。
7.1 各功能的上下文消耗
| 功能 | 何时加载 | 加载内容 | 上下文成本 |
|---|---|---|---|
| CLAUDE.md | 会话开始 | 完整内容 | 每个请求都占用 |
| Skills | 会话开始 + 使用时 | 启动时加载描述,使用时加载完整内容 | 低(仅描述占用)* |
| MCP | 会话开始 | 所有工具定义和架构 | 每个请求(但有工具搜索优化) |
| Hooks | 触发时 | 无(外部运行) | 零 |
* 使用 disable-model-invocation: true 的 Skills 在调用前成本为零。
7.2 省 Token 技巧
CLAUDE.md:
- ✅ 控制在 300-500 行以内
- ✅ 只放全局通用信息
- ✅ 详细文档放单独文件,CLAUDE.md 只放索引
- ❌ 不要放工作流(用 Skills)
- ❌ 不要放 API 文档(用 Skills)
Skills:
- ✅ 参考型 Skills 按需加载
- ✅ 操作型 Skills 用
disable-model-invocation: true - ✅ 详细文档放
references/目录 - ❌ 不要一个 Skill 塞 10 个任务
MCP:
- ✅ 按需接入,不用的断开
- ✅ 使用
/mcp查看每个 Server 的 token 成本 - ❌ 不要一次连 20 个 Server
Hooks:
- ✅ 零上下文成本,大胆使用
- ✅ 适合固定流程的自动化
7.3 功能加载时机
会话开始
↓
自动加载:CLAUDE.md(完整内容)
Skills(仅描述)
MCP(工具定义)
↓
执行任务
↓
按需加载:Skills(完整内容)
Skills references/(具体文档)
↓
事件触发
↓
自动执行:Hooks(外部运行,零成本)
关键洞察:
- CLAUDE.md 和 MCP 是” 重量级 ” 的( 始终占用上下文 )
- Skills 是 ” 轻量级 ” 的( 只加载描述,用时才加载内容 )
- Hooks 是 ” 零成本 ” 的( 完全外部运行 )
八、最佳实践清单
8.1 CLAUDE.md 最佳实践
✅ 推荐做法:
- 控制在 300-500 行以内,越短越好
- 遵循 WHY / WHAT / HOW 框架
- 只放全局通用的信息
- 善用层级机制:通用偏好放全局,项目规则放项目级
- 用单独文档做渐进式信息披露,CLAUDE.md 只放索引
- 手写,不要用
/init自动生成
❌ 常见错误:
- 把工作流程写进去( 应该用 Skills )
- 把 API 文档全粘进来( 应该放单独文档 )
- 把代码风格规则写进去( 交给 ESLint / Prettier )
- 写了 1000 行( 太多了 )
- 从不更新( 过时的信息比没有信息更糟 )
8.2 Skills 最佳实践
✅ 推荐做法:
- 单一职责,一个 Skill 只做一件事
description必须包含触发条件:” Use when user asks to… “- 步骤要具体可执行
- 详细文档放
references/目录 - 考虑异常路径和错误处理
- 用
kebab-case命名 - 操作型 Skills 使用
disable-model-invocation: true
❌ 常见错误:
- 一个 Skill 塞 10 个任务
- description 写得太模糊:” Helps with projects “
- 步骤写得太抽象:” 确保代码质量 “
- Skill 文件夹里放 README.md( 应该放 SKILL.md )
8.3 MCP 最佳实践
✅ 推荐做法:
- 按需接入,不用的断开
- 权限最小化
- 优先使用官方或社区维护的 Server
- 定期检查连接状态(
/mcp) - 查看每个 Server 的 token 成本
❌ 常见错误:
- 一次连 20 个 Server
- 不用 MCP,直接让 Agent 跑 shell 命令
- 给了过多权限
8.4 Hooks 最佳实践
✅ 推荐做法:
- 用于固定流程的自动化
- 格式化、测试、通知等确定性任务
- 零上下文成本,大胆使用
❌ 常见错误:
- 用 Hook 做需要判断的任务( 应该让 Agent 做 )
- 用 Hook 修复代码问题( 需要理解代码 )
8.5 常见误区对照表
| 误区 | 正确做法 |
|---|---|
| 把工作流写在 CLAUDE.md | 用 Skills |
| 一个 Skill 塞 10 个任务 | 拆分成多个 Skill |
| 不用 MCP,直接跑 shell | 用 MCP 获得结构化接口 |
| CLAUDE.md 写了 1000 行 | 精简到 500 行以内 |
| 把代码风格写进 CLAUDE.md | 交给 ESLint / Prettier / Biome |
| 用 Agent 做代码格式化 | 用 Hook + ESLint |
| Skills description 太模糊 | 包含具体触发词 |
| 从不更新 CLAUDE.md | 项目演进时同步更新 |
九、总结
用四句话记住这套体系:
- CLAUDE.md — 告诉 Agent ” 这是什么项目 “( 上下文 )
- Skills — 告诉 Agent ” 遇到 X 怎么做 “( 流程 )
- MCP — 让 Agent ” 能操作外部工具 “( 能力 )
- Hooks — 让固定流程 ” 自动执行 “( 自动化 )
它们不是互相替代的关系,而是协作关系。
- CLAUDE.md + Skills = 知识层( 告诉 Agent 怎么思考 )
- MCP + Hooks = 能力层( 让 Agent 能动手 )
与其每次对话都重复解释项目背景、手动指导操作步骤,不如花 30 分钟把这四样配好。
教会 Agent 一次,受益每一次。
参考资料
- Claude Code 官方文档 — 功能概览和使用指南( 中文 )
- CLAUDE.md 文档 — 如何编写项目上下文
- Skills 文档 — Skills 完整指南
- MCP 文档 — MCP 配置和使用
- Hooks 文档 — Hooks 事件和配置
- Model Context Protocol 官方网站 — MCP 协议规范与 Server 列表
- Writing a Good CLAUDE.md — HumanLayer 团队的深度分析
- Anthropic Skills 示例仓库 — 官方维护的 Skills 示例
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...