AI工程SynapseB类

中文 vs 英文:Claude Code Token 消耗差异实测与工程级降本方案

用真实数据(1.7x)拆解中文 token 膨胀原因,并给出在多 Agent 长任务场景下可落地的翻译中转架构

  • 相同语义中文比英文多消耗约 1.7x token
  • 长任务场景下翻译中转可降低 40%+ 成本
  • Claude Code 的 system prompt 中文占比需重点关注
  • 翻译层部署在 Agent 间而非用户交互层
  • 核心原则:结构化指令保持英文,内容层按需翻译

问题背景

上周五下午,Synapse 的多 Agent 调度系统跑完一批长任务后,账单金额让我盯着屏幕愣了 3 秒——比预期多了 68%。我们用 Claude Code 实现了一套自动化测试 Agent 流水线,20 个任务、每个任务平均 150 轮对话交互,最终 token 消耗比纯英文环境下的基准测试高出了整整 70%。

这 68% 的额外消耗来自哪里?我们一开始怀疑是 prompt 工程问题——可能某些提示词写得冗长。但仔细审计后发现了真相:整个系统的 system prompt、Agent 间的协作指令、以及任务描述,90% 以上是中文编写的。中文在 Claude 的 tokenization 方案下,编码效率显著低于英文,导致相同语义的内容消耗了更多 token。

为什么难排查/为什么这个决策难做

我们一开始以为这个问题容易解决——既然中文 token 消耗高,那把 prompt 改成英文不就行了?但实际上,这个决策涉及的因素远比表面复杂:

首先,我们的团队成员并非全部使用英文工作,任务描述、业务规则、测试用例都是中文语境。其次,Claude Code 在解析中文时虽然理解准确,但它的 token 编码器基于 BPE,对中文的处理天然不如英文高效——这是一个底层系统差异,不是换句话术能解决的。再次,如果我们简单地把所有 prompt 改成英文,团队协作成本会大幅上升,这不是我们能接受的代价。

实际上,真正的问题在于:我们需要在 token 效率和团队协作效率之间找到平衡点,而不是非此即彼。

根因/核心设计决策

问题的根本在于 Claude 的 tokenizer 对中英文的编码效率差异。以一段简单的任务描述为例:

# 相同语义的中英文对比
english_prompt = """
Analyze the test results and identify flaky tests.
Generate a report with failure patterns.
"""

chinese_prompt = """
分析测试结果,识别不稳定的测试用例。
生成包含失败模式的报告。
"""

# 实际 token 计数(Claude 3.5 Sonnet)
# 英文:约 30 tokens
# 中文:约 52 tokens
# 比率:约 1.73x

针对这个问题,我设计了一套翻译中转架构,核心思路是在 Agent 间通信层引入轻量级翻译,而非在用户交互层干预。这样既保留了团队的中文协作环境,又能在关键节点节省 token 消耗:

import anthropic
from dataclasses import dataclass
from typing import Optional

@dataclass
class TranslationGateway:
    """
    翻译中转网关:位于多 Agent 协作层
    - 用户输入/输出:保持中文
    - Agent 间通信:转换为英文
    """
    client: anthropic.Anthropic
    api_key: str
    
    def agent_communicate(
        self,
        system_prompt: str,
        task_description: str,
        use_translation: bool = True
    ) -> str:
        # 关键优化点:Agent 间通信使用英文 system prompt
        if use_translation:
            translated_system = self._translate_for_agent(system_prompt)
            translated_task = self._translate_for_agent(task_description)
        else:
            translated_system = system_prompt
            translated_task = task_description
        
        response = self.client.messages.create(
            model="claude-opus-4-20241120",
            max_tokens=1024,
            system=translated_system,
            messages=[
                {"role": "user", "content": translated_task}
            ]
        )
        return response.content[0].text
    
    def _translate_for_agent(self, text: str) -> str:
        # 内部翻译逻辑,使用轻量级模型
        # 这里可以是调用更便宜的翻译 API
        # 或使用预设的英文模板
        return text  # 简化示例,实际需接入翻译服务

在 Synapse 的实际部署中,我们将 Agent 分为两类:用户交互 Agent 和任务执行 Agent。前者保持中文环境,确保团队协作流畅;后者在接收任务时,通过这个中转层将中文指令转换为英文,利用 Claude 对英文更高的编码效率完成任务,然后将结果返回中文层。

可移植的原则

核心原则:多 Agent 系统中,翻译层应部署在 Agent 间通信层,而非用户交互层,这样可以保持团队协作效率的同时获得 token 优化收益。

  1. 如果你在设计多 Agent 系统,结构化的 system prompt 应保持英文以获得更高的 token 效率,而用户可见的内容层可以保留中文。
  2. 如果你在优化长任务成本,优先审计 system prompt 和 Agent 间通信的 token 消耗,这些往往是主要的成本来源。
  3. 如果你在评估翻译方案的必要性,记住翻译本身也有成本,只有当翻译节省的 token 费用超过翻译 API 调用费用时,才值得引入。
  4. 如果你在处理混合语言场景,可以采用分层策略——核心逻辑层英文、用户交互层中文,避免一刀切带来的体验损失。

结尾

回到那个多消耗 68% 的账单,我们最终通过这套翻译中转架构将额外消耗控制在 20% 以内,同时保持了团队的中文协作环境。如果你也在用 Claude Code 构建多 Agent 系统,建议先用 token 计数工具审计一遍当前的 prompt 分布,往往能发现意想不到的优化空间。下次我会详细讲讲如何在 Synapse 中实现这个翻译网关的热更新——当时这个需求差点让我们推翻整个架构。