arrow_back 全部文章
整个仓库 vs 只给相关文件:一个可复现、你自己能跑的成本实验
ai编程成本实验上下文窗口成本repo地图vs精准上下文ai编程agent基准设计token成本测量编程agent上下文策略

整个仓库 vs 只给相关文件:一个可复现、你自己能跑的成本实验

把整个仓库喂给编程 Agent,还是只给相关文件——哪个更贵?这是一份可在你自己的技术栈上公平运行的实验方案:worktree、条件对齐、诚实的记账。

Yuki Tanaka · Platform Engineer · 2026年9月17日 · 8 分钟阅读

问一圈,你会听到两个方向都底气十足的断言。"把整个仓库给 Agent——它需要全局视角。""千万别——你是在为每次请求重读同样的文件买单。"两边听起来都有道理,而且两边多半是凭记忆复述,不是测出来的。诚实的回答是:取决于任务、工具和你的代码库——而要知道你的答案是什么,只有一个办法:做实验。

本文是一份协议,不是一份结果。我们没有在你的仓库上跑过,也不会装作跑过。下面是如何公平地跑——包括会悄悄废掉大多数业余基准测试的陷阱。

把问题说准

比较不是抽象的"大上下文 vs 小上下文",而是:同一个任务、同一份代码、同一个模型与设置下,让 Agent 在整个仓库里自己发现上下文,是否比预先递给它一组精选文件花费更多总成本(token + 重试 + 返工)?

注意这个字。一次一把成功的整仓运行,可能比一次漏掉依赖、必须返工的精准运行更便宜。如果只数第一次尝试的 token,你量到的是错的东西。

整个仓库 vs 只给相关文件:一个可复现、你自己能跑的成本实验

接入你已经付费的 Claude 或 Codex,其余交给成本只有零头的工作模型。

下载 meshcode →

两组实验真正不同的地方

两臂之间必须只有一处不同:

  • A 臂(整仓探索): Agent 从仓库根出发自己找——自己的 grep、自己的文件读取、自己的代码库地图。
  • B 臂(精准上下文): 你(或一份固定的预写清单)指名任务需要的文件。Agent 从这份清单出发,不乱逛。

其余一切必须一致:同一提交、同一模型、同样的系统提示与设置、同样的任务措辞。如果两臂之间还换了模型或提示,你测到的就是自己的提示词水平,不是上下文策略。

环境准备

git worktree 让两臂在互不干扰的情况下面对同一提交:

git worktree add ../repo-armA <commit>
git worktree add ../repo-armB <commit>

(每臂都在干净的副本里跑——绝不要在同一个目录里,否则第一个 Agent 的文件改动会污染第二臂的起始状态。)

最少重复次数: 多于一次。单次对比是轶事。每臂 3 次是任何值得重复的结果的下限;即便如此也只当方向性结论看待。模型 API 是非确定的——同一个 prompt 可能产生不同的工具调用链,所以任何单独一对运行都可能误导你。

要控制或记录的混杂变量:

  • prompt 缓存状态。 热缓存让第二个相同上下文的调用更便宜。两臂分开会话运行,避免一臂的缓存给另一臂升温;工具若暴露缓存命中率就记录下来。
  • 顺序。 后跑的一臂得益于你对任务更熟悉。交叉进行(A-B-A-B 或随机),别把 A 全跑完再跑 B。
  • 任务选择。 答案只在两个已知文件里的任务是给 B 臂做局;需要横切探索的任务是给 A 臂做局。选你实际会做的任务,并记录每个任务偏向哪边。
  • 隐藏的重试。 Agent 悄悄重试的失败工具调用同样花 token。要数进去。
  • 人的时间。 如果 B 臂需要你花二十分钟挑文件清单,这笔成本真实存在——即使它不出现在 token 账单上。

记录表(刻意留空)

我们发布的是表格,不是数字。在某个具体仓库上跑过之前,"你的场景"不存在诚实的数字——没有协议背书就引用数字的人,是在猜。

运行 任务 模型 + 设置 token 输入 token 输出 请求数 重试/失败调用 耗时 结果正确? 一次成功? 备注

如何诚实打分:

  • 总成本 = token 输入 + 输出(按你所在套餐的计量口径——见一条 prompt 实际消耗什么),加上重试与重跑,加上你为 B 臂挑选上下文花掉的时间。
  • 正确性优先。 没过测试的便宜运行不是便宜——它是更贵的"跑两次"故事的前半段。用固定评分标准给每臂打分:测试通过、行为一致、无回归。
  • 遥测缺失 = N/A,不是零。 工具不报每请求 token 数就别编。写 N/A。诚实空着的列,比一列虚构有价值得多。
  • 报区间,不报点。 "B 臂成本为 A 的 0.7 倍(第 1–3 次运行)"——而不是"43,210 个 token"。超出测量精度的精度,是打扮成数据的噪声。

怎么少花钱把它跑起来

  • 先用最便宜的够用模型做一次干跑,调试协议本身——第一次出问题的通常是测试框架,不是模型。
  • 给每次运行设支出上限(多数工具有预算 flag 或 max-tokens 设置),别让一个失控循环把基准测试变成账单。
  • 从本来就要做的任务开始,先跑一对。 如果两臂差距明显小于重复之间的噪声,这也是一种收获——而且很便宜。
  • 边跑边记,不靠回忆。 会话 transcript 和工具 debug 日志都存在;每次跑完趁细节还热着就去 grep。

这个实验能告诉你什么、不能告诉你什么

能: 你的工具、你的仓库、你的任务如何相互作用——这是对你预算唯一有意义的版本。它还会暴露意外的低效(整仓臂一头扎进 vendored 依赖、精准臂漏掉配置文件然后打转)。

不能: 给你一个放之四海皆准的常数;一天的数据也撑不过仓库增长或模型更新。任何一项实质变化后就重跑。还要说明我们刻意没有声称的东西:本文没有任何"节省 X%"的数字,因为我们没有在你的代码上跑过——你会得到的那个数字,正是要你亲手跑一遍的全部意义。

在你测量期间的实用默认值

就算什么都不做:热门任务保持小而明确,冷启动探索任务放手让它逛,机械性工作路由给更便宜的计量表。上面的协议就是弄清"小"和"便宜"对你的仓库意味着什么的方法——答案通常值得跑几次,因为上下文策略是你能完全掌控的少数成本杠杆之一。

meshcode 让 Agent 在并行窗格中运行,这让这个实验变得可行:A 臂一个窗格、B 臂一个窗格,同一仓库、同一时刻——旁边还有便宜的预付模型承接机械运行,比较就不会吃光你的每日配额。

相关阅读:一条 prompt 为什么消耗多次请求 · AI 编程 Agent token 成本对比 · 模型路由省钱之道

👉 下载 meshcode