跳到主要内容

从约束中学习

上下文窗口:限制还是机会?

上下文窗口限制经常被视为 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帮助团队理解技术决策的演进
  • 统一标准 - 团队成员都遵循相同的开发模式

最佳实践总结

✅ 拥抱约束

  1. 将限制视为创新机会 - 约束激发更好的解决方案
  2. 优化信息密度 - 传达最有价值的信息
  3. 分阶段思考 - 将复杂问题分解为可管理的部分
  4. 建立标准模式 - 制定可复用的解决方案模板

❌ 避免的陷阱

  1. 信息过载 - 试图在一次对话中解决所有问题
  2. 重复工作 - 每次都从零开始解释项目背景
  3. 缺乏结构 - 混乱的信息组织方式
  4. 忽视文档 - 不维护项目的知识库

记住:最好的开发者不是那些有无限资源的人,而是那些能在约束中找到最优解的人。上下文限制不是障碍,而是让你成为更好开发者的训练场。

继续探索:上下文检查 - 学习如何监控和分析上下文使用情况。