从约束中学习
上下文窗口:限制还是机会?
上下文窗口限制经常被视为 Claude Code 的一个"问题",但实际上,约束往往能激发更好的解决方案。学会在限制中工作,不仅能让你成为更好的 Claude Code 用户,也能让你成为更好的开发者。
理解上下文限制
什么是上下文窗口?
上下文窗口是 AI 模型能够"记住"和处理的信息量限制:
Claude 模型的上下文窗口:
- Claude Haiku: ~200K tokens
- Claude Sonnet: ~200K tokens
- Claude Opus: ~200K tokens
大约相当于:
- 150,000 个英文单词
- 300-500 页的文档
- 几万行代码
限制的表现形式
当接近上下文限制时,你会遇到:
# 常见症状
- 响应速度明显变慢
- Claude 开始"遗忘"早期的对话内容
- 处理大型项目时出现不一致的建议
- 复杂任务的执行出现偏差
约束驱动的优化策略
1. 信息密度最大化 📊
问题:想要把整个大型项目都塞进上下文 解决方案:提炼最关键的信息
# ❌ 低效的上下文使用
把所有源文件都包含进来:
- 包含了大量注释和空行
- 包含了测试文件和构建配置
- 包含了历史代码和废弃功能
# ✅ 高效的上下文使用
CLAUDE.md 精准描述:
## 核心架构
- 用户认证:JWT + Refresh Token
- 数据流:React → API → PostgreSQL
- 状态管理:Redux Toolkit
## 关键文件
- `src/auth/AuthService.ts` - 认证逻辑核心
- `src/api/userAPI.ts` - 用户相关API
- `src/components/UserProfile.tsx` - 用户界面
## 当前痛点
- 登录状态在刷新后丢失
- API 错误处理不统一
2. 分层思考模式 🏗️
将复杂问题分解为多个层次:
# 第一层:架构层面
> 设计用户认证系统的整体架构
# 第二层:模块层面
> 实现 JWT token 管理模块
# 第三层:功能层面
> 添加自动token刷新功能
# 第四层:细节层面
> 处理token过期的边界情况
3. 上下文轮换策略 🔄
# 阶段1:项目分析阶段
包含:项目结构、技术栈、主要组件
# 阶段2:功能开发阶段
包含:相关源文件、API文档、业务逻辑
# 阶段3:测试优化阶段
包含:实现代码、测试用例、性能数据
实际应用技巧
技巧 1:智能忽略文件 📁
创建 .claudeignore 文件:
# 构建产物
dist/
build/
*.min.js
# 依赖包
node_modules/
vendor/
# 日志和缓存
*.log
.cache/
.next/
# 测试 覆盖率报告
coverage/
# 不相关的配置
.vscode/
.idea/
*.config.js (除了关键配置)
技巧 2:上下文压缩技术 🗜️
# 使用代码摘要而非完整代码
> 这个函数的作用是验证用户token并返回用户信息,约50行代码,主要逻辑是解析JWT、验证签名、查询数据库
# 而不是粘贴全部50行代码
技巧 3:渐进式上下文建立 📈
# 第一轮对话:建立基础理解
> 这是一个React + Node.js的用户管理系统
# 第二轮:聚焦具体问题
> 用户登录后状态管理有问题,涉及redux store和localStorage
# 第三轮:深入技术细节
> 具体是token刷新逻辑,需要在axios拦截器中处理
约束催生的创新
创新 1:模块化思维
约束:不能一次性处理整个大型项目 创新:学会模块化思考和开发
# 传统方式:一次性重构整个系统
> 重构整个用户管理系统
# 约束下的方式:模块化重构
> 重构用户认证模块
> 重构用户资料模块
> 重构权限管理模块
创新 2:文档驱动开发
约束:上下文有限,需要高效传达项目信息 创新:更好的项目文档和代码组织
# 约束促进了更好的 CLAUDE.md
## 技术决策记录 (ADR)
### ADR-001: 选择 Redux Toolkit
**决策**:使用 RTK 而非 Context API
**原因**:复杂状态逻辑,需要时间旅行调试
**影响**:需要团队学习成本,但长期收益明显
## 代码模式
### 错误处理模式
所有 API 调用都使用统一的错误处理:
```typescript
try {
const result = await apiCall();
return { data: result, error: null };
} catch (error) {
return { data: null, error: error.message };
}
### 创新 3:高效沟通模式
**约束**:需要在有限的上下文中精确表达需求
**创新**:更清晰、更结构化的技术沟通
```bash
# ❌ 模糊的需求描述
> 用户登录有问题,修复一下
# ✅ 结构化的问题描述
> **问题**: 用户登录后刷新页面丢失登录状态
> **现象**: localStorage 中token存在,但Redux store为空
> **影响**: 用户需要重新登录,体验差
> **期望**: 页面刷新后自动恢复登录状态
> **相关文件**: AuthService.ts, store.ts, App.tsx
具体优化实践
实践 1:分阶段开发
# 阶段1:MVP验证(上下文利用率:60%)
> 实现最基本的用户注册登录功能
# 阶段2:功能增强(上下文利用率:80%)
> 添加用户资料编辑和头像上传
# 阶段3:体验优化(上下文利用率:90%)
> 实现自动登录和会话保持
实践 2:上下文快照
# 保存当前开发状态的快照
> 创建开发状态快照:当前实现了基础认证,正在开发权限系统,下一步是角色管理
# 在新对话中快速恢复上下文
> 基于之前的快照:[粘贴快照内容],继续开发角色权限功能
实践 3:关键信息提取
# 从大型日志中提取关键错误信息
> 服务器日志有3000行,关键错误是:
> - 15:32:41 ERROR: JWT验证失败 - token已过期
> - 15:32:42 ERROR: 数据库连接超时
> - 15:32:43 ERROR: 用户认证中间件异常
测量和监控
上下文使用效率指标
# 监控指标
- 对话长度 vs 问题解决率
- 上下文复用率(重复信息的比例)
- 任务完成的轮次数
- 错误修复的迭代次数
优化效果评估
# 优化前:
- 平均需要8轮对话完成一个功能
- 经常需要重新解释项目背景
- 40%的时间花在信息传递上
# 优化后:
- 平均4轮对话完成功能
- 很少需要重复解释背景
- 85%的时间用于实际问题解决
长期收益
1. 开发技能提升
约束训练让你学会:
- 精确表达需求 - 清晰描述问题和期望
- 系统性思考 - 分层次、模块化思考问题
- 高效协作 - 更好的技术沟通能力
- 架构意识 - 关注系统的整体设计
2. 项目质量改善
- 更好的文档 - CLAUDE.md 成为项目的核心文档
- 清晰的架构 - 模块化设计便于维护
- 一致的模式 - 统一的代码风格和错误处理
- 可持续发展 - 易于扩展和重构的代码结构
3. 团队协作优化
- 知识共享 - 结构化的项目文档便于新人理解
- 决策记录 - ADR帮助团队理解技术决策的演进
- 统一标准 - 团队成员都遵循相同的开发模式