TOON 协议与 AIDotNet.Toon 实践指南

news/2025/11/4 12:52:55/文章来源:https://www.cnblogs.com/token-ai/p/19189892

一、TOON 是什么

官方定义要点摘录(来源:toon-format/toon 仓库 README):

  • Token-efficient:通常比 JSON 少 30–60% 的 tokens(Key Features 列表)
  • LLM-friendly guardrails:显式长度与字段,便于验证
  • Minimal syntax:移除冗余标点(大括号、方括号、许多引号)
  • Indentation-based structure:类似 YAML,以空白缩进代替大括号
  • Tabular arrays:一次声明列头,数据按行流式书写

官方基准与工具:

  • README 的 Benchmarks 表格展示了多个数据集下的 token 节省比例;此外提供“Format Tokenization Playground”可交互比较不同格式的 token 用量
  • 当前规范版本:v1.3(README 徽章与 SPEC.md 指向的专用仓库)

规范入口与一致性:

  • 规范迁移至独立仓库:https://github.com/toon-format/spec(SPEC.md 明确“moved to a dedicated repository”)
  • 跨语言一致性依赖 conformance tests(README 的 Other Implementations 区块提供说明)

二、为什么 TOON 相比 JSON 更省 tokens

本质原因是“以结构换冗余”:在 LLM 语境下,重复的键名和标点都会占用 tokens。TOON 通过以下策略显著减少冗余(均可在 README 与语法速查中找到实例):

  • 表格数组:为均匀对象数组声明一次列头,如 users[2]{id,name}: 后续行直接写 1,Alice
  • 行内原子数组:tags[3]: a,b,c,避免多余方括号与引号
  • 键名可不加引号:安全键裸写,减少引号数量
  • 缩进代替大括号:以空白表达层级

同时,官方 README 也清晰指出边界:对于深度嵌套或非均匀结构的数据,JSON 可能更高效。这意味着在“树深且分支不规则”的任务上应优先评估 JSON。

三、语法速查与对照示例

下列示例与含义对应自 README 的 Syntax Cheatsheet 与“Why TOON”示例(术语与格式请以规范 v1.3 为准):

  • 对象
    { id: 1, name: 'Ada' } → id: 1 换行 name: Ada

  • 嵌套对象
    { user: { id: 1 } } → user: 换行缩进 id: 1

  • 行内原子数组
    { tags: ['foo', 'bar'] } → tags[2]: foo,bar

  • 表格数组(均匀对象)
    { items: [ { id: 1, qty: 5 }, { id: 2, qty: 3 } ] }
    → items[2]{id,qty}: 换行缩进 1,5 换行缩进 2,3

  • 混合或非均匀数组
    { items: [ 1, { a: 1 }, 'x' ] } → items[3]: 换行缩进 - 1 换行缩进 - a: 1 换行缩进 - x

四、AIDotNet.Toon:.NET 实现概览

AIDotNet.Toon 对齐 upstream 规范与设计,面向 .NET 提供与 System.Text.Json 风格一致的 API。关键入口如下:

  • 序列化: C#.ToonSerializer.Serialize() · C#.ToonSerializer.Serialize()
  • 反序列化: C#.ToonSerializer.Deserialize() · C#.ToonSerializer.Deserialize()
  • 编码实现: C#.ToonEncoder.Encode()
  • 解码实现: C#.ToonDecoder.DecodeToJsonString()
  • 选项模型: C#.ToonSerializerOptions · 分隔符枚举 C#.ToonDelimiter · 默认实例 C#.ToonSerializerOptions.Default
  • 错误模型: C#.ToonFormatException

实现思路(节选自源码注释与 README):

  • Encode 路径:.NET 对象 → JsonElement → Encoders 结构化写出(对象、行内原子数组、表格数组、列表回退等)
  • Decode 路径:TOON → 规范化 JSON 字符串 → System.Text.Json 反序列化为目标类型
  • 数值与特殊值:允许命名浮点字面量,经编码阶段将 NaN 与 ±Infinity 规范化为 null,-0 规范化为 0(细节见编码器与选项)

五、安装与快速开始

通过 NuGet(发布后)或源码引入本库:

dotnet add package AIDotNet.Toon
using AIDotNet.Toon;var options = new ToonSerializerOptions
{Indent = 2,Delimiter = ToonDelimiter.Comma,Strict = true,LengthMarker = null
};var data = new
{users = new[] { new { id = 1, name = "Alice" }, new { id = 2, name = "Bob" } },tags = new[] { "a", "b", "c" },numbers = new[] { 1, 2, 3 }
};var text = ToonSerializer.Serialize(data, options);
// users[2]{id,name}:
//   1,Alice
//   2,Bob
// tags[3]: a,b,c
// numbers[3]: 1,2,3

读取原子值:

var s = ToonSerializer.Deserialize<string>("hello", options);   // "hello"
var n = ToonSerializer.Deserialize<double>("3.1415", options);  // 3.1415

互操作:TOON ↔ JSON ↔ .NET

// 将 TOON 文本转为目标类型,内部先经 [C#.ToonDecoder.DecodeToJsonString()](src/AIDotNet.Toon/ToonDecoder.cs:15)
var user = ToonSerializer.Deserialize<Dictionary<string, object>>("id: 1", options);// 将 .NET 对象经 JSON DOM 编码为 TOON
var t = ToonSerializer.Serialize(new { id = 1, name = "Ada" }, options);

六、选项与行为

统一选项入口 C#.ToonSerializerOptions 与默认预设 C#.ToonSerializerOptions.Default:

  • Indent:每级缩进空格数,默认 2
  • Delimiter:分隔符,枚举 C#.ToonDelimiter,用于行内与表格;底层转换为具体字符见 C#.ToonSerializerOptions.GetDelimiterChar()
  • Strict:严格模式,校验缩进、空行、计数一致性等
  • LengthMarker:数组长度标记,仅支持 # 或 null
  • JsonOptions:直通 System.Text.Json;默认启用 AllowNamedFloatingPointLiterals,并注册转换器以将 NaN 与 ±Infinity 写出为 null

七、错误模型与定位

解码错误统一抛出 C#.ToonFormatException 并包含错误分类与位置信息:

  • 工厂方法:Syntax C#.ToonFormatException.Syntax() · Range C#.ToonFormatException.Range() · Validation C#.ToonFormatException.Validation() · Indentation C#.ToonFormatException.Indentation() · Delimiter C#.ToonFormatException.Delimiter()

八、进阶示例

  1. 表格数组写出
var rows = new[] { new { id = 1, name = "alice" }, new { id = 2, name = "bob" } };
var toon = ToonSerializer.Serialize(rows, options);
// [2]{id,name}:
//   1,alice
//   2,bob
  1. 行内原子数组
var arr = new[] { 1, 2, 3 };
var t2 = ToonSerializer.Serialize(arr, options); // "[3]: 1,2,3"
  1. 混合数组回退为列表
var mixed = new object[] { 1, new { a = 1 }, "x" };
var t3 = ToonSerializer.Serialize(mixed, options);
// [3]:
//   - 1
//   - a: 1
//   - x

九、何时使用 TOON,何时选 JSON

基于官方 README 的定位:当你的数据是“均匀对象数组、字段重复较多、需要给 LLM 更大输入上下文”时,TOON 通常更省 tokens 且更易校验验证;当数据“深度嵌套、非均匀或树形变化大”时,JSON 可能更高效更直接。

十、数据流与实现关系图

十一、来源与参考

  • 官方仓库与 README:https://github.com/toon-format/toon
  • 规范仓库 v1.3:https://github.com/toon-format/spec
  • README“Key Features”“Benchmarks”“Syntax Cheatsheet”“Other Implementations”板块提供了本文引用的特性描述、节省比例与示例
  • 本文 .NET 实现地址:https://github.com/AIDotNet/Toon.NET

十二、结语

TOON 让 LLM 输入里的结构化数据更加紧凑、可校验、可读;AIDotNet.Toon 则在 .NET 世界提供熟悉的 API 体验与选项模型。建议从表格数组与行内原子数组的典型场景开始落地,并结合规范 v1.3 与测试数据持续验证。

Special thanks to the upstream project toon-format.

附:官方 Benchmarks 数据集节选

以下数字直接摘录自官方 README 的 Benchmarks「Token Efficiency」小节,原文与上下文见:https://github.com/toon-format/toon#benchmarks(其中提示这些数据集偏向 TOON 的优势场景:均匀表格化数据,真实效果取决于数据结构)。交互式对比工具:

Token 效率

⭐ GitHub Repositories ██████████████░░░░░░░░░░░ 8,745 tokens
vs JSON (-42.3%) 15,145
vs JSON compact (-23.7%) 11,455
vs YAML (-33.4%) 13,129
vs XML (-48.8%) 17,095

📈 Daily Analytics ██████████░░░░░░░░░░░░░░░ 4,507 tokens
vs JSON (-58.9%) 10,977
vs JSON compact (-35.7%) 7,013
vs YAML (-48.8%) 8,810
vs XML (-65.7%) 13,128

🛒 E-Commerce Order ████████████████░░░░░░░░░ 166 tokens
vs JSON (-35.4%) 257
vs JSON compact (-2.9%) 171
vs YAML (-15.7%) 197
vs XML (-38.7%) 271

─────────────────────────────────────────────────────────────────────
Total ██████████████░░░░░░░░░░░ 13,418 tokens
vs JSON (-49.1%) 26,379
vs JSON compact (-28.0%) 18,639
vs YAML (-39.4%) 22,136
vs XML (-56.0%) 30,494

检索准确率

4 种大型语言模型在 154 个数据检索问题上的准确率:

gpt-5-nano
→ TOON ███████████████████░ 96.1% (148/154)
CSV ██████████████████░░ 91.6% (141/154)
YAML ██████████████████░░ 91.6% (141/154)
JSON compact ██████████████████░░ 91.6% (141/154)
XML █████████████████░░░ 87.0% (134/154)
JSON █████████████████░░░ 86.4% (133/154)

claude-haiku-4-5-20251001
JSON ██████████░░░░░░░░░░ 50.0% (77/154)
YAML ██████████░░░░░░░░░░ 49.4% (76/154)
→ TOON ██████████░░░░░░░░░░ 48.7% (75/154)
XML ██████████░░░░░░░░░░ 48.1% (74/154)
CSV █████████░░░░░░░░░░░ 47.4% (73/154)
JSON compact █████████░░░░░░░░░░░ 44.2% (68/154)

gemini-2.5-flash
CSV ██████████████████░░ 87.7% (135/154)
XML ██████████████████░░ 87.7% (135/154)
→ TOON █████████████████░░░ 86.4% (133/154)
YAML ████████████████░░░░ 79.9% (123/154)
JSON compact ████████████████░░░░ 79.9% (123/154)
JSON ███████████████░░░░░ 76.6% (118/154)

grok-4-fast-non-reasoning
→ TOON ██████████░░░░░░░░░░ 49.4% (76/154)
JSON ██████████░░░░░░░░░░ 48.7% (75/154)
XML █████████░░░░░░░░░░░ 46.1% (71/154)
YAML █████████░░░░░░░░░░░ 46.1% (71/154)
JSON compact █████████░░░░░░░░░░░ 45.5% (70/154)
CSV █████████░░░░░░░░░░░ 44.2% (68/154)

注意:上述样本强调 TOON 在“均匀对象数组/表格化数据”场景的节省效果;对于深度嵌套或非均匀数据,官方 README 指出 JSON 可能更高效。建议在落地前结合自身数据结构评估与小规模验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/955579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杂题选做-4

#31 P2824 注意到只有一次询问,那么我们可以离线处理。 然后我们考虑一个弱化的问题,值域只有 \(\{0,1\}\)。 那么我们我们在处理的时候可以直接将区间 \([l,r]\) 内的一的数量 \(k\) 询问出来,然后将 \([l,r-k]\) …

2025 年 11 月江阴商标注册服务商权威推荐榜:专业代理机构实力解析与高效申请指南

2025 年 11 月江阴商标注册服务商权威推荐榜:专业代理机构实力解析与高效申请指南 在当今知识产权保护日益重要的商业环境中,商标注册已成为企业品牌建设与市场保护的重要环节。江阴作为长三角地区重要的制造业基地和…

2025 年 11 月江阴商标注册服务商权威推荐榜:专业代理机构与高效申请流程口碑之选

2025 年 11 月江阴商标注册服务商权威推荐榜:专业代理机构与高效申请流程口碑之选 在知识产权保护日益重要的今天,商标注册已成为企业品牌建设的关键环节。江阴作为长三角地区重要的制造业基地,企业对商标注册服务的…

详细介绍:安全框架 SpringSecurity 入门(超详细,IDEA2024)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

洛谷 P1780 染色的立方体 题解报告

赛时经历 赛时没有注意复杂度,以为暴力搜索会超时,于是喜提爆零。 思路 暴力搜索加贪心。 暴力搜索部分 复杂度证明 大家应该都玩过骰子吧,玩久了就会发现,一个骰子如果分出方向的话,一共有 \(24\) 种摆放方法。 …

P11.常见的transforms(一)

P11.常见的transforms(一)11.1_call_使用11.2ToTensor使用 1.代码如下:点击查看代码 from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transformsimg = Image.o…

2025年11月上海装修公司榜单:松江千州装饰真实口碑深度解析

站在收房钥匙与装修合同之间,多数上海业主的第一道焦虑是“谁能把图纸变成可住的家,又不让钱包失控”。2025年三季度上海市消保委统计,家装投诉量仍居服务类前五,其中“工期拖延、增项、售后失联”占七成。政策层面…

2025年11月上海装修公司排行榜:从设计到交付的完整评价指南

站在收房钥匙与装修合同之间,多数上海业主的第一道焦虑是“到底把家交给谁”。市区老房翻新、松江新城首套、徐汇学区房改造,不同场景背后却是同一串痛点:预算随时失控、工期一拖再拖、隐蔽工程看不见摸不着、设计师…

2025年11月上海装修公司排名榜:十强对比看谁更值

在上海这样的一线城市,装修不仅关乎居住舒适度,更直接影响资产保值。多数业主面临“预算有限、工期紧张、风格难定、增项频发”四大痛点,同时担心设计落地差、隐蔽工程隐患、售后无人响应。2025年上海市住建委公开数…

Web开发的坑

坑 1. AbortController 不支持复用, 每次 abort 后会永久变为 aborted 且无法重置, 只能重新创建 😦

Web开发的坑

坑 1. AbortController 不支持复用, 每次 abort 后会永久变为 aborted 且无法重置, 只能重新创建 😦

5.吴恩达机器学习—神经网络的基础使用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

前端三剑客——javascript内置对象与其方法

大纲:1.对象创建的常用3种方法 引用/新增属性方法2.内置对象及其常见方法NumberMathDateStringArray对象与数组的解包操作以及在函数中的运用JSONconsole对象创建的方法对象创建的常用三种方法//方法一 直接创建有…

2025 年 11 月 PCD 铣刀厂家推荐排行榜,金刚石铣刀,聚晶金刚石铣刀,超硬刀具,高精度 PCD 铣刀公司推荐

2025 年 11 月 PCD 铣刀厂家推荐排行榜:金刚石铣刀与超硬刀具的技术演进与选购指南 随着制造业向高精度、高效率方向不断发展,聚晶金刚石(PCD)铣刀作为超硬刀具的重要类别,在航空航天、精密模具、电子零部件等领域…

2025 年 11 月平面铣刀厂家推荐排行榜,钨钢平面铣刀,合金平面铣刀,数控平面铣刀,高精度平面铣刀公司推荐

2025 年 11 月平面铣刀厂家推荐排行榜 在精密制造领域,平面铣刀作为数控加工的核心工具,其性能直接影响加工效率和产品质量。随着制造业向高精度、高效率方向发展,钨钢平面铣刀、合金平面铣刀、数控平面铣刀等产品的…

2025 年 11 月侧铣刀厂家推荐排行榜,钨钢侧铣刀,不锈钢侧铣刀,铝合金侧铣刀,高硬度侧铣刀公司推荐

2025 年 11 月侧铣刀厂家推荐排行榜:钨钢、不锈钢、铝合金及高硬度侧铣刀权威指南 在精密加工领域,侧铣刀作为关键切削工具,其性能直接影响加工效率与成品质量。随着制造业向高精度、高效率方向发展,对侧铣刀的技术…

2025年11月适合初中生的学习机品牌排行:市场热销榜全维度评价

进入初中,学科陡增、题型翻新、时间被作业和补习班切割得七零八落,家长最怕“盲目刷题”和“哑巴英语”同时出现。一台能把“精准练”和“听说读写”一次打包的学习机,成为不少家庭双减后的新刚需。工信部《2024在线…

《算法闯关指南:优选算法--滑动窗口》--15.串联所有单词的子串,16.最小覆盖子串 - 实践

《算法闯关指南:优选算法--滑动窗口》--15.串联所有单词的子串,16.最小覆盖子串 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

2025年11月适合初中生的学习机品牌评测:五款主流机型横向对比

孩子升入初中,学科陡增、难度陡升,家长最焦虑的莫过于“课上听懂了,回家不会写”“题海战术耗时低效”。一台能把校内教材、校外拓展、错题管理、AI精准练一次打包的学习机,成为不少家庭双十一清单里的刚需。教育部…

2025年11月适合初中生的学习机品牌推荐:权威榜单对比与口碑评测

进入初中,学科陡增、难度升级,家长最焦虑的往往不是“买不买学习机”,而是“买哪台才能真正帮孩子减负提分”。新课标下题型更灵活,数学理化实验探究、英语听说机考、语文跨学科阅读,样样都在挑战孩子的自学能力。…