DEEPSEEK HARNESS TOKEN 分层诊断

为什么 DeepSeek Harness 会用掉这么多 Token——以及何时应归因于 MCP 工具 Schema

先审计请求层,再修改技术栈。高用量可能来自工具 Schema,但工具结果、历史、 重复步骤、推理、输出与缓存未命中是不同问题,需要不同修复。

更新于 2026-08-16证据边界明确

01 / 找到真正的层

五类原因会产生同一个“Token 太多”症状。

总用量只是账单数字,不是根因分析。先观察增长发生在什么时候。

01第一次有效工具调用前,输入已经很大

常驻工具 Schema

每个模型可见工具都会带上名称、说明和输入 Schema。DeepSeek Harness 会在每一步组装已注册的工具 Schema,因此大型或频繁变化的 MCP 目录可能主导请求体积。

量测:逐请求统计工具数量,并序列化 request/header.tools。

02搜索、读文件或冗长工具调用后,输入持续增长

工具结果与历史

参数和面向模型的工具结果文本会留在会话历史中,直至被压缩。即使目录很小,长日志、文档或重复结果仍会制造巨大上下文。

量测:分别量测每条保留消息、工具参数与工具结果。

03单次请求看似正常,但会话累计用量很高

重复模型步骤

一个 turn 可以包含多次模型请求。规划、工具调用、工具结果和后续回答都可能形成新 step,所以会话累计值不等于单次请求。

量测:统计每个 turn 的模型请求数,对比分请求与累计用量。

04输入已受控,但 completion 用量仍然很高

推理与输出

推理和最终输出属于模型行为层。隐藏 Schema 不会自动缩短推理或回答;增加一次发现步骤还可能提高输出 Token。

量测:把供应商报告的 output 与 reasoning 字段和 input 分开。

05工具列表或 Schema 变化后,未缓存输入跳升

Prompt Cache 未命中

稳定前缀可能被复用;增删、重命名或修改已注册工具则可能改变前缀。缓存行为取决于供应商,应直接量测,不能从总输入反推。

量测:逐请求比较 cache-read 与 uncached input,并与工具表面变化对齐。

02 / 分层量测

六层审计可以定位最先开始增长的来源。

从用量口径走到真实载荷;只有看到可疑层后,才运行受控干预。

  1. L0 / 定义指标

    先说清楚你在排查哪个数字

    记录它是单次请求还是整段会话,再拆分 input、cache-read input、output 与 reasoning。不要把累计总量当作一条 Prompt。

  2. L1 / SCHEMA

    量测模型可见的工具表面

    逐请求记录工具数量和工具 Schema JSON 序列化字节。比较首个请求与 tools/list_changed 或配置变化后的请求。

  3. L2 / 历史

    量测保留消息与工具结果

    把系统提示、用户与助手历史、工具参数、渲染后的工具结果分别归因,找到增长开始加速的第一个 step。

  4. L3 / 步骤

    统计上下文被发送了多少次

    把每次模型请求与前后工具调用对应起来。一个中等上下文发送六次,可能比一次异常大请求更贵。

  5. L4 / 供应商

    读取供应商 Usage 与 Cache 字段

    以供应商响应中的 input、cache、output 与 reasoning 为准。本地 JSON 大小只是诊断代理指标,不能直接换算 Token。

  6. L5 / 对照

    只改变一层,重跑同一批任务

    固定模型、任务、MCP Server 与 Harness 配置,只改变工具曝光方式;同时报告任务完成与新增请求步骤。

判断规则:如果 request/header.tools 不是首个请求的重要组成部分, Schema Gateway 大概率无法修复主导用量的那一层。

03 / 选择正确的 MCP 路径

原生 MCP 是基线;Progressive Disclosure 是有代价的交换。

DeepSeek Harness 采用插件优先架构:插件可扩展工具注册表,无需修改 Agent Loop。 两种路径都能组合,但没有一种对所有目录都更好。

官方原生 MCP CLIENT

目录小且稳定时,优先直接注册。

  • 每个发现到的能力都是带 Server 命名空间的原生工具。
  • 模型立即获得精确 Schema,可以直接调用。
  • 真实调用前不需要发现搜索。
  • 只要工具保持可见,已注册 Schema 的成本会出现在每次请求中。
阅读固定版本的官方 MCP Client 文档 ↗

PROGRESSIVE DISCLOSURE

目录大、能力长尾时,考虑先搜索再曝光。

  • 稳定发现表面替代常驻的 Schema 墙。
  • 只在相关搜索后向模型提供候选工具的精确 Schema。
  • 检索质量会成为任务质量的一部分。
  • 额外模型步骤可能提高输出用量和延迟。
阅读 MCP SEP-1576 提案 ↗

架构依据:DeepSeek Harness 会在每个 step 组装 Prompt 区块与工具 Schema,并提供插件扩展点。查看 47f9438 固定版本架构 ↗

04 / 阅读完整取舍

固定夹具隔离 Schema 大小;Pilot 暴露额外搜索。

固定 1,000-TOOL 组件夹具

647,962 B → 1,114 B

只量测已注册工具 Schema 的序列化 JSON 字节。这不是供应商 Token、 延迟或任务质量测量。

检查 rc.9 Benchmark ↗

三任务 DEEPSEEK HARNESS PILOT

3 / 3 ↔ 3 / 3

两边都完成了三个固定任务。官方直连直接调用选中工具;Lens 先调用mcp_search,再调用 mcp_call。

检查 rc.9 Pilot ↗
同一三任务 Pilot 中观察到的取舍
指标官方直连 ClientMCP Lens
完成任务3 / 33 / 3
MCP 路径直接调用选中工具mcp_search → mcp_call
Output Token491794

解读:这三个案例显示任务完成持平、常驻 Schema 表面更小,但 Lens 用另一次调用和 更高输出用量支付了发现成本;它们不能证明普遍质量或延迟结果。

05 / 只修真正的问题

MCP Lens 改变什么,又不改变什么。

LENS 会做

  • 把模型可见 MCP 表面固定为 mcp_search 与 mcp_call。
  • 搜索后返回有界候选集合与精确 Schema。
  • 再次检查策略后,调用一个明确的 Server 与 Tool。
  • 以 allowTools: [] 启动,让远程能力曝光必须显式开启。

LENS 不会做

  • 缩短 Harness 已保留的工具结果文本或会话历史。
  • 减少模型推理或最终回答长度。
  • 修复与工具表面无关的供应商 Cache Miss。
  • 保证更低 Token、成本、延迟或更好任务质量。
  • 隔离远程 MCP 进程或替代端点安全。

下一步

先量测;如果 Schema 占主导,再测试可回滚 Profile。

首页提供可复制的 DeepSeek Harness Profile、默认拒绝 Allowlist、验证命令与首条测试 Prompt。

FAQ / 直接回答

不走捷径地解释 DeepSeek Harness Token 用量。

01为什么 DeepSeek Harness 会使用这么多 Token?

高用量可能来自常驻工具 Schema、保留的工具结果与历史、重复模型步骤、推理与输出,或 Prompt Cache 未命中。修改 MCP 配置前应先把这些层拆开。

02如何判断 MCP 工具 Schema 是不是主因?

逐请求量测工具数量和 request/header.tools 的序列化 JSON。如果任何工具结果出现前这个表面就很大,而且在只减少可见工具的对照运行中同一层明显收缩,Schema 膨胀才是合理主因。

03DeepSeek Harness 官方 MCP Client 会把 Schema 放进每次请求吗?

固定版本的官方 Client 文档说明,发现到的工具会注册为原生工具;只要仍处于注册状态,其数据相关 Schema 成本就会在每次请求中支付。

04什么时候应该继续使用官方原生 MCP Client?

目录小而稳定,并且直接调用与最简单执行路径比缩小常驻工具表面更重要时,应保留官方原生 Client。它不需要额外的发现调用。

05什么时候适合 Progressive Disclosure?

有几十或几百个工具、多个 Server、长尾能力或目录频繁变化,并且量测已证明常驻 Schema 层占比明显时,可以考虑;同时必须计算检索质量和新增搜索步骤的代价。

06MCP Lens 能保证总 Token 更低吗?

不能。固定夹具量测的是 Schema JSON 字节,不是 Token。三任务 pilot 中两边都是 3/3 完成,但 Lens 多一次搜索,输出 Token 为 794,官方直连为 491。