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