toon
“ 一种紧凑、人类可读的 JSON 数据模型编码方式,专为大型语言模型(LLM)提示设计。它提供了与 JSON 相同的对象、数组和原始类型的无损序列化,但语法更简洁,减少了模型处理时的 token 数量,同时使数据结构更易于模型理解。
Github地址
https://github.com/toon-format/toon
项目特点:
-
Token 高效:通常比格式化的 JSON 少 30%-60% 的 token。 -
LLM 友好:明确的长度和字段声明有助于验证。 -
最小化语法:去除冗余标点符号(大括号、方括号、大多数引号)。 -
基于缩进的结构:类似 YAML,使用空格代替大括号。 -
表格数组:声明键一次,以行的形式流式传输数据。 -
可选键折叠:将单键包装链折叠为点分路径(例如 data.metadata.items),减少缩进和 token。
项目背景
-
随着 AI 技术的发展,上下文窗口变大,数据输入量增加,而 LLM 的 token 仍然有成本。标准 JSON 格式较为冗长,token 开销大。 -
YAML 已经通过更简洁的语法减少了 token 数量,但 TOON 在此基础上进一步优化,结合了 YAML 的缩进结构和类似 CSV 的表格布局,尤其适用于统一对象数组的场景。
格式对比示例
-
JSON 格式:
{
"context":{
"task":"Our favorite hikes together",
"location":"Boulder",
"season":"spring_2025"
},
"friends":["ana","luis","sam"],
"hikes":[
{
"id":1,
"name":"Blue Lake Trail",
"distanceKm":7.5,
"elevationGain":320,
"companion":"ana",
"wasSunny":true
},
{
"id":2,
"name":"Ridge Overlook",
"distanceKm":9.2,
"elevationGain":540,
"companion":"luis",
"wasSunny":false
},
{
"id":3,
"name":"Wildflower Loop",
"distanceKm":5.1,
"elevationGain":180,
"companion":"sam",
"wasSunny":true
}
]
} -
YAML 格式:
context:
task:Ourfavoritehikestogether
location:Boulder
season:spring_2025
friends:
-ana
-luis
-sam
hikes:
-id:1
name:BlueLakeTrail
distanceKm:7.5
elevationGain:320
companion:ana
wasSunny:true
-id:2
name:RidgeOverlook
distanceKm:9.2
elevationGain:540
companion:luis
wasSunny:false
-id:3
name:WildflowerLoop
distanceKm:5.1
elevationGain:180
companion:sam
wasSunny:true -
TOON 格式:
context:
task: Our favorite hikes together
location: Boulder
season: spring_2025
friends[3]: ana,luis,sam
hikes[3]{id,name,distanceKm,elevationGain,companion,wasSunny}:
1,Blue Lake Trail,7.5,320,ana,true
2,Ridge Overlook,9.2,540,luis,false
3,Wildflower Loop,5.1,180,sam,true
适用场景与限制
-
适用场景: -
统一对象数组(每个对象具有相同的字段结构)。 -
需要减少 LLM 处理时的 token 数量。 -
数据结构相对简单,适合表格化表示。 -
不适用场景: -
深度嵌套或非统一结构的数据(JSON 在这种情况下可能更高效)。 -
半统一数组(token 节省有限,如果已有 JSON 管道则建议继续使用 JSON)。 -
纯表格数据(CSV 更小,但 TOON 会增加少量开销以提供结构,从而提高 LLM 的可靠性)。 -
对延迟要求极高的应用场景(在这种情况下,需要在具体环境中进行基准测试,以确定哪种格式更快)。

