TOON 格式 - 面向 Token 的对象表示法

随着大语言模型(LLM)在现代应用中的重要性日益增加,API调用成本已成为开发者关注的重点。Token用量直接影响成本和延迟。TOON(Token-Oriented Object Notation)应运而生——这是一种专为最小化Token消耗而设计的革命性数据格式,同时保持数据完整性。

📋 目录

核心要点

  • Token节省:TOON通常比JSON减少30-50%的Token用量,直接降低LLM API成本
  • LLM兼容性:TOON设计为可被GPT-4、Claude等模型轻松解析,无需特殊指令
  • 无损转换:TOON保留JSON的所有数据类型和结构,确保信息不丢失
  • 简洁语法:使用类似YAML的缩进结构,既易于阅读又节省Token
  • 生产就绪:npm包 @toon-format/toon 可立即集成使用

想要将JSON数据转换为TOON格式并查看Token节省效果?试试我们的免费在线转换器!

👉 试用JSON转TOON转换器

什么是TOON格式

TOON(Token-Oriented Object Notation,面向Token的对象表示法)是一种专为与大语言模型高效通信而设计的数据序列化格式。与为JavaScript互操作性设计的JSON不同,TOON优先考虑:

  1. 最小Token用量:每个语法元素都针对分词器效率进行优化
  2. LLM可读性:结构化设计便于AI模型理解
  3. 人类可读性:类似YAML的简洁缩进语法
  4. 类型保留:保持所有JSON数据类型(字符串、数字、布尔值、null、数组、对象)

为什么Token优化很重要

模型 每百万输入Token成本 月度节省(50%减少)
GPT-4 Turbo $10.00 每百万Token节省$5.00
GPT-4o $5.00 每百万Token节省$2.50
Claude 3 Opus $15.00 每百万Token节省$7.50
Claude 3.5 Sonnet $3.00 每百万Token节省$1.50

对于每月处理数百万Token的应用,TOON可以节省数千美元的成本。

TOON与JSON的Token对比

示例1:用户数据

JSON格式(156字符,约39个Token):

{
  "users": [
    {"id": 1, "name": "Alice", "role": "admin", "active": true},
    {"id": 2, "name": "Bob", "role": "user", "active": true},
    {"id": 3, "name": "Charlie", "role": "user", "active": false}
  ]
}

TOON格式(98字符,约25个Token):

users[3]{id,name,role,active}:
  1,Alice,admin,true
  2,Bob,user,true
  3,Charlie,user,false

节省:约36%的Token

示例2:API响应

JSON格式(289字符,约72个Token):

{
  "status": "success",
  "data": {
    "products": [
      {"sku": "A001", "name": "Widget", "price": 29.99, "stock": 150},
      {"sku": "A002", "name": "Gadget", "price": 49.99, "stock": 75},
      {"sku": "A003", "name": "Gizmo", "price": 19.99, "stock": 200}
    ]
  },
  "timestamp": "2026-01-10T10:30:00Z"
}

TOON格式(168字符,约42个Token):

status: success
data:
  products[3]{sku,name,price,stock}:
    A001,Widget,29.99,150
    A002,Gadget,49.99,75
    A003,Gizmo,19.99,200
timestamp: 2026-01-10T10:30:00Z

节省:约42%的Token

TOON语法详解

基本类型

# 字符串(简单字符串无需引号)
name: Alice
message: Hello World

# 数字
age: 25
price: 99.99
negative: -42

# 布尔值
active: true
deleted: false

# 空值
data: null

对象

# 简单对象
user:
  name: Alice
  age: 25
  email: alice@example.com

# 嵌套对象
config:
  database:
    host: localhost
    port: 5432
  cache:
    enabled: true
    ttl: 3600

数组

# 简单数组
colors[3]:
  red
  green
  blue

# 对象数组(紧凑表格格式)
users[3]{id,name,role}:
  1,Alice,admin
  2,Bob,user
  3,Charlie,guest

# 混合数组
items[4]:
  string value
  42
  true
  null

表格格式(核心创新)

TOON最强大的特性是针对具有一致键的对象数组的表格格式:

# 语法:arrayName[count]{key1,key2,key3}:
products[5]{id,name,price,category,inStock}:
  1,Laptop,999.99,Electronics,true
  2,Mouse,29.99,Electronics,true
  3,Desk,199.99,Furniture,false
  4,Chair,149.99,Furniture,true
  5,Monitor,299.99,Electronics,true

这消除了每个对象重复键名的问题,而这正是JSON数组中Token浪费的主要来源。

实际应用场景

1. ChatGPT函数调用

在使用GPT-4的函数调用时,响应数据可以使用TOON格式:

const systemPrompt = `
返回结构化数据时,使用TOON格式:
- 对象使用缩进
- 对象数组使用表格格式:name[count]{keys}: values
- 这可以显著减少Token用量
`;

// TOON格式的函数响应示例
const toonResponse = `
searchResults[3]{title,url,snippet}:
  最佳实践指南,/docs/best-practices,了解推荐的方法
  API参考,/docs/api,完整的API文档
  教程,/docs/tutorial,分步指南
`;

2. RAG(检索增强生成)

在向提示词注入上下文时,TOON显著减少Token开销:

// 使用JSON上下文
const jsonContext = JSON.stringify(documents); // 约2000 Token

// 使用TOON上下文
const toonContext = encode(documents); // 约1200 Token(节省40%)

3. 结构化输出解析

请求LLM以TOON格式输出以便高效解析:

const prompt = `
分析以下文本并以TOON格式返回结果:

文本:"${userInput}"

返回格式:
sentiment: positive/negative/neutral
confidence: 0-1
keywords[n]:
  keyword1
  keyword2
entities[n]{type,value,confidence}:
  type1,value1,conf1
`;

4. 批量处理

对于批量API调用,TOON大幅降低成本:

// 处理1000条记录
// JSON:约50,000 Token
// TOON:约30,000 Token
// 按GPT-4费率计算,每批次节省:$0.20

实现指南

安装

npm install @toon-format/toon

基本用法

import { encode, decode } from '@toon-format/toon';

// 将JSON转换为TOON
const jsonData = {
  users: [
    { id: 1, name: 'Alice', role: 'admin' },
    { id: 2, name: 'Bob', role: 'user' }
  ]
};

const toonString = encode(jsonData);
console.log(toonString);
// 输出:
// users[2]{id,name,role}:
//   1,Alice,admin
//   2,Bob,user

// 将TOON转换回JSON
const parsedData = decode(toonString);
console.log(JSON.stringify(parsedData, null, 2));

与OpenAI集成

import OpenAI from 'openai';
import { encode, decode } from '@toon-format/toon';

const openai = new OpenAI();

async function queryWithToon(data) {
  const toonData = encode(data);
  
  const response = await openai.chat.completions.create({
    model: 'gpt-4-turbo',
    messages: [
      {
        role: 'system',
        content: '处理以下TOON格式的数据,并以TOON格式响应。'
      },
      {
        role: 'user',
        content: toonData
      }
    ]
  });
  
  return decode(response.choices[0].message.content);
}

Token估算

function estimateTokens(text) {
  // 粗略估算:约4个字符对应1个Token
  return Math.ceil(text.length / 4);
}

function calculateSavings(jsonData) {
  const jsonString = JSON.stringify(jsonData);
  const toonString = encode(jsonData);
  
  const jsonTokens = estimateTokens(jsonString);
  const toonTokens = estimateTokens(toonString);
  const savings = Math.round((1 - toonTokens / jsonTokens) * 100);
  
  return {
    jsonTokens,
    toonTokens,
    savings: `${savings}%`
  };
}

最佳实践

1. 对同构数组使用表格格式

# 推荐:对一致的对象使用表格格式
orders[100]{id,customer,total,status}:
  1,Alice,99.99,shipped
  2,Bob,149.99,pending
  ...

# 避免:当键一致时使用单独的对象
orders:
  - id: 1
    customer: Alice
    total: 99.99
    status: shipped

2. 保持键名简短但有意义

# 推荐:简洁的键名
users[3]{id,nm,rl,act}:
  1,Alice,admin,true

# 避免:冗长的键名
users[3]{userId,userName,userRole,isActive}:
  1,Alice,admin,true

3. 批量处理相似操作

# 推荐:批量处理多个项目
updates[5]{id,field,value}:
  1,status,active
  2,status,inactive
  3,name,NewName
  4,email,new@email.com
  5,role,admin

4. 发送前验证

import { encode, decode } from '@toon-format/toon';

function validateToon(toonString) {
  try {
    const parsed = decode(toonString);
    const reencoded = encode(parsed);
    return true;
  } catch (e) {
    console.error('无效的TOON:', e.message);
    return false;
  }
}

常见问题

TOON与所有LLM兼容吗?

是的,TOON设计为可被任何能理解结构化文本的LLM解析。它与GPT-4、Claude、Gemini和其他主流模型配合良好。由于格式易于人类阅读,LLM无需特殊训练即可解释。

TOON能处理复杂的嵌套结构吗?

完全可以。TOON支持对象和数组的任意嵌套。但是,对于具有一致键的对象数组,Token节省最为显著。

JSON转换为TOON会丢失数据吗?

不会,TOON是无损格式。所有JSON数据类型(字符串、数字、布尔值、null、数组、对象)在转换过程中都会保留。

如何处理TOON中的特殊字符?

包含逗号、冒号或换行符的字符串应使用引号。编码器会自动处理:

message: "Hello, World!"
path: "C:\\Users\\name"

编码/解码的性能开销是多少?

编码/解码非常快(典型负载为微秒级)。由于减少API延迟而节省的时间通常远超编码开销。

总结

TOON格式代表了与LLM高效数据通信的重大进步。通过减少30-50%的Token用量,它提供:

  • 成本节省:直接降低API成本
  • 更快响应:更少的Token意味着更低的延迟
  • 更高吞吐量:在速率限制内处理更多数据
  • 更清晰的提示词:更易读的结构化数据

随着LLM使用量持续增长,优化Token效率变得越来越重要。TOON提供了一个实用的、生产就绪的解决方案,可以以最小的努力集成到现有工作流程中。

准备好开始节省Token了吗?使用我们的免费在线工具将JSON数据转换为TOON格式:

👉 JSON转TOON转换器

👉 TOON转JSON转换器