1. 项目概述与核心发现

每次调用Claude API,你都在为数据格式买单。这不是危言耸听,而是我花了大量时间,用120个数据文件、8个真实场景、5种格式,在Claude的三个主力模型(Haiku 4.5, Sonnet 4.6, Opus 4.6)上跑出来的硬核结论。一个包含200个产品的商品目录,用JSON格式发送会消耗15,879个令牌,而用Markdown只需要7,814个,最新的TOON格式更是低至6,088个——这意味着高达62%的成本差异。一个120项的任务清单,JSON要吃掉8,500个令牌,TOON仅需2,267个,直接省下73%。问题在于,市面上所有的基准测试都围绕着GPT、Gemini和Llama打转,关于Claude的公开数据几乎为零。我决定填补这个空白,通过450次API调用和精确的令牌计数,为你带来这份基于真实数据的格式效率指南。无论你是正在优化成本的工程师,还是希望提升提示效果的研究者,这篇文章都将为你揭示:在Claude的世界里,如何用最少的令牌,办最多的事。

2. 五种数据格式深度解析与适用场景

在深入对比数据之前,我们必须先理解手中的“武器”。数据格式远不止是语法差异,它直接决定了令牌的消耗效率、模型的解析难度,以及最终输出的可靠性。我测试的五种格式,各自代表了不同的设计哲学和应用场景。

2.1 JSON:通用但“昂贵”的工业标准

JSON(JavaScript Object Notation)自2001年诞生以来,已成为API和数据交换领域无可争议的“世界语”。它的核心优势在于严格的类型定义和普遍的语言支持。然而,在LLM的上下文中,这种严谨性成了它的“阿喀琉斯之踵”。每一个双引号、每一个花括号、每一个逗号,都在无情地消耗着宝贵的令牌,而这些符号本身并不携带任何语义信息。

{
  "products": [
    {
      "id": 1,
      "name": "Mouse",
      "price": 29.99,
      "in_stock": true
    }
  ]
}

从令牌计数的角度看,这段简单的JSON结构包含了大量冗余。字段名 "id" "name" 等在每个对象中重复出现,引号和标点占据了大量空间。在需要传输大量同构数据的场景下(如商品列表、用户数组),这种开销会被急剧放大。但它的优势同样明显:任何后端系统都能无缝解析,数据结构清晰无歧义。如果你的工作流严重依赖下游程序化处理,且数据量不大,JSON仍然是可靠的选择。

2.2 YAML:被高估的配置之王

YAML(YAML Ain‘t Markup Language)凭借其类似伪代码的可读性,在DevOps和配置管理领域占据了统治地位。它通过缩进来定义结构,通常可以省略引号,看起来比JSON简洁不少。

products:
  - id: 1
    name: Mouse
    price: 29.99
    in_stock: true

直观上看,YAML似乎更紧凑。但我的基准测试揭示了一个反直觉的事实:与JSON相比,YAML平均只能节省32%的令牌。原因在于数组的处理方式。对于同构对象的数组,YAML必须在每个列表项中重复字段名(如 id: name: )。当数组规模达到数百项时,这些重复的字段名和缩进字符所消耗的令牌,几乎抵消了去掉引号和逗号带来的收益。因此,YAML更适合结构相对扁平、嵌套不深、且人类需要频繁阅读和编辑的配置文件,而不是用于向LLM大规模传输表格化数据。

2.3 Markdown:LLM的“母语”

Markdown是本次测试中的一匹黑马,也是我个人最推荐的全能型格式。它本质上是为人类沟通而设计的文档格式,但恰恰因为如此,它成了LLM训练数据中最常见的格式之一。GitHub的README、各种Wiki页面、技术博客,构成了LLM语料库的基石。

## Products
| ID | Name  | Price | In Stock |
|----|-------|-------|----------|
| 1  | Mouse | 29.99 | Yes      |

Markdown表格的语法极其高效。表头只定义一次,后续每一行数据都只是值的简单排列。这种结构对于模型来说既容易解析(识别表头和行),又极度节省令牌。实测下来,Markdown相比JSON平均能节省53%的输入令牌,在输出侧更是能达到65%的惊人节省率。更重要的是,它的适用性极广,无论是系统指令、任务列表还是数据表格,都能有稳定出色的表现。如果你的提示中包含大量需要模型“理解”而非“解析”的文本描述,Markdown几乎是无可争议的最佳选择。

2.4 纯文本:极简主义的利与弊

纯文本(Plain Text)没有任何语法标记,是令牌开销最低的格式。

Products: Mouse (ID 1, $29.99, in stock)

这种格式在描述性内容(如API文档、长段落指令)上表现最佳,相比JSON能节省57%的令牌。因为它去除了所有“噪音”,只保留核心信息。然而,它的致命缺陷在于缺乏显式的结构。对于需要程序化提取数据的场景,纯文本是灾难性的。模型可以理解它,但下游代码很难可靠地从中解析出结构化的 id name 等字段。因此,纯文本仅适用于那些输出完全由人类消费,或者数据结构极其简单、无需后续处理的场景。

2.5 TOON:为令牌优化而生的新锐

TOON(Token-Oriented Object Notation)是2025年才出现的新格式,它明确宣称自己的设计目标就是:在保持与JSON无损转换的前提下,最大化地减少LLM提示中的令牌消耗。它的设计非常巧妙,可以看作是YAML和CSV的混合体。

products[1]{id,name,price,in_stock}:
1,Mouse,29.99,true

TOON的核心创新在于对同构数组的处理。它只在开头用一行“模式声明”来定义对象的结构( products[1]{id,name,price,in_stock} ),其中 [1] 表示后续有1行数据。之后的数据行则完全采用CSV风格,只包含值,不重复任何字段名。这种设计对于表格数据(商品目录、任务列表、用户信息)的效率是毁灭性的,平均能比JSON节省62%的令牌,在任务列表场景下甚至达到73%。但它的缺点是认知成本较高,不够直观,且生态支持(如解析库)不如传统格式成熟。不过,考虑到它带来的巨大成本优势,在特定场景下值得认真考虑。

3. 基准测试方法论与数据解读

为了得到可靠、可复现的结论,我设计了一套尽可能贴近真实场景的测试方案。所有测试都基于一个核心原则:控制变量,只改变格式,观察其对令牌消耗和模型准确性的影响。

3.1 测试场景与数据构造

我选取了8种在AI应用开发中最常见的数据类型作为测试场景,并为每种场景准备了小(S)、中(M)、大(L)三种数据规模。这8个场景几乎覆盖了从指令到输出的完整LLM工作流:

  1. 系统提示/指令 :包含规则、条款的文本,测试模型对复杂指令的理解。
  2. 商品目录 :典型的表格数据,测试信息提取和问答。
  3. 路线图/任务 :带有状态和依赖关系的任务列表,测试逻辑推理。
  4. 业务规则 :条件判断逻辑,测试规则应用能力。
  5. 小样本分类示例 :输入-输出配对样本,测试模型从示例中学习模式的能力。
  6. 组织架构 :三层嵌套的树状结构,测试对复杂层次关系的理解。
  7. API文档 :包含端点、参数、类型的描述,测试对技术规格的解析。
  8. 输出格式指定 :要求模型按特定格式返回数据,测试其指令遵循和格式生成能力。

每个场景的“地面真相”(正确答案)都是预先计算好的。对于场景2、3、6、7,我设计了具体的问题并预先知道答案,用于自动化评分。对于场景1、4、5,则采用基于量规的手动评估。所有数据均为脚本生成,以保证一致性,但我也意识到,真实世界的数据往往更“脏”(字段缺失、特殊字符等),这可能带来一些偏差。

3.2 模型与成本框架

测试覆盖了Anthropic目前主力的三个模型层级,它们的定价和能力差异显著:

模型层级 模型 输入成本 (每百万令牌) 输出成本 (每百万令牌) 定位
经济型 Claude Haiku 4.5 $0.80 $4.00 速度快,成本低,能力相对基础
均衡型 Claude Sonnet 4.6 $3.00 $15.00 能力与成本的平衡点
旗舰型 Claude Opus 4.6 $15.00 $75.00 能力最强,价格最高

一个关键发现是:所有Claude模型使用同一个分词器(Tokenizer)。 这意味着,同一个提示在不同模型上消耗的输入令牌数是完全相同的。成本的差异只来自于每百万令牌的单价。因此,关于输入令牌效率的结论,适用于所有Claude模型。

测试全部通过官方的 anthropic Python SDK进行,使用 client.messages.create() 发送请求,并将 temperature 设为0以保证输出的确定性。令牌计数使用 client.messages.count_tokens() 方法,这与API计费使用的分词器完全一致。

3.3 核心效率数据:输入令牌消耗

下表展示了五种格式在 所有八个场景下的平均输入令牌消耗 (基于L尺寸数据),以及与JSON基准的对比:

格式 平均令牌数 相比JSON的节省
JSON 3,252 (基准)
YAML 2,208 -32%
Markdown 1,514 -53%
纯文本 1,391 -57%
TOON 1,226 -62%

TOON以平均62%的节省率夺冠,纯文本和Markdown紧随其后。YAML的表现令人失望,仅节省32%。 但平均数据会掩盖场景间的差异,我们需要深入每个场景:

场景 YAML节省 Markdown节省 纯文本节省 TOON节省 效率冠军
指令 -22% -29% -24% -24% Markdown
商品目录 -29% -51% -53% -62% TOON
任务列表 -35% -63% -69% -73% TOON
业务规则 -28% -52% -48% -63% TOON
小样本示例 -31% -45% -37% -53% TOON
组织架构 -37% -61% -67% -68% TOON
API文档 -35% -45% -59% -53% 纯文本
输出格式 (不适用) (不适用) (不适用) (不适用) (输出侧测试)

关键观察:

  1. TOON在表格化数据上具有统治性优势 :凡是看起来像数组+同构对象的数据(商品、任务、示例),TOON的节省率都超过60%。它的“模式声明+CSV行”设计对此类数据是降维打击。
  2. Markdown是全能战士 :除了在纯表格数据上略逊于TOON,它在其他所有场景都表现稳定且优异,尤其是在指令和混合内容上。它是唯一一个在所有数据类型上都保持高节省率的格式。
  3. 纯文本在描述性内容上登顶 :对于API文档这种包含大量技术描述、参数说明的文字性内容,去掉所有语法标记的纯文本效率最高。
  4. YAML表现平庸 :其节省率远低于大众预期,在14%到41%之间徘徊,重复字段名是主要瓶颈。
  5. 数据规模影响微乎其微 :从S尺寸到L尺寸,各种格式的节省率百分比变化不超过2个百分点。这意味着,格式选择带来的效率提升是稳定的,不会因为数据量变大而稀释。

4. 分模型深度剖析:准确性、成本与实操策略

令牌效率只是故事的一半。格式选择是否会影响模型输出的准确性?不同层级的模型对格式的“敏感度”是否相同?这才是决定我们该如何选择格式的关键。

4.1 Claude Haiku 4.5:格式敏感的成本杀手

Haiku作为经济型模型,对输入格式最为敏感。在35%的测试问题中, 仅仅改变数据格式,就导致了Haiku给出不同的答案 。在某些场景下,最佳格式和最差格式之间的准确率差距高达36个百分点。

准确性差异分析:

  • 组织架构(树状数据) :YAML格式以 92.9% 的准确率遥遥领先,而Markdown格式竟然只有 57.1% 。这清晰地表明,对于嵌套的层次结构,Haiku更擅长解析YAML这种基于缩进的显式结构。Markdown表格在处理扁平列表时很高效,但对于父子关系表达乏力。
  • API文档 :JSON和YAML以**85.7%**的准确率并列第一,而Markdown再次垫底(57.1%)。技术规范需要精确的结构,JSON/YAML的键值对和类型暗示提供了这种精确性。
  • 商品目录 :纯文本(70.2%)和Markdown(69.2%)略胜一筹,JSON为63.4%。对于简单的查询(如“列出所有库存商品”),过于复杂的结构可能反而是一种干扰。
  • 任务列表 :JSON以71.0%的准确率领先。任务间的依赖关系(如“任务B必须在任务A完成后开始”)在JSON中可以通过嵌套对象清晰表达,而在其他格式中可能变得模糊。

实操心得:Haiku的“脑回路”更接近传统解析器。 它严重依赖清晰、明确的数据结构来理解关系。如果你用Haiku处理复杂数据,别为了省令牌而牺牲结构清晰度。对于树状数据,就用YAML;对于有关联的任务,就用JSON。省下的那点令牌钱,可能远不如错误答案带来的损失。

成本计算(基于平均令牌数,每月10万次请求):

格式 平均令牌/请求 单次请求成本 月度成本 (100K请求) 对比JSON节省
JSON 3,252 $0.0026 $260 -
YAML 2,208 $0.0018 $177 $83
Markdown 1,514 $0.0012 $121 $139
纯文本 1,391 $0.0011 $111 $149
TOON 1,226 $0.0010 $98 $162

从JSON切换到TOON,每月能省下162美元。但请注意, 在Haiku上,数据规模对准确性的影响比格式更大 。从S尺寸切换到M尺寸,平均准确率下降了13个百分点,而不同格式间的平均差异只有5.7个百分点。 因此,优化Haiku提示的第一要务是精简数据量,其次才是优化格式。

Haiku输出格式选择: 当要求Haiku按指定格式输出时,结果很有趣:

  • Markdown是输出之王 :在输出10个国家信息的任务中,Markdown仅消耗165个令牌,比JSON的465个节省了65%。对于面向用户的UI展示,这是最佳选择。
  • TOON输出效果不佳 :Haiku并不“认识”TOON格式。在没有示例的情况下,它倾向于输出冗长的纯文本,只是 vaguely 类似TOON。即使提供小样本示例,其输出效率和准确性也不如Markdown。

Haiku综合推荐表:

数据类型 最佳输入格式 (兼顾准确率) 最佳输出格式
系统提示/指令 Markdown (稳定) Markdown
商品目录/列表 纯文本 (70.2%准确率) Markdown
任务/路线图 JSON (71.0%准确率) Markdown 或 JSON
业务规则 JSON (稳定) Markdown
小样本示例 TOON (准确率接近JSON) Markdown
组织架构 YAML (92.9%准确率) YAML
API文档 JSON 或 YAML (85.7%准确率) JSON

4.2 Claude Sonnet 4.6:格式无关的纯成本游戏

与Haiku形成鲜明对比的是, Sonnet 4.6在所有测试中,对五种输入格式给出了100%一致的答案 。准确率稳定在89.4%,不受格式影响。这意味着,对于Sonnet,格式选择成了一个纯粹的成本优化问题,无需在准确性和效率之间做任何权衡。

成本计算(每月10万次请求):

格式 平均令牌/请求 单次请求成本 月度成本 (100K请求) 对比JSON节省
JSON 3,252 $0.0098 $975 -
YAML 2,208 $0.0066 $663 $312
Markdown 1,514 $0.0045 $454 $521
纯文本 1,391 $0.0042 $417 $558
TOON 1,226 $0.0037 $368 $607

从JSON全面转向TOON,每月可节省607美元,这是一笔非常可观的数目。由于输出成本也高达每百万令牌15美元,输出格式的优化同样重要。

Sonnet输出格式陷阱与策略: Sonnet在输出格式上有一个需要特别注意的“坑”: 它无法原生理解“TOON格式”这个指令 。如果直接要求“请以TOON格式输出”,Sonnet可能会将其误解为与“卡通”相关的内容,从而给出无关的回答。解决方案是在提示中提供一个TOON格式的小样本示例(Few-shot Example),引导它正确输出。

Sonnet综合策略:

  1. 输入数据 :对于表格数据,无脑用 TOON ;对于指令性或层次化数据,用 Markdown
  2. 输出格式
    • 人类阅读 :用 Markdown ,节省高达65%的输出令牌。
    • 机器解析 :用 JSON (最可靠)或 YAML (更紧凑且仍可解析)。
    • 需要TOON输出 必须在提示中提供TOON示例 ,否则会失败。
  3. 提示设计黄金组合 Markdown格式的指令 + TOON格式的数据 + 明确要求Markdown/JSON格式的输出

4.3 Claude Opus 4.6:能力最强,收益最大

Opus作为顶级模型,和Sonnet一样,对输入格式完全“免疫”,准确率稳定在93.5%。但Opus有一个独一无二的优势: 它能够“理解”并正确生成TOON格式,无需任何示例提示 。这可能是由于其更广泛的训练数据包含了这种新兴格式。

成本计算(每月10万次请求):

格式 平均令牌/请求 单次请求成本 月度成本 (100K请求) 对比JSON节省
JSON 3,252 $0.0488 $4,878 -
YAML 2,208 $0.0331 $3,312 $1,566
Markdown 1,514 $0.0227 $2,271 $2,607
纯文本 1,391 $0.0209 $2,087 $2,791
TOON 1,226 $0.0184 $1,839 $3,039

在Opus上优化格式的财务回报是巨大的。从JSON切换到TOON,每月能省下超过3000美元。更重要的是,Opus的输出成本高达每百万令牌75美元,是输入的5倍。因此, 优化输出格式带来的节省甚至可能超过优化输入

Opus输出格式决策框架: 虽然省钱很重要,但下游系统的需求是首要的。你需要问自己: 谁来消费这个输出?

  • 场景一:输出需被程序解析 (存入数据库、传给另一个API)。 必须使用JSON 。可靠性远高于那点令牌节省。
  • 场景二:输出由另一个LLM或服务消费 优先使用JSON或YAML ,保证结构能被准确理解。
  • 场景三:输出在UI中渲染为文本/文档 果断使用Markdown ,享受最低的令牌成本。
  • 场景四:你需要紧凑的机器可读输出,且已有TOON SDK 可以放心使用TOON ,Opus能可靠生成。

Opus综合推荐:

  • 输入 :表格数据用 TOON (-62%),指令用 Markdown (-53%)。 绝对不要用JSON作为输入 ,它最贵且毫无准确性优势。
  • 人类可读输出 Markdown (-65%输出令牌)。
  • 机器解析输出 JSON
  • TOON输出 Opus是唯一能原生、可靠生成TOON的模型 ,无需额外提示。

5. 实战指南、避坑经验与未来展望

基于以上数据,我们可以提炼出一套清晰的决策矩阵和实操指南。

5.1 输入格式决策矩阵

你的选择首先取决于你使用的模型:

数据类型 Claude Haiku 4.5 (兼顾准确性) Claude Sonnet 4.6 / Opus 4.6 (纯效率)
系统提示/指令 Markdown (-29%) TOON Markdown
商品目录/列表 纯文本 (70.2%准确率) TOON (-62%)
任务/路线图 JSON (71.0%准确率) TOON (-73%)
业务规则 JSON (稳定) TOON (-63%)
小样本示例 TOON (准确率接近JSON) TOON (-53%)
组织架构 YAML (92.9%准确率) TOON Markdown
API文档 JSON/YAML (85.7%准确率) 纯文本 (-59%)

核心原则:

  1. 用Haiku,先保准确,再省令牌 :根据上表匹配格式,别为了省一点钱而牺牲输出质量。
  2. 用Sonnet/Opus,无脑追求效率 :在保证下游可处理的前提下,TOON是表格数据的首选,Markdown是文本指令的首选。

5.2 输出格式决策矩阵

输出格式的选择逻辑与模型无关,主要取决于消费者:

输出消费者 推荐格式 Haiku Sonnet Opus
UI / 终端用户 Markdown 原生支持 原生支持 原生支持
API / JSON解析器 JSON 可靠 可靠 可靠
YAML配置管道 YAML 可靠 可靠 可靠
TOON SDK TOON 需小样本示例 需小样本示例 原生支持
CSV / 电子表格 纯文本 (带分隔符) 需模板 需模板 需模板

黄金法则:如果人类读,用Markdown;如果代码读,用JSON/YAML。 切勿为了节省输出成本而牺牲生产环境下的解析可靠性。

5.3 常见问题与避坑实录

Q:这些结论适用于GPT或Gemini吗? 趋势可能相似,但具体数字肯定不同。每个模型都有自己的分词器和训练数据分布。例如,在其他基准测试中,GPT-5 Nano在处理嵌套数据时,YAML的准确率可能只有62%,而在Claude Haiku上却能到93%。 这份指南专为Claude优化,切勿直接套用到其他模型。

Q:TOON是噱头还是真的有用? TOON v1.0于2025年11月发布,采用MIT协议,目前已有6种以上语言的SDK。对于表格数据,它带来的令牌节省是实实在在的(Claude上62%),且在Sonnet和Opus上能达到与JSON同等的准确率。 Opus能原生生成TOON输出,这是一个巨大优势。 如果你的场景是密集的表格数据交换,TOON值得投入学习成本。

Q:我可以在一个提示中混合使用多种格式吗? 完全可以,而且这通常是推荐做法。 例如,用Markdown编写清晰易懂的指令部分,用TOON嵌入需要处理的高效数据表格,最后要求模型以JSON格式输出结果。Claude完全能够处理这种多格式混合的提示。

Q:为了省这点令牌,值得重构我所有的提示吗? 这取决于你的用量。一个简单的计算公式: 月度节省 = (旧格式令牌数 - 新格式令牌数) * 每令牌成本 * 月度请求数

  • 用量小(月请求<1K) :省下的钱可能不到一杯咖啡,优先考虑开发便利性。
  • 用量中等(月请求10K) :在Sonnet上从JSON转TOON,每月能省约60美元,值得花点时间优化。
  • 用量大(月请求100K+) :在Opus上优化格式,每月可能节省数千美元,这绝对是优先级很高的任务。

Q:输入格式会影响模型选择的输出格式吗? 有轻微影响,但指令的权重更高。如果你提供YAML数据,Claude可能更倾向于用缩进格式回答。但如果你明确指令“请以Markdown表格形式返回”,这个指令会覆盖其默认倾向。 显式的输出格式指令永远是最可靠的。

避坑经验一:不要迷信YAML。 很多开发者直觉上认为YAML比JSON省令牌,但实测下来平均只有32%的节省,远低于Markdown的53%和TOON的62%。在数组数据上,它的重复键(key)开销很大。除非你的数据结构特别适合缩进表达(如树状层级),或者下游系统强制要求YAML,否则它不是LLM提示的最优解。

避坑经验二:Haiku上,数据量是首要敌人。 我的测试显示,将数据量从小规模(S)增加到中规模(M),Haiku的准确率下降了13个百分点,这个降幅远大于更换格式带来的影响(平均5.7个百分点)。因此,面对Haiku,你的第一优化策略应该是 精简和筛选输入数据 ,只提供完成任务所必需的信息。第二才是选择更高效的格式。

避坑经验三:Sonnet输出TOON,务必提供示例。 这是我测试中遇到的一个典型故障。如果没有示例,Sonnet会曲解“TOON”。一个简单的解决模板是在你的系统指令中加入:

请以TOON格式输出,例如:
products[2]{id,name,price}:
1,Widget A,19.99
2,Widget B,29.99

这能可靠地引导Sonnet输出正确的格式。

5.4 基准测试的局限性与未来工作

需要坦诚说明本次测试的局限性:

  1. 数据规模 :准确性测试仅基于S和M尺寸,L尺寸只统计了令牌数。在真实生产环境中,海量数据下的准确性衰减可能更复杂。
  2. 数据真实性 :测试数据由脚本生成,干净规整。现实数据充满噪音、缺失字段和特殊字符,这可能影响格式效率的排名。
  3. 评估范围 :自动评分仅覆盖4类任务(商品、任务、架构、API文档)。指令、规则等场景采用人工评估,可能存在主观偏差。
  4. 实验室环境 :这是在受控环境下的基准测试,并未在真实的、有用户交互的生产流量上进行A/B测试。生产环境中的表现仍需验证。

这些局限性也是未来的改进方向。我已在GitHub上开源了所有的测试代码、120个数据文件、问题集和评分脚本。欢迎社区复现、挑战并扩展这个基准,例如加入XML、自定义分隔符格式,或者测试更复杂、更“脏”的真实数据集。只有通过持续的、开放的测试,我们才能更深入地理解这些强大工具的经济学。

更多推荐