2026-10-12 边界:此文原有身份、分工、环境与状态均为历史快照,不是现行职责或在线证明。现行资料见 全量审计与来源索引。

opencode 上下文成本 — 实测与优化方案

范围:opencode 每次 API 请求都会注入的内容到底多大、怎么压。面向所有 agent — 任何 harness 都有「常驻注入」这一项。 本文数字均为 2026-10-06 在 dlc 上实测/对官方 schema 核实;标注「已核实未启用」的方案故意没有实施,要用时照抄即可。

结论先行

opencode 每次请求的固定注入由四块组成,不只是 AGENTS.md。本机治理后:

注入项治理前治理后
AGENTS.md(Tier 0 热记忆)~24,589 token~2,115
skills 清单(name + description)~5,281~232
模型 / provider 目录未量(ollama 装着且 active → 被自动加载)未量
MCP 工具定义(dataPro + alens)未量未量

⚠️ 最容易被忽略的是 skills 清单:它和 AGENTS.md 一样每轮都注入。本机 26 个 skill 里 25 个是 arkcli-*,占 93%。

一、AGENTS.md 分层(已实施)

原文件 88KB / 56,696 字符 / 38 节,每轮固定 ~24.6k token,且没有任何预算上限 —— 这是膨胀的根因。

改成冷热两层:

  • Tier 0 = ~/.config/opencode/AGENTS.md:只放「不读也会踩」的东西 —— 用户偏好、杀进程铁律、禁扫目录、环境快照表、⏸️ 搁置清单、冷记忆索引表、维护纪律。
  • Tier 1 = ~/.config/opencode/mem/*.md:18 份情境性知识(手机串流 / 邮箱 / 网盘 / opencode / hermes / alens…),每份开头两行写「什么时候该读我」,用 grep -l 定位,按需 read,零常驻成本。
  • 正文逐字搬运,不概括不压缩,只换存放位置。备份 ~/backups/home-config/AGENTS.md.bak-20261006-prereshuffle。

关键纪律写进 Tier 0 自身:硬预算 ≤ 6,000 token,超了先精简禁止追加;单一真值源;写前 grep 去重;覆盖不并列;带日期 + last-verified;密钥只留位置(明文进 mem/SECRETS.md,600 权限)。

这与本库 MEMORY-FILTER-MECHANISM.md 的 L1–L5 是同一思路

该文件写「移出 L1:临时状态、旧环境特有、可重建信息」—— 端口列表、服务清单正属此类。层级名不同,判据一致。

代价是陈旧性:没有过期机制时,「hermes-gateway-soma 是 disabled」这种错标能活半年多(本机确实发生了,靠 2026-10-06 实测才发现)。所以加了 last-verified + 超期复核/归档。

二、skills 清单成本(已实施)

新增或删除 skill 前,先算 description 的 token

description 是持续每轮成本,不是一次性开销。本机 25 个 arkcli-* 的 description 平均 200+ token。

2026-10-06 用户停用火山 Agent Plan 订阅 → 25 个 arkcli skill 全部移出 ~/.config/opencode/skills/(含管理器清单 .arkcli-managed-skills.json,否则 arkcli 会以为还装着)。可逆备份:~/backups/home-config/removed-arkcli-skills-20261006/(1.5MB)。清理后清单成本 5,281 → 232。

保留 quarkclouddrive(官方 skill,用户在用)。

三、官方配置项(已对 2.0.23 schema 逐条核实 · 用户决定暂不启用)

核实方式:curl -s https://opencode.ai/config.json → $defs.Config.properties。本机这些键全部未设(即用默认值)。

键默认作用
compaction.prunefalse内置裁剪旧工具输出。社区 DCP 插件干的是它的超集,这是最省事的一刀
compaction.reserved10000压缩时预留的 token 缓冲
compaction.tail_turns / preserve_recent_tokens—压缩时逐字保留最近几个用户轮次 / 多少 token
tool_output.max_bytes51200超限则落盘、只回预览。调到 ~20000 能压住大段命令输出
tool_output.max_lines2000同上,调到 800–1000
small_model自动猜便宜模型标题生成等杂活单独走它;可指向免费模型省钱
enabled_providers全加载["openrouter"] → 其它 provider 全忽略
disabled_providers—黑名单形式,优先级高于上面
share"manual"设 "disabled" 彻底关掉会话分享(隐私)
watcher.ignore—glob 黑名单,屏蔽大目录的文件监听噪声
experimental.batch_tool—批量子命令,减少模型往返
subagent_depth1设 2 允许子 agent 再拉子 agent,设 0 禁止
snapshottrue关掉省磁盘(大仓库),但失去 agent 改动的 UI 回滚能力

⚠️ 别用 instructions 来省 token —— 它是把文件内容整份注入,与目的相反。

四、references 机制(可替代手写索引表 · 本机未用)

"references": { "mem": { "path": "~/.config/opencode/mem", "description": "冷记忆目录:查本机运维细节时读" } }
  • 官方原话:带 description 的 reference 只有「路径 + 描述」进系统提示,文件内容不注入。
  • 额外好处:TUI 里 @mem/ 自动补全(hidden: true 只藏补全、不影响 context);reference 目录自动放行外部目录 permission 边界,省掉越界询问。
  • 也支持 git 源:{"repository": "owner/repo", "branch": "main"}(异步 clone 到本地缓存)。
  • 权衡:省掉索引表的 ~700 token,但路由多一次 read INDEX.md。本机 2026-10-06 决定不改,保留手写索引表。

五、社区插件(npm 状态 2026-10-06 核实 · 均未安装)

插件版本 / 发布许可要点
@tarquinen/opencode-dcp3.2.0 · 2026-09-20AGPL-3.0动态上下文裁剪:模型自主 compress + 自动清理废弃工具输出;/dcp context(当前会话 token 分布 + 已省量)、/dcp stats(累计)、/dcp sweep(手动)。装法 opencode plugin @tarquinen/opencode-dcp@latest --global(2.0.23 确有 plugin 子命令)。周下载 2,096
opencode-mem2.29.0 · 2026-10-05MIT跨会话记忆插件:本地 embedding(首次从 HuggingFace 下模型)+ Web UI ${LOCALIP}:3765 + HTTP API + 3 层检索(search→timeline→fetch)。10 依赖。⚠️ 往每轮上下文注入记忆块;升级后清 ~/.cache/opencode/packages/opencode-mem@*
@ramtinJ95/opencode-tokenscope——token 分析器,/tokenscope 拆系统提示 / 用户消息 / 工具输出各项成本。它专门量 skills 清单的注入成本 —— 想量化而非估算就装它

⚠️ DCP 上游开发已转向 Sleev(本地代理,思路同源),插件仍可用但新功能先落在那边。 ⚠️ 社区 opencode-memory / opencode-mem 类插件有多个同名低星仓库(shuans/、yeyan00/、blackthornecl/、andy-zhangtao/),npm 的 opencode-mem(2.29.0)是其中本次评估选用的持续维护的。

六、已调研未采用

  • qqqide(GitHub gh555com/qqqide v0.4.13)—— 0 release、目标是 Windows 7–11 + macOS(Linux 仅构建宿主)、深度绑定作者自建服务端(cnk.gh555.com 等)。用户 2026-10-06 决定不装,克隆已删。
  • 其它 opencode 记忆插件(0 star 级)未评估;本机用「手写 Tier 0 + mem/ 目录」已够,成本为零。

关联