
整个仓库 vs 只给相关文件:一个可复现、你自己能跑的成本实验
把整个仓库喂给编程 Agent,还是只给相关文件——哪个更贵?这是一份可在你自己的技术栈上公平运行的实验方案:worktree、条件对齐、诚实的记账。
问一圈,你会听到两个方向都底气十足的断言。"把整个仓库给 Agent——它需要全局视角。""千万别——你是在为每次请求重读同样的文件买单。"两边听起来都有道理,而且两边多半是凭记忆复述,不是测出来的。诚实的回答是:取决于任务、工具和你的代码库——而要知道你的答案是什么,只有一个办法:做实验。
本文是一份协议,不是一份结果。我们没有在你的仓库上跑过,也不会装作跑过。下面是如何公平地跑——包括会悄悄废掉大多数业余基准测试的陷阱。
把问题说准
比较不是抽象的"大上下文 vs 小上下文",而是:同一个任务、同一份代码、同一个模型与设置下,让 Agent 在整个仓库里自己发现上下文,是否比预先递给它一组精选文件花费更多总成本(token + 重试 + 返工)?
注意总这个字。一次一把成功的整仓运行,可能比一次漏掉依赖、必须返工的精准运行更便宜。如果只数第一次尝试的 token,你量到的是错的东西。
接入你已经付费的 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 成本对比 · 模型路由省钱之道。
更多博客文章
一条 Prompt 为什么消耗多次请求?AI 编程 Agent 的计费结构
一条 prompt 并不等于一次模型调用。Agent 会反复发送上下文、调用工具、重试——一天额度就这样被分批吃掉。这里讲清计量发生在哪里、为什么小任务也会烧光请求配额,以及如何测量你自己的会话。
如何在同一个仓库里并行运行 Claude Code 和 Codex(Git Worktree 分步教程)
让 Claude Code 和 Codex 同时在同一个仓库里工作而不互相覆盖:每个 agent 一个 git worktree,任务范围明确的简报,以及安全的合并流程。分步讲解。
Claude Code 和 Codex 可以同时使用吗?(2026 指南)
可以。Claude Code 和 Codex 各有独立的登录、计费和用量限额,今天就能在同一个项目里同时运行。本文讲怎么搭建、会出什么问题,以及要花多少钱。