Skip to content

Agent token 量级与预算取值建议(2026 下半年) ​

观测日 2026-09-24|本机实测 + 官方价目表交叉核对|面向本仓库(sjtu-agent)的取值建议 证据分级:[实测] 本机数据/本次测量;[官方] 厂商官方页面;[外部] 第三方实测或社区报告;[建议] 我的取值主张 配套材料:各模型窗口与价格对照(本站)|各家上下文管理实作、外部实测消耗(原始调研记录,留在仓库内、未上文档站)

0. 先给结论 ​

  1. 单次调用的上下文量级是按「十万」计的:本机 3,076 次真实调用实测 —— 中位 28.9 万 tokens、p90 58.1 万、p99 69.2 万、峰值 71.4 万 [实测]。也就是说 1M 窗口不是"用不满的余量",而是被稳定用到 30%~70%。
  2. 但每次新增输入只有中位 282 tokens(占上下文 0.04%)[实测]:成本结构不是"聊得多",而是同一条稳定前缀被反复重发,因此缓存命中率才是真正的成本开关,不是上下文长度本身。
  3. harness 固定开销 ~2.6 万 tokens/次(DSH,其中工具 schema 约 2.2 万)[实测];本仓库 sjtu-agent 实测 ~1.74 万(系统提示 1.28 万字符 + 76 个工具 schema 3.78 万字符,按实测 2.9 字符/token 折算)[实测]。
  4. 窗口与折叠阈值别按老经验拍:2026 各家实现普遍落在窗口的 80%~95% 才压缩(Claude Code 1M 模型 ~967K、Codex 实际等到可用窗口 94.74%、dsh thresholdRatio=0.8)[外部]。本仓库当前 SESSION_QUALITY_BUDGET = 256_000,在 1M 窗口下只用了 25%,远早于外部同类实现——而"太早折叠"正是"限制窗口太小容易截断"的另一种形态。
  5. 不要信框架自带的 cost 字段:本机账本把 deepseek-flash 按 V4-Pro 价目计价,比官方 Flash 价恒定高 6.67× [实测](见 §4)。自己按官方价目表算。

1. 本机实测:一次 agent 调用到底多大 ​

数据源:~/.dsh/dsh-usage/usage-ledger.json(8 天日账)+ ~/.dsh/sessions/**/session.v3.jsonl(30 份会话、3,076 次带用量的模型调用、24 份含调用)。这是本机真实负载,不是基准测试。

指标(每次模型调用)minp50p90p99max均值
上下文总量(input + cacheRead)5,790288,761581,409691,842714,318312,219
其中未命中缓存的新增输入212822,16815,063305,4871,358
输出 tokens414971,6805,72488,226862
其中思考 tokens0717654,10483,056344
指标(每次会话 / 工具结果)数值
每会话模型调用次数p50 41,p90 426,max 667
会话首次调用上下文(≈ harness 固定开销 + 首条用户消息)p50 25,630,p90 27,327,max 27,402
单条工具结果字符数p50 448,p90 4,239,p99 22,635,max 51,486
缓存命中占上下文比例(总量口径)99.6%
思考占输出比例(总量口径)39.9%

固定开销分解(字符 → token 按实测 2.9 字符/token) ​

组成DSH(本机运行时)sjtu-agent(本仓库)
系统提示词p50 11,493 字符 ≈ 4.0K tokens12,812 字符 ≈ 4.4K tokens
工具 schemap50 63,604 字符 ≈ 21.9K tokens37,768 字符(76 个工具)≈ 13.0K tokens
合计固定开销≈ 25.6K tokens≈ 17.4K tokens
最贵的单个工具 schema—add_mcp_server 1,579 字符、create_skill 1,208、configure_canvas_monitor 1,207

对照外部:54 工具时 schema 占每次请求 83.1%、真实对话仅 0.6%(hermes #67273)[外部];一句 "hello" → 22,300 tokens 的 prompt(qwen-code #6097)[外部]。本机 25.6K 与该量级一致。

2. 上下文是怎么涨上去的(以及折叠发生在哪里) ​

跨会话聚合的中位上下文(按会话内 step):

step151020304060
中位上下文27.3K60.7K111.1K144.6K284.5K320.1K303.2K
最大上下文704K710K714K651K662K677K460K
  • 前 30 步近似线性:约 +8.9K tokens/步(每次工具调用 + 结果 + 助手消息)[实测];外部同口径是 +1,719/+1,838 tokens/步(TraceLab,Claude Code + Codex)[外部],本机明显更高(本机工具结果 p90 4.2K 字符)。
  • 曲线在第 16、44~45、59~60 步出现回落(如 405.3K → 270.6K),即折叠/压缩事件:幅度约 −130K tokens [实测]。
  • 结论:折叠阈值决定"多久折一次"。本仓库 256K 预算会在 step 8~10 附近首次触发(中位 111K 时尚不触发,20 步 145K,30 步 285K → 触发点落在 step 25~30 之间),而外部实现要到 800K+。

3. 成本:官方价目 vs 账本价 ​

按官方价目(DeepSeek V4.1-Flash:输入 $0.15/1M、缓存命中 $0.003/1M、输出 $0.60/1M,谷时)[官方],本机 8 天负载:

口径计算结果
实际计费口径(含缓存)新增输入 2.75M×$0.15 + 缓存 890.7M×$0.003 + 输出 2.35M×$0.60≈ $4.49 / 8 天
反事实:无缓存(每次重发全量上下文)893.4M×$0.15 + 2.35M×$0.60≈ $135.4 / 8 天
账本自报账本 cost 字段合计$30.17

两个结论:

  • 缓存带来 ~30× 的成本差($4.49 vs $135.4)[实测+官方]。保持稳定前缀(会话中不换模型、不增删工具、易变内容后置)不是优化技巧,是成本前提。
  • 账本自报 $30.17 与官方价核算的 $4.49 差 6.7 倍:逐日比对显示账本按 V4-Pro 价目计价(V4-Pro 缓存读 $0.022/1M vs Flash $0.003/1M),8 天比值恒为 6.67×、与官方 V4-Pro 价核算比为 1.03~1.52× [实测+官方]。用框架自带的 cost 字段做决策会系统性高估(或低估)成本。

4. 与外部证据对齐 ​

指标本机实测外部 2026 数据一致性
单次调用上下文p50 289KTraceLab 中位单步 119K 缓存前缀;Copilot 生产 ≈125K/次调用 [外部]同量级(10 万~30 万),本机偏高
新增输入占比0.04%(282/289K)输出仅占总量 0.34%,输入:输出 ≈ 294:1 [外部]一致
缓存命中99.6%TraceLab 全局 95.7%;Copilot 轮内 90% / 跨轮 55%;同模型跨 harness 1.5%~70% [外部]本机偏高(短会话+严格稳定前缀)
增长+8.9K tokens/步(前 30 步)+1,719/+1,838 tokens/步 [外部]本机更高
思考占输出39.9%Codex 40.8%;Opus 5.5 单答案 98.4% [外部]一致
harness 固定开销25.6K tokens/次22.3K("hello" prompt)、schema 占 83.1% [外部]一致
压缩触发点本仓库 256K(25% 窗口)Claude Code ~967K(1M)、Codex 94.74%、dsh 0.8×窗口、OpenCode 窗口−20K−buffer [外部]本仓库明显偏早

5. 对 sjtu-agent 的取值建议 ​

#项目现状建议状态
1折叠预算 SESSION_QUALITY_BUDGET原为 256_000 写死(且模块 docstring 写 64K,不一致)按后端 + 模型的窗口取一半:官方 DeepSeek/Anthropic 1M → 500K;致远一号 deepseek-chat 512k → 256K、qwen 256k → 128K(官方指南数据,不是 1M);其它网关窗口未公开 → 128K 窗口 → 64K;可用 SJTU_CONTEXT_WINDOW / SJTU_CONTEXT_BUDGET 显式声明✅ 已落地(agent/context.py:model_context_window(model, base_url) / context_budget() / is_campus_gateway();runner.py 从 SDK 客户端读 base_url 后传入)
2输出上限Anthropic 路径写死 max_tokens=4096(OpenAI 路径已不设上限)自适应:min(厂商上限, 窗口 − 已用 prompt − 余量),不低于 1024。DeepSeek-V4.1-Flash 上限 393,216(384K,思考与正文共享该配额);Claude/GPT-6 128K、Gemini 65,536、Qwen/Kimi 131,072;认不出的模型保守 8192。SJTU_MAX_OUTPUT_TOKENS 可覆盖✅ 已落地(agent/runner.py::_max_output_tokens(base_url, model, prompt_tokens=…) + _provider_output_cap();后端拒绝时自动降档重试 2 次)
3工具 schema 开销76 个工具 / 37.8K 字符 ≈ 13K tokens(占固定开销 75%)按意图分组懒加载(邮件/Canvas/食堂/提醒各自成组);精简描述⬜ 待办(会话内工具集已是静态列表,这点已满足)
4缓存纪律动态时间注入在用户消息首部,system 前缀稳定 ✓补:MCP 工具列表 60s TTL 可能在会话中途变化 → 整个前缀失效;建议会话内固定工具集⚠️ 部分(extensions/mcp_client.py::_TOOLS_CACHE 仍会刷新)
5工具结果内联上限fetch_url 8,000 字符截断,无落盘内联 ~10K 字符,超出落盘 + 回路径与预览⬜ 待办
6成本核算依赖运行时/框架的 cost 字段按官方价目自算;把"折叠次数 / 每轮估算上下文"记日志(已加)⚠️ 部分(折叠事件已记 INFO 日志,缓存命中率未采集)
7模型选择默认致远一号 deepseek-chatdeepseek-v4-pro 已路由到 V4.1-Flash 并按 Flash 计费;峰谷价差 2×ℹ️ 信息性

5.1 本次落地的改动(2026-09-24) ​

文件改动
sjtu_agent/agent/context.py新增 model_context_window(model, base_url):先看 SJTU_CONTEXT_WINDOW,再按后端分流(致远一号按官方指南 512k/256k、官方端点按官方规格、其它网关保守 128K),最后才按模型名猜;新增 is_campus_gateway();context_budget() 按该窗口取一半(SJTU_CONTEXT_BUDGET 可覆盖、上下夹取);trim_session(budget=None) 改按预算入参;折叠事件记 INFO 日志(预算、折叠轮数、折叠前后估算),供后续用真实数据校准
sjtu_agent/agent/runner.py_run_one_turn 从 SDK 客户端读 base_url 后传 context_budget(model, base_url=...);新增 _provider_output_cap()(DeepSeek 393,216 / Claude·GPT-6 128K / Gemini 65,536 / Qwen·Kimi 131,072 / 未知 8192)与 _max_output_tokens(base_url, model, prompt_tokens=…)——按 min(厂商上限, 窗口 − prompt − 余量) 自适应,替换 Anthropic 路径两处写死的 4096;后端以 max_tokens 为由拒绝时自动降档重试(最多 2 次);新增 _estimate_prompt_tokens()(图片按固定视觉成本计,不按 base64)
.env.example新增「上下文与输出预算」段:列出各后端的默认取值与两个窗口/预算环境变量
tests/test_context.py、tests/test_runner_limits.py新增 12 个用例(后端分流、网关调用名映射、未知网关不猜、环境变量优先、预算夹取、官方/网关输出上限、环境变量覆盖与非法值回落)

为什么按后端而不是按模型名:致远一号的 deepseek-chat 是网关调用名,官方指南写的是 512k,而官方 DeepSeek 同名口径是 1M——按模型名一刀切会把折叠预算算到窗口外面去(500K 预算 + 13K 工具 + 17K 系统 + 输出 > 512K)。反过来,接官方 DeepSeek 时按网关的 512k 保守取值又是白白束手束脚。

6. 缺口与待验证 ​

  1. 中文/校园场景的分布级 token 数据缺失 [外部]:本机数据是单机样本(1 个用户、DeepSeek Flash),不能代表全体用户;建议在 sjtu-agent 里埋点统计(每轮上下文、折叠次数、缓存命中),两周后再校准第 1 条建议。
  2. 折叠阈值与"质量下降"的定量关系没有硬数据:外部只有"context rot"定性说法与无方法学的 70% 数字;建议用可控实验(同任务在 256K/500K/800K 预算下对比任务成功率)替代直觉。
  3. 账本价目表的来源未确认:我只能从数字反推它按 V4-Pro 计价(6.67× 恒定比值),未读到它的价目表源码(本机 checkout 只含 web-app 依赖闭包,未包含用量包本体)。
  4. dsh tool-result-pruner 的具体阈值未公开(剪枝包本体不在本机 checkout 内)[外部]。
  5. 未覆盖:非编码 chat 智能体的每轮 token 拆分、研究型 agent 的分布级数据、分 provider 的长期缓存命中统计 [外部]。