随着大语言模型(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节省效果?试试我们的免费在线转换器!
什么是TOON格式
TOON(Token-Oriented Object Notation,面向Token的对象表示法)是一种专为与大语言模型高效通信而设计的数据序列化格式。与为JavaScript互操作性设计的JSON不同,TOON优先考虑:
- 最小Token用量:每个语法元素都针对分词器效率进行优化
- LLM可读性:结构化设计便于AI模型理解
- 人类可读性:类似YAML的简洁缩进语法
- 类型保留:保持所有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格式: