什么是卡通?
我们都去过那里。 您正在设计大型语言模型 (LLM) 的提示,并且需要传递结构化数据。 您可以使用 JSON。 毕竟,这是行业标准。 但是当您看到上下文窗口充满了无尽的大括号、重复的键和简单整数周围的引号时,您开始想知道:有更好的方法吗?
YAML 提供了可读性,但存在歧义。 CSV 很密集,但缺乏层次结构。
输入卡通。
TOON 是一种数据序列化格式,对于开发人员来说就像一股新鲜空气,也是人工智能模型的原生语言。 它弥合了人类可读性和机器效率之间的差距。 今天,让我们深入研究 TOON 的语法和机制,了解为什么它迅速成为高效数据交换的最爱。
哲学:JSON 语义,YAML 美学
从本质上讲,TOON 与 JSON 共享完全相同的数据模型。 如果您可以用 JSON 基元(字符串、数字、布尔值、null)、对象和数组来表示它,那么您就可以用 TOON 来表示它。 然而,演示却截然不同。
TOON 放弃了牙套。 它使用缩进来表示层次结构,很像 YAML。 一个简单的对象看起来干净又平易近人:
然而,与 YAML 不同的是,TOON 对类型有严格要求。 无需猜测“no”是否表示“false”或字符串“no”。 在 TOON 中,字符串仅在绝对必要时才需要引号,例如当它们包含特殊字符、类似数字或为空时。 如果您输入“message: Hello World”,您会得到一个字符串。 如果您输入“count: 42”,您会得到一个数字。
编号:123
姓名:艾达
活跃:真实
数组的力量:长度和表
TOON 真正与众不同的地方在于它对数组的处理。 这是令牌优化的“杀手级功能”。
TOON 中的每个数组都在括号中显式声明其长度,如“items[3]”。 这对于人类来说似乎是多余的,但对于法学硕士来说,这是一种超能力。 它允许模型立即验证结构并检测截断。 如果流在两个项目之后中断,但标头承诺三个,则解析器知道出了问题。
TOON 有效地提供了三种处理数组的方法,自动选择最有效的一种:
- 内联基元: 对于简单的数字或字符串列表,TOON 保持紧凑。
标签[3]:管理、操作、开发
- 标准列表: 对于混合类型,它使用类似于 YAML 的连字符列表语法。
- 表格对象: 这是游戏规则的改变者。
如果您有一组共享相同键的对象(数据库记录中非常常见的模式),TOON 将转向 表格格式。 它不是为每一行重复键,而是在标题中声明一次键。
在上面的示例中,“users[2]{id,name,role}:”告诉我们有 2 行并定义了架构。 数据采用类似 CSV 的结构。 这消除了为每个用户重复 "id":、"name": 和 "role": 的大量令牌开销。
用户[2]{id,名称,角色}:
1、爱丽丝管理员,管理员
2、鲍勃·史密斯,用户
分隔符和令牌效率
您可能会注意到上面示例中使用了逗号。 TOON 实际上支持三种分隔符:逗号(默认)、制表符和管道符 (|)。
为什么这很重要? 代币化。
在许多 LLM 分词器中,逗号后跟引号可能会被分成多个标记。 然而,制表符通常可以非常清晰地进行标记。 TOON 允许您在数组头级别切换分隔符。 如果使用制表符分隔符,通常甚至不需要引用包含空格的字符串,从而进一步压缩数据。
该格式足够智能,可以处理“冲突”。 如果您的数据包含活动分隔符,TOON 只会引用该特定值。
项目[2]{sku,名称,数量}:
A1,小部件名称,2
B2,小工具名称,1
关键折叠:拉平曲线
凸显 TOON 对效率的关注的另一个功能是钥匙折叠。 深度嵌套的对象通常会导致缩进的“阶梯”,从而占用水平空间和标记。
如果您有一个很深的层次结构,其中中间对象没有同级对象,TOON 可以将它们折叠成点符号路径。
而不是写:
你可以写:
数据:
元数据:
项目[2]:a,b
此功能自规范 v1.5 起可用,可显着减少行数和缩进标记。 重要的是,这是完全可逆的。 当您在启用路径扩展的情况下解码数据时,它会完美地重建深层对象层次结构。
数据.元数据.项目[2]:a,b
严格和安全
尽管TOON 看起来很简洁,但它的数据并不松散。 它遵守一套严格的引用和转义规则。
字符串通常不加引号,这对于可读性非常有用。 然而,TOON 强制引用边缘情况以确保数据完整性。 如果字符串看起来像数字(例如,“05”或“1e-6”),则会将其引用以防止将其解析为数字。 如果字符串是保留字,如“true”或“null”,则会被引用。
此外,TOON 对数字进行标准化。 它发出规范的十进制形式——输出中没有科学记数法或尾随零——确保一致性。 它甚至可以安全地处理“BigInt”; 如果数字超出安全整数范围,则会将其序列化为字符串,以防止传输过程中精度丢失。
根形式
虽然我们大多数人都使用根对象,但 TOON 很灵活。 文档不必以键值对开头。 它支持根数组(立即以“[N]:”开始)甚至单个根基元。 这种与 JSON 的同等性意味着您可以将 TOON 交换到当前使用 JSON 的几乎任何管道中,前提是您在另一端有解析器。
最后的想法
TOON 不仅仅是“另一种格式”。 它是一个专门的工具,适用于概率模型消耗数据和确定性代码消耗数据的时代。 通过将 JSON 的刚性数据模型与 CSV 的密度和 YAML 的可读性相结合,它在不牺牲类型安全性的情况下解决了上下文窗口优化的特定问题。
如果您正在构建代理、微调模型,或者只是厌倦了滚动无休止的右大括号,那么是时候看看 TOON 了。