上一篇介绍了ECC的Memory系统。今天探索ECC的Context Window优化机制——让AI在有限的Token预算内理解更大的代码库。
无论你用哪个AI编码助手,都有一个硬限制:每次对话能处理的最大Token数。目前主流模型的上下文窗口从128K到2M不等,但实际使用中,Token成本和响应速度都与窗口大小正相关。ECC的Context优化机制就是解决"如何在有限窗口内塞进最有用的信息"。
ECC采用多层Context管理策略,按优先级从高到低排列:
这是最核心的层,包括:
这一层始终占据Context Window的核心位置,不会被压缩或裁剪。
ECC不会把整个Memory文件塞进上下文,而是智能提取与当前任务相关的部分:
# Context注入示例
## 当前任务:修改用户认证模块
# 相关Memory提取:
### 来自project.md
- 认证:使用Clerk(而非Supabase Auth)
- 所有API接口必须有Rate Limiting
### 来自tasks.md
- [ ] 实现用户导入功能(进行中)
### 来自domain.md
- "订单":包含主订单(Order)和子订单(OrderItem)
- 退款期限:支付后30天内可申请
这种"按需提取"的方式,让Memory占用从可能数千行降到几十行,大幅节省Token。
对于大型项目,ECC不会把所有文件内容都送进上下文,而是维护一个代码索引:
# 代码索引结构(自动生成)
src/
├── auth/
│ ├── login.ts # 用户登录, 45行, exports: handleLogin
│ ├── register.ts # 用户注册, 62行, exports: handleRegister
│ └── middleware.ts # 认证中间件, 38行, exports: requireAuth
├── orders/
│ ├── create.ts # 创建订单, 89行, exports: createOrder
│ └── list.ts # 订单列表, 34行, exports: listOrders
└── utils/
├── error.ts # 统一错误处理, 28行, exports: AppError
└── rate-limit.ts # 限流工具, 52行, exports: rateLimiter
当AI需要理解某个文件的具体实现时,再按需展开读取,而非一开始就加载全部。
随着对话变长,ECC会自动压缩早期对话内容:
ECC默认的Token预算分配(200K窗口为例):
| 层 | 预算 | 占比 |
|---|---|---|
| 当前任务 | 80K | 40% |
| 项目Memory | 30K | 15% |
| 代码索引+按需展开 | 50K | 25% |
| 历史对话 | 30K | 15% |
| 预留 | 10K | 5% |
# 告诉AI具体看哪个文件
"请根据 @src/auth/middleware.ts 的逻辑,修复 @src/orders/create.ts 中的权限问题"
使用@引用可以让ECC精准加载相关文件,避免全量扫描浪费Token。
如果某些规则在每个任务中都需要用到,写在Instinct中而不是每次手动说明。Instinct始终在Context的核心层,不额外消耗"临时"Token。
对于非常大的项目,可以按模块划分上下文:
# ecc.config.json 中的上下文配置
{
"context": {
"partition": true,
"modules": ["auth", "orders", "payments"],
"crossModuleReference": true
}
}
这样AI在处理auth模块时,不会加载orders和payments的完整内容,只在需要跨模块引用时按需加载。
下一篇我们将实战演练ECC的完整工作流,用ECC从零搭建一个真实项目。
评论区