什么是卡通?

卡通
JSON
优化

我们都去过那里。 您正在设计大型语言模型 (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 有效地提供了三种处理数组的方法,自动选择最有效的一种:

  1. 内联基元: 对于简单的数字或字符串列表,TOON 保持紧凑。 标签[3]:管理、操作、开发
  1. 标准列表: 对于混合类型,它使用类似于 YAML 的连字符列表语法。
  1. 表格对象: 这是游戏规则的改变者。

如果您有一组共享相同键的对象(数据库记录中非常常见的模式),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 了。