OpenCode 的上下文窗口决定了 AI "能记住多少"。巧妙管理上下文——压缩对话、优化 Token、使用 compact 命令——是让 AI 持续高效工作的关键技巧。
AI 模型的上下文窗口是有限的(通常 128K~1M tokens)。每次对话中,OpenCode 需要把:
全部塞进这个窗口。一旦溢出,就需要"压缩"或"裁剪"。
┌─────────────────────────────┐ │ 系统提示词 (~2K tokens) │ ├─────────────────────────────┤ │ 项目文件 (变量, 取决于项目) │ ├─────────────────────────────┤ │ 对话历史 (逐渐增长) │ ├─────────────────────────────┤ │ 工具输出 (每次调用增加) │ ├─────────────────────────────┤ │ 可用空间 → 越来越少 │ └─────────────────────────────┘
当对话太长时,使用 /compact 压缩上下文:
> /compact
OpenCode 会把当前对话的要点总结成一段简洁的摘要,丢弃冗长的中间过程,释放上下文空间。
// opencode.json
{
"context": {
"auto_compact": true,
"compact_threshold": 0.8,
"compact_keep": 10
}
}
{
"context": {
"compaction_strategy": "summary"
}
}
三种策略:
// opencode.json
{
"context": {
"max_tokens": 32000,
"max_lines": 20000,
"max_files": 100,
"max_file_size": 500000,
"ignore_patterns": [
"node_modules/",
"dist/",
".next/",
"*.lock",
"*.map",
".git/"
],
"include_summary": true,
"truncation_strategy": "smart"
}
}
| 参数 | 作用 | 建议值 |
|------|------|--------|
| max_tokens | 发送给模型的最大 token 数 | 16000~64000 |
| max_lines | 最大代码行数 | 15000~30000 |
| max_files | 最大文件数 | 50~200 |
| max_file_size | 单个文件最大字节数 | 500000 (500KB) |
| ignore_patterns | 不扫描的文件模式 | 见上 |
| include_summary | 超限时附目录摘要 | true |
| truncation_strategy | 超限裁剪策略 | smart |
| 策略 | 行为 | 适用场景 |
|------|------|----------|
| smart | 优先保留最近修改、关键路径文件 | 日常开发 |
| priority | 按文件优先级排序,丢弃低优 | 大型项目 |
| head | 保留文件头部(imports, 接口定义) | 了解项目结构 |
| tail | 保留文件尾部(当前编写位置) | 正在编辑文件 |
// opencode.json
{
"model": {
"temperature": 0.2,
"max_tokens": 8192,
"top_p": 0.95,
"frequency_penalty": 0.1,
"presence_penalty": 0
}
}
| 参数 | 范围 | 低值效果 | 高值效果 |
|------|------|---------|---------|
| temperature | 0~2 | 确定性输出,适合代码生成 | 创造性输出,适合头脑风暴 |
| max_tokens | 1~context_limit | 短回复,节省成本 | 长回复,适合生成完整文件 |
| top_p | 0~1 | 只选最可能的词 | 更多样化 |
| frequency_penalty | -2~2 | 允许重复 | 减少重复 |
| presence_penalty | -2~2 | 聚焦已有话题 | 鼓励新话题 |
// 代码生成(精确性优先)
{ "temperature": 0.1, "max_tokens": 8192 }
// 代码重构(需要一定创造力)
{ "temperature": 0.3, "max_tokens": 16384 }
// 头脑风暴/架构设计
{ "temperature": 0.7, "max_tokens": 32768 }
缩小文件范围:只看 src/services/ 而非整个项目
精确的 ignore_patterns:排除 *.generated.*, *.d.ts
用 AGENTS.md 代替每次贴规则:写好一次,每次复用
压缩后继续:长任务用 /compact 分段
分而治之:大需求拆成小任务,每个任务上下文更干净
# 开启 Token 统计 codex --stats "..." # 输出示例: # Tokens: 4,230 prompt + 1,850 completion = 6,080 total # Cost: $0.018 (GPT-4o)
在 opencode.json 中也可开启:
{
"stats": true
}
阶段1: codex "理解项目结构,总结关键模块" → /compact 阶段2: codex "设计新功能的数据模型" → /compact 阶段3: codex "实现新功能的 API 路由" → /compact 阶段4: codex "编写测试"
# 在新对话开始时,注入上一轮的结论 codex "上一轮我们确定了使用策略模式重构 UserService。 请基于这个方案开始实现。"
通过 AGENTS.md 告诉 Codex 哪些文件最重要:
## 上下文优先级 当上下文不足时,优先保留以下文件: 1. src/types/ —— 类型定义决定一切 2. src/config/ —— 运行时配置 3. AGENTS.md —— 项目约定 其他文件不重要时可以不加载。
上下文管理是 AI 编程的"内存管理"——配置好自动压缩、合理设置参数、善用 /compact,你就能让 OpenCode 在长任务中保持清醒和高效。