← 返回学习中心 · Agent 工程OiOi Academy
AGENT 理论 · 15

Harness 省 Token 2.7x 实战

@_avichawla × TrueFoundry:TrueForge 开源 harness 四策略,在 14 个企业任务上省约 60% token。

原作者 @_avichawla 来源 X 发布 2026-08-24
💸

开篇:贵不是模型的问题,是 runtime 的问题

一次 agent run 结果正确,但账单远超预期。模型按你说的做了,找不到明显的浪费点——差别藏在包着模型的那层代码里:它决定模型看到多少上下文、被调用多少次、能碰到哪些工具、上一步的东西怎么带到下一步。这层就叫 harness。

原文配图:题图
原文配图:题图
记住:核心论点:An agent that costs more than it should is rarely a model problem but rather a runtime problem.(贵得离谱的 agent,很少是模型问题,多半是 runtime 问题。)

LangChain 证明了这层有多大空间:deepagents-cli 在 Terminal Bench 2.0 上从 52.8% 做到 66.5%,模型锁定 gpt-5.2-codex 一字没动,排名从 30 名开外冲到第 5——全是 harness 的功劳。

原文配图:LangChain harness 提效
原文配图:LangChain harness 提效

这门课拆解 TrueFoundry 的开源 harness TrueForge(trueforge.dev,github.com/truefoundry/trueforge,MIT 协议):生产级 harness 在执行循环之外还管什么、token 成本在一个 run 里哪里累积、四策略怎么把上下文压平、凭证怎么不进沙箱,以及三家 harness 同场 benchmark 的完整数字。这是全系列唯一一篇量化 token 成本的硬核工程实测。

高中生类比
模型是发动机,harness 是变速箱和底盘。同一台发动机,调校差的变速箱能让油耗翻三倍——你抱怨油耗(token 账单)时,先查的应该是变速箱,不是发动机。
🕳

成本黑洞解剖:50k token 被读了 16 次

以下来自 @_avichawla。先看一个具体场景:某个工具在第 4 步返回了 50,000 token 的 JSON,没有任何东西把它从对话里拿掉,于是到第 19 步时,模型又把它读了 15 遍——累计 80 万 token,只为一次工具返回。

原文配图:成本累积示意
原文配图:成本累积示意

计费细节:prompt caching 让重复前缀打折读,所以这 50k 实际约等于 3 倍单次读取的成本,而不是 16 倍。但量没变:16 次调用里它都占着上下文窗口,模型每次都要重新处理一遍;而且缓存只在"对话更早的部分不变"时才有效。

工具定义也一样:每个都带 name / description / input-output schema,MCP 服务器会先把一大块 prompt 占满,活儿还没开始干。

避坑
"窗口越大越好"是错觉:你是按调用次数付费,不是一次组装付费。上下文是一根杠杆,另一根是 harness 调用模型的次数——每轮工具往返都是一次调用,planning、verification、reflection 还在上面加码。
原文配图:两根杠杆
原文配图:两根杠杆
🚀

启动期:延迟加载一切

以下来自 @_avichawla。TrueForge 把上下文拆成"启动时模型需要的"和"执行中累积的",两根杠杆一起抓。启动期原则:只加载 run 需要的,不加载系统支持的全部。

  • Skills 是 git-backed 的 SKILL.md 包:启动只加载 name + description,相关时才从 sandbox 读正文;
  • 工具定义默认 deferred(preload=false):启动只拿 MCP 服务器的 name + description,不拿每个 schema。
原文配图:四步工具发现
原文配图:四步工具发现

需要时走四步按需发现:

  1. list_tools:返回某 MCP 服务器上的工具名;
  2. get_tool_info:返回单个工具的描述 + 输入输出 schema;
  3. get_tool_output_schema:只返回输出形状——写 Code Mode 脚本前先读它,不用对着原始 JSON 猜 key;
  4. call_tool:按名调用。
记住:如果内部平台服务器暴露 100 个工具而 agent 只用 2 个,剩下 98 个永远进不了 prompt。
⚙

运行期四策略:让上下文保持扁平

以下来自 @_avichawla。用一个客服问题串起四个策略:"哪些账户的 open ticket 最多,都在说什么?"——要查 issue tracker、去 CRM 对账户、读文档。工具调用次数可控,难的是返回的数据量。

点下面单步看四个策略:

tracker 返回 400 个 open ticket(标题/描述/评论/标签/经办人/时间戳),agent 其实只要 account ID 和 subject。TrueForge 把大响应写进 sandbox 文件,上下文只留短预览 + 路径,需要全文时再读文件。并行批量超预算时,先 offload 最大的,直到批次装得下。

原文配图:大响应落盘
原文配图:大响应落盘
原文配图:四策略总览
原文配图:四策略总览
记住:四策略分工:offload 和压缩砍"带往下走的上下文",subagent 把中间活搬进独立上下文,Code Mode 把多工具数据处理搬出模型循环。
高中生类比
就像整理行李:①大件托运(落盘)只带登机牌(路径);②让 12 个朋友各背各的包(subagent);③把零散东西打成一个包裹(Code Mode);④旧衣服捐掉只留清单(压缩)。轻装上阵,模型才跑得快、烧得少。
🔐

沙箱里永远拿不到你的凭证

以下来自 @_avichawla。压上下文的前提是 runtime 敢让 agent 碰真实系统。常规隔离是把生成的代码放进 sandbox 跑,但如果 sandbox 里同时躺着模型的 API key 和 MCP 凭证,那代码就和 harness 一样有秘密了。

TrueForge 把两者分开:harness 和凭证留在 server 端,sandbox 只跑代码、文件和 shell。Code Mode 脚本调 call_tool 时,请求先路由回 harness,由 harness 填上存好的凭证、调 MCP 服务器、把结果还给 sandbox:

原文配图:凭证分离架构
原文配图:凭证分离架构
import asyncio
from collections import Counter
from mcp_client import call_tool

async def main():
    tickets = await call_tool(
        "tracker",
        "search_issues",
        body={"status": "open", "limit": 500},
    )
    accounts = await call_tool(
        "crm",
        "query_records",
        body={"object": "Account", "fields": ["id", "name"]},
    )

    names = {a["id"]: a["name"] for a in accounts["records"]}
    counts = Counter(t["account_id"] for t in tickets["issues"])

    for account_id, count in counts.most_common(10):
        print(f"{names.get(account_id, account_id):<28} {count:>4}")

asyncio.run(main())

400 张 ticket 和账户记录留在 sandbox 里,脚本从头到尾没见过给它鉴权的凭证。审批同样生效:脚本调被 gate 的工具会暂停等审批——Code Mode 不是权限模型的后门。

📊

Benchmark:同场 14 题,三家 harness

以下来自 @_avichawla 与 TrueFoundry 的合作实测。TrueForge 对 Claude Managed Agents、deepagents,在 DevRev Enterprise-Bench 的 14 个任务(Jira 风格 tracker、Salesforce 风格 CRM、Drive 风格文档库,全走 MCP)上同场对比:同模型、同工具、每任务全新 session;LLM 裁判盲评,任务必须满足全部标准才算解出。

原文配图:benchmark 任务
原文配图:benchmark 任务
  • 成功率打平:14 题里差 1 题,无显著性差异——三家都能做出来;
  • token:TrueForge 只用了 Claude Managed Agents 的 约 40%、不到 deepagents 的 1/4——2.7x 的差距;
  • 速度:每 run 40 分钟 vs 63 / 64 分钟。
原文配图:token 对比柱状图
原文配图:token 对比柱状图

差距来自"每家 harness 背了多少东西":TrueForge 从精简指令出发、计划更少的工具调用、持续修剪历史;deepagents 每轮都背着 planning、虚拟文件系统和一个 subagent。换模型是另一根杠杆:TrueForge + GLM-5.2 解出题数相当,成本比 Claude Agents + Opus 4.8 再降 75%。

原文配图:换模型降本
原文配图:换模型降本

benchmark 的 harness、system prompt、grader 全部开源,可拿自己的模型和数据集复跑:TrueFoundry 完整 benchmark。

Manus 重构了 5 次,每次删掉模型已不再需要的机器;Anthropic 随模型变强从 Claude Code 里删 planning 步骤。但有些部分删不掉:再强的推理模型,也拦不住 harness 把 5 万 token 发 16 遍。这就是 harness 值得被刻意工程化的原因——模型会一直换,runtime 永远决定每个模型看到什么、跑多少次、带走什么。

💻

在自己机器上跑起来

以下来自 @_avichawla。TrueForge 本地是单进程 + SQLite,只要求 Node 22.13+:

npx @truefoundry/trueforge

打开 http://localhost:8790,在 Settings 里配一次 runtime,之后每个 agent 复用。在 Settings → Models 加模型 provider,Connectors 下接 MCP 服务器,Sandbox providers 里加 Daytona key(沙箱执行、文件 offload、skills 都靠它)。然后建 agent:选模型、挂 connectors 和 skills、写 instructions、存进 library。聊天 UI 最快上手,更深的控制在 agent spec 里,全走 API 和 SDK——可以嵌进自己产品,或把 UI 换皮成品牌界面。

视频在原帖中播放(X 站内视频无法直接下载嵌入),点此去原帖观看。

避坑
本地模式无登录,放自己机器上就好。服务多用户时切 hosted 模式:Postgres + Redis,用 Docker Compose 或 Helm 部署。
原文配图:本地运行界面
原文配图:本地运行界面

已经在跑的:TrueForge 驱动着 TrueFoundry AI Gateway 里的 AskTFY(跨生产 trace 查故障、找模式);NetApp 和 Automatiq 也在上面建 agent,Daytona 提供沙箱,搜索/推理/护栏 provider 围着它插拔——harness 是执行层,下面的系统可以换。

词

术语翻卡:点卡片看解释

TrueForge
TrueForge
TrueFoundry 的 MIT 开源 harness:延迟加载 + 四策略压平上下文 + 凭证与沙箱分离。
Deferred loading
deferred loading
延迟加载:工具定义默认不预载,用 list/get 四步按需发现。
Code Mode
Code Mode
把多工具数据处理写成脚本一次跑完,中间数据不进模型上下文。
Compaction
compaction
超 50k token 阈值时用结构化摘要替换旧消息,完整历史留服务器。
Prompt caching
prompt caching
重复前缀打折读:降价不减量,token 仍占窗口、仍被模型处理。
测

自测一下:点问题展开参考答案

因为 token 成本藏在 harness 里:它决定模型看到多少上下文、被调用多少次、能碰哪些工具。LangChain 锁定 gpt-5.2-codex 只改 harness,Terminal Bench 2.0 从 52.8% 做到 66.5%,就是证据。

工具在第 4 步返回 50k JSON,无人清理,到第 19 步被重读 15 次。caching 只打折(约 3 倍单次读取成本),量没变:16 次都占窗口、每次都被模型重新处理。

启动期:skills 只加载 name+描述、工具定义默认 deferred,四步(list_tools/get_tool_info/get_tool_output_schema/call_tool)按需发现。运行期:大响应落盘、subagent 隔离、Code Mode、超 50k 结构化压缩。

harness 和凭证在 server 端,sandbox 只跑代码;脚本调 call_tool 时请求路由回 harness 代填凭证。被 gate 的工具在脚本里同样触发审批。

成功率三家打平(差 1 题无显著性);TrueForge 用约 40% 于 Claude Managed Agents 的 token、不到 1/4 于 deepagents;40 分钟 vs 63/64 分钟;换 GLM-5.2 后成本再降 75%。