<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>LLM Cost on Hypho - AI Agent 技术博客</title><link>https://blog.hypho.cn/tags/llm-cost/</link><description>Recent content in LLM Cost on Hypho - AI Agent 技术博客</description><image><title>Hypho - AI Agent 技术博客</title><url>https://blog.hypho.cn/papermod-cover.png</url><link>https://blog.hypho.cn/papermod-cover.png</link></image><generator>Hugo -- 0.148.2</generator><language>zh-cn</language><lastBuildDate>Mon, 13 Jul 2026 10:03:22 +0800</lastBuildDate><atom:link href="https://blog.hypho.cn/tags/llm-cost/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code 为什么还没读提示词就烧掉 33k tokens？从 OpenCode 对比看编码 Agent 成本治理</title><link>https://blog.hypho.cn/posts/claude-code-opencode-token-overhead/</link><pubDate>Mon, 13 Jul 2026 10:03:22 +0800</pubDate><guid>https://blog.hypho.cn/posts/claude-code-opencode-token-overhead/</guid><description>Systima 对 Claude Code 与 OpenCode 的线级抓包显示，Claude Code 在读取用户提示词前就可能发送约 33k tokens，而 OpenCode 约 7k。本文从系统提示、工具 schema、MCP、CLAUDE.md、子 Agent 与缓存稳定性拆解编码 Agent 成本治理，给出团队落地建议。</description><content:encoded><![CDATA[<p>如果你最近觉得 Claude Code 的用量表涨得比预期快，先别急着怀疑模型涨价。</p>
<p>更可能的原因是：你付费的不只是“那一句 prompt”，而是一整套 Agent harness 的启动成本。</p>
<p>这两天 HN 上有一篇很值得看但也很容易被误读的文章。Systima 把 Claude Code 和 OpenCode 放在同一台机器、同一个模型、同类任务下，在 API 边界抓取请求与返回的 usage block，结论很刺眼：在一个只要求回答 <code>OK</code> 的最小任务里，Claude Code 在真正读取用户提示词之前，已经带上大约 33,000 tokens 的系统提示、工具 schema 和注入脚手架；OpenCode 大约是 7,000 tokens。换成 Claude Fable 5 后差距会收窄到约 3.3 倍，但方向没变。</p>
<p>我不想把这篇写成“Claude Code 不行、OpenCode 真香”的二元对立。坦白说，这样读反而会错过真正有工程价值的部分。</p>
<p>真正的问题是：<strong>编码 Agent 的成本，正在从模型单价问题，变成上下文装配问题。</strong></p>
<p><a href="https://systima.ai/blog/claude-code-vs-opencode-token-overhead">Systima 的原文</a>把 Claude Code 和 OpenCode 称为两个 harness。这个词很关键。模型只是发动机，harness 才是把仓库、终端、文件系统、MCP、权限、子 Agent、记忆、hooks、通知、后台任务塞进一次请求里的“车架”。你看到的聊天框是一句话，模型看到的可能是一辆满载卡车。</p>
<p>用人话说就是：你以为自己在问“帮我改个 bug”，但系统实际先递给模型一份厚厚的公司制度、工具手册、权限说明、项目记忆、外部系统目录，然后才轮到你的 bug 描述。</p>
<h2 id="33k-tokens-从哪里来">33k tokens 从哪里来？</h2>
<p>Systima 的测法并不复杂：清空配置目录，不开 MCP，不加载用户设置和 memory，用空 workspace 跑三类任务。第一类任务最极端，只要求返回固定字符串。这样做的好处是把“任务本身的复杂度”剥掉，专门看工具启动时的固定负担。</p>
<p>结果是 Claude Code 的首轮请求不只是一个 system prompt。文章记录到，它还包含大量工具定义，以及注入到首个 user message 前后的 reminder、可用 agent 类型、skills 目录、用户上下文等。OpenCode 的请求更接近最小化：一个系统块、常规 coding tools，再加用户 prompt。</p>
<p>这不是 bug，更像产品路线差异。</p>
<p>Anthropic 官方文档对 Claude Code 的定位已经不是“终端里的补全工具”，而是一套横跨终端、IDE、Web、Desktop、CI/CD、Slack、Chrome extension 的开发 Agent 平台。它支持通过 <a href="https://code.claude.com/docs/en/mcp">MCP 连接外部工具</a>，通过 <a href="https://code.claude.com/docs/en/memory">CLAUDE.md 和 auto memory</a>加载项目规则和经验，通过 <a href="https://code.claude.com/docs/en/settings">settings</a>管理权限、hooks、子 Agent、插件和团队策略。这些能力都很有用，但它们不会免费存在。</p>
<p>每个能力都要以某种形式被模型“看见”。</p>
<p>例如 MCP server 不是只在调用时才有成本。为了让模型知道“我可以调用哪些工具、每个工具需要什么参数、返回什么结构”，工具 schema 往往会进入上下文。你接了 5 个 MCP server，模型可能还没调用 Notion、Jira、Slack，就已经读过它们的一批说明书了。</p>
<p>CLAUDE.md 也是同理。官方 memory 文档明确提醒，CLAUDE.md 会在 session 开始时进入 context window，消耗 tokens；并建议每个 CLAUDE.md 控制在 200 行以内。Systima 的实验里，一个 72KB 的生产仓库 instruction file，会额外增加约 20,000 tokens。这个数字不一定能直接套到所有仓库，但方向很真实：把团队规范、架构说明、review checklist 全塞进一个文件，最后会变成每次请求都重复缴税。</p>
<p>说白了，Agent 成本里有一大块是“启动税”。</p>
<h2 id="opencode-便宜是因为它少做了什么">OpenCode 便宜，是因为它少做了什么？</h2>
<p>OpenCode 的定位是“open source coding agent built for the terminal”。它的<a href="https://opencode.ai/docs/">官方文档</a>强调 TUI、CLI、providers、models、rules、agents、MCP、LSP 等配置能力；<a href="https://github.com/anomalyco/opencode">GitHub 仓库</a>也显示它是真实活跃项目，截至本次检查约 185k stars，最近提交就在 2026-07-13。</p>
<p>但从 Systima 抓到的请求看，OpenCode 默认启动包更薄，尤其是请求前缀更稳定。这里有个比“tokens 少”更重要的点：<strong>cache stability</strong>。</p>
<p>Anthropic 这类 API 通常会对可复用的长前缀做 prompt caching。缓存命中时，长系统提示、工具定义、规则文件不一定每次都按完整输入价计费。但前提是前缀要稳定，字节级稳定。只要 harness 每轮都插入动态 reminder、时间戳、状态摘要、临时工具列表，缓存就可能被打碎。</p>
<p>Systima 的结论是，OpenCode 捕获到的 request prefix 在多次运行中 byte-identical；Claude Code 的 cache-write 行为更重，缓存经济性差。这个判断我认为比“33k vs 7k”更值得团队关注，因为真实生产环境里，很少有人只跑一次 <code>OK</code>。你会在同一个仓库里连续让 Agent 读文件、改代码、跑测试、修错误、再解释。缓存命中率差，成本会像复利一样放大。</p>
<p>这里也要补一句不那么讨喜的话：OpenCode 默认更省，不等于它在复杂企业场景里一定更好。Claude Code 带来的那些“重”能力——权限策略、自动记忆、跨端一致配置、子 Agent、团队治理、MCP 管理——在大团队里可能正是你需要的。问题不是重不重，而是你有没有意识到自己在为什么付钱。</p>
<h2 id="真正危险的是默认全开">真正危险的是“默认全开”</h2>
<p>我最担心的不是单个开发者多花几美元，而是团队把 Agent 当成 CI 一样接进研发流程，却没有做上下文预算。</p>
<p>一个很常见的演化路径是这样的：</p>
<p>第一周，团队只是在本地用 Claude Code 改代码，成本还可控。</p>
<p>第二周，大家开始往 CLAUDE.md 里写规则：代码风格、目录说明、数据库约定、测试命令、release 流程。越写越长。</p>
<p>第三周，接上 MCP：GitHub、Linear、Notion、Slack、内部文档、监控平台。每个 server 都“以后可能用到”。</p>
<p>第四周，为了并行处理任务，引入 subagents。一个 parent agent 拆两个子任务，每个 subagent 再带一套启动上下文，最后 parent 还要消费子 Agent transcript。</p>
<p>结果呢？业务逻辑还没复杂，Agent 的固定成本先复杂了。</p>
<p><a href="https://systima.ai/blog/claude-code-vs-opencode-token-overhead">Systima 原文</a>里有个例子很典型：一个直接执行约 121k tokens 的小任务，用两个 subagents fan out 后变成约 513k tokens。这个比例不是说“永远不要用子 Agent”，而是提醒我们：subagent 不是线程池，它更像新开一个带完整上下文的员工。每多叫一个人进会议室，就要重新发一遍背景材料。</p>
<p>人话翻译：并行不是免费的，尤其当每个并行单元都要先读一遍公司 handbook。</p>
<p>这和我之前写 <a href="https://blog.hypho.cn/posts/codex-reasoning-token-clustering-agent-reliability/">Codex 推理 token 卡在 516？这类异常更该被当成 Agent 可靠性问题</a>时的判断类似：Agent 系统的问题往往不在某一次生成，而在“运行时行为是否可观测、可解释、可治理”。Token overhead 也是一种运行时行为。如果你只看最终回答质量，不看请求体和 usage block，就像只看服务返回 200，不看延迟和 CPU。</p>
<h2 id="团队应该怎么治理编码-agent-成本">团队应该怎么治理编码 Agent 成本？</h2>
<p>我的建议很简单：先别急着换工具，先把成本拆开。</p>
<p>第一步，给 Agent harness 做基线测试。不要上来就跑真实需求，先建一个空目录，让它回答固定字符串，记录 input tokens、cache creation、cache read、output tokens。再逐项打开 CLAUDE.md、MCP、rules、skills、subagents。每打开一个变量，跑三次。</p>
<p>这听起来笨，但很有效。你会很快知道到底是工具 schema 贵、规则文件贵，还是缓存不稳定贵。</p>
<p>第二步，给 CLAUDE.md 减肥。官方文档建议控制在 200 行以内，我会更激进：把“每次都必须知道”的规则留在 CLAUDE.md，把长文档、业务背景、历史决策放到可检索文档或按路径加载的 rules 里。不要把 README、架构史、团队文化、所有测试命令都塞进启动上下文。</p>
<p>一句话：CLAUDE.md 应该像 syscall table，不应该像公司 wiki。</p>
<p>第三步，MCP server 按任务启用，而不是按想象启用。MCP 的价值很大，我之前写 <a href="https://blog.hypho.cn/posts/agentarmor-8-layer-security-framework/">AgentArmor 的 8 层安全框架</a>时也强调过，工具边界和权限治理会决定 Agent 能不能进生产。但从成本角度看，MCP server 也是上下文负担。一个写 CSS 的任务不需要 Jira，一个修 SQL 的任务不一定需要 Slack。能按项目、路径、命令动态启用，就不要全局常驻。</p>
<p>第四步，少用“为了显得智能”的子 Agent。子 Agent 适合边界清晰、上下文可切割的任务，比如一个负责迁移 SQL，一个负责改 API，一个负责补测试。它不适合“让两个 Agent 都看看这个问题”。后者大概率只是把同一份背景读两遍，然后再让 parent 读两份解释。</p>
<p>第五步，把 cache hit rate 当成一等指标。很多团队会盯 API 总账单，但不看 cache write/read 分布。Claude Code 官方的<a href="https://code.claude.com/docs/en/costs">成本管理文档</a>已经提到 <code>/usage</code> 可以按 skills、subagents、plugins、MCP servers 查看最近 24 小时或 7 天用量占比，也建议降低 MCP overhead、把部分 CLAUDE.md 内容移到 skills、谨慎管理 agent team token costs。这个方向是对的：不要只问“模型多少钱”，要问“哪些配置在持续制造输入 tokens”。</p>
<h2 id="那到底选-claude-code-还是-opencode">那到底选 Claude Code 还是 OpenCode？</h2>
<p>如果你问我的个人判断：小团队、个人开发者、成本敏感、主要在终端里做代码修改，OpenCode 很值得试。它开源、provider 选择多，默认上下文更薄，尤其适合想自己掌控 agent harness 的人。</p>
<p>但如果你在做企业级研发流程，Claude Code 的重型能力仍然有吸引力。跨端一致配置、权限、managed settings、MCP 管理、memory、hooks、CI/CD 和协作入口，这些东西不是 OpenCode 默认 token 少就能完全替代的。</p>
<p>关键不是选轻还是选重，而是别在不知情的情况下选重。</p>
<p>我会用下面这个粗糙但实用的判断：</p>
<ul>
<li>任务短、频次高、上下文简单：优先轻 harness，避免固定启动税吃掉收益。</li>
<li>任务长、跨系统、需要权限和审计：可以接受重 harness，但必须做 token 预算和 usage 分摊。</li>
<li>MCP 多、规则多、子 Agent 多：不要按“功能列表”评估，要按“每轮请求体”评估。</li>
<li>成本突然上涨：先查 cache stability 和新增配置，不要第一时间怪模型。</li>
</ul>
<p>这件事还有一个更大的趋势：未来编码 Agent 的竞争，不会只比谁生成代码更聪明，还会比谁能更聪明地管理上下文。模型越来越强之后，系统提示、工具 schema、记忆、权限、缓存策略这些“胶水层”反而会变成主要差异。</p>
<p>也许几年后，我们不会再问“哪个模型写代码最好”，而会问：哪个 Agent harness 最会省上下文、最会在正确时间加载正确工具、最会把历史经验压缩成可复用记忆。</p>
<p>这听起来没那么性感，但更接近工程现实。</p>
<p>最后给一个我自己的检查清单，适合任何准备把编码 Agent 接入团队流程的人：</p>
<ol>
<li>空仓库固定 prompt 基线是多少 tokens？</li>
<li>加载项目规则后增加多少？</li>
<li>每个 MCP server 增加多少工具 schema？</li>
<li>cache write 和 cache read 的比例是否稳定？</li>
<li>子 Agent 是否真的减少 wall time，还是只是在复制上下文？</li>
<li>失败任务的 token 消耗是否被单独统计？</li>
<li>有没有把成本按 repo、任务类型、MCP、subagent 拆账？</li>
</ol>
<p>能回答这 7 个问题，再谈“全面推广 Agent 编程”。答不上来，就先别把它接进高频自动化流程。</p>
<p>因为 Agent 的账单从来不是最后才来的。</p>
<p>它从还没读你的 prompt 时就开始了。</p>
]]></content:encoded></item></channel></rss>