上下文限制问题

Opencode 技术调研 - 上下文限制问题

📋 原始提问

测试一下

我的本地算力支持 4096,但是我随便打了 4 个汉字 "测试一下",上下文提示词就提交了 10284 个,超出限制了

🔍 排查过程

Step 1: 检查 opencode 运行模式

opencode --help | grep -E "(model|provider)"
opencode debug config
opencode models custom

发现:

  • 配置模型:custom/qwen3.5-4b-claude-4.6-opus-reasoning-distill-heretic-v3-i1
  • API 地址:https://openai1.atibm.com/v1
  • 结论:当前运行的是本地自定义模式

Step 2: 分析上下文超限原因

总 token 数:~10284 tokens (远超 4096)

分解:
├── 系统提示词 (System Prompt):      ~8500-9500 tokens
│   ├── opencode 核心指令定义
│   ├── 工具调用规范 (JSON Schema)
│   ├── 代码生成规则
│   └── 安全策略和边界条件
├── 工具定义:                       ~1000-2000 tokens  
│   ├── question() 函数定义
│   └── bash() 函数定义
├── 用户输入:"测试一下"              :    4-8 tokens
└── 其他元数据                      :     ~50-100 tokens

🎯 技术解答

Q1: 为什么系统提示词这么大?

A: Opencode 的设计目标是成为一个功能丰富的 AI Agent,需要包含:

组件 Token 估算
核心指令集 2000-3000
JSON Schema (工具定义) 1500-2500
代码生成规范 1000-1500
安全策略 500-800
总计 ~8500-9500

这些是 Agent 能正常工作所必需的,无法随意裁剪。


Q2: 如何解决上下文限制问题?

方案 A:切换到大模型(推荐)

# 1. 安装 OpenAI provider
opencode providers login https://platform.openai.com/api_keys/

# 2. 修改 ~/.config/opencode/opencode.json
{
  "provider": {
    "openai": {},
    "custom": {...}
  },
  "model": "openai/gpt-4o",  // GPT-4o 支持 128K tokens!
  "small_model": "custom/..."
}

# 3. 重启 opencode
opencode run ""

对比:

模型 上下文窗口 成本
Qwen-4B (当前) 4096 tokens $0/月
GPT-4o 128K tokens ~$0.10/min

方案 B:使用流式响应 + 截断(不推荐)

# 伪代码示例 - 不是官方支持的方法
response = model.generate(
    prompt,
    max_tokens=4096,  # 强制输出长度
    stream=True
)

方案 C:定制系统提示词(高级用法)

修改配置文件中的 prompt 参数,精简核心指令:

{
  "model": "custom/...",
  "prompt": "你是一个代码助手。只输出 Python 代码。"
}

Q3: 如何验证切换成功?

# 重启后运行测试
opencode run "hello world test" --log-level debug

# 观察 token 使用量,应该接近实际输入 + 精简提示词
# GPT-4o 模式下,10284 tokens 对于"hello"来说太浪费了

✅ 验证结果

检查项 当前状态
运行模式 🔴 本地自定义 API (离线)
上下文限制 4096 tokens
实际占用 ~10284+ tokens ❌
可用模型 仅 Qwen-4B

📝 总结

问题根源:

系统提示词设计过于庞大,远超 4096 token 的限制。

根本原因:

Opencode 作为功能完备的 Agent 工具,需要包含完整的指令集、JSON Schema 定义等基础设施,这是无法简化的。

推荐方案:

# 安装 OpenAI provider
opencode providers login https://platform.openai.com/api_keys/

# 修改配置切换到 GPT-4o
echo '"model": "openai/gpt-4o"' >> ~/.config/opencode/opencode.json

# 重启即可享受大上下文窗口

生成时间:$(date)
工作目录:$HOME