首页 › AI Agent › AI Agent 开发实战 › 第十七节 TOON格式:节省50%大模型Token消耗

第十七节 TOON格式:节省50%大模型Token消耗

​

飞书文档 - 图片

​

一、什么是TOON格式​

TOON(Token-Oriented Object Notation,面向Token的对象表示法)是一种专为与大语言模型高效通信而设计的数据序列化格式。​

与为JavaScript互操作性设计的JSON不同,TOON优先考虑:​

​

🤜

最小Token用量:每个语法元素都针对分词器效率进行优化​

LLM可读性:结构化设计便于AI模型理解​

人类可读性:类似YAML的简洁缩进语法​

类型保留:保持所有JSON数据类型(字符串、数字、布尔值、null、数组、对象)​

​

为什么Token优化很重要​

​

#qidNMsoTiBlT text { white-space: pre; }#qidNMsoTiBlT .fb0 { stroke: var(--N900-FG, 0.15); }#qidNMsoTiBlT .fb0 {stroke: rgba(31,35,41, 0.15)}#qidNMsoTiBlT .fx0 { stroke-miterlimit: 10; }#qidNMsoTiBlT .fx0 {stroke-miterlimit: 10}#qidNMsoTiBlT .fa1 { fill: rgb(187, 191, 196); }#qidNMsoTiBlT .fa1 {fill: rgb(187, 191, 196)}#qidNMsoTiBlT .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#qidNMsoTiBlT .fx1 {font-style: normal}#qidNMsoTiBlT .fx2 { text-anchor: middle; }#qidNMsoTiBlT .fx2 {text-anchor: middle}#qidNMsoTiBlT .fx3 { dominant-baseline: central; }#qidNMsoTiBlT .fx3 {dominant-baseline: central}#qidNMsoTiBlT .fx4 { stroke: none; }#qidNMsoTiBlT .fx4 {stroke: none}#qidNMsoTiBlT .fc0 { fill: var(--text-caption); }#qidNMsoTiBlT .fc0 {fill: #646a73}#qidNMsoTiBlT .fa2 { fill: var(--text-link-disabled); }#qidNMsoTiBlT .fa2 {fill: rgb(187, 191, 196)}#qidNMsoTiBlT .fa3 { fill: rgb(246, 248, 250); }#qidNMsoTiBlT .fa3 {fill: rgb(246, 248, 250)}#qidNMsoTiBlT .fx5 { font: 400 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#qidNMsoTiBlT .fx5 {font-style: normal}#qidNMsoTiBlT .fx6 { text-anchor: start; }#qidNMsoTiBlT .fx6 {text-anchor: start}#qidNMsoTiBlT .fx7 { dominant-baseline: alphabetic; }#qidNMsoTiBlT .fx7 {dominant-baseline: alphabetic}#qidNMsoTiBlT .fc1 { fill: rgb(51, 51, 51); }#qidNMsoTiBlT .fc1 {fill: rgb(51, 51, 51)}#qidNMsoTiBlT .fb1 { fill: var(--N900-FG, 0.15); }#qidNMsoTiBlT .fb1 {fill: rgba(31,35,41, 0.15)}#qidNMsoTiBlT .fb2 { fill: rgb(225, 228, 232); }#qidNMsoTiBlT .fb2 {fill: rgb(225, 228, 232)}#qidNMsoTiBlT .fa4 { fill: var(--bg-body); }#qidNMsoTiBlT .fa4 {fill: #fff}ABC12345模型GPT-4 TurboGPT-4oClaude 3 OpusClaude 3.5 Sonnet每百万输入Token成本$10.00$5.00$15.00$3.00月度节省(50%减少)每百万Token节省$5.00每百万Token节省$2.50每百万Token节省$7.50每百万Token节省$1.50

​

对于每月处理数百万Token的应用,TOON可以节省数千美元的成本。​

二、TOON与JSON的Token对比​

示例1:用户数据​

JSON格式(156字符,约39个Token):​

​

代码块​

JSON

{"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):​

​

代码块​

YAML

users[3]{id,name,role,active}:1,Alice,admin,true2,Bob,user,true3,Charlie,user,false​

​

示例2:API响应​

JSON格式(289字符,约72个Token):​

​

代码块​

JSON

{"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):​

​

代码块​

YAML

status: successdata:products[3]{sku,name,price,stock}:A001,Widget,29.99,150A002,Gadget,49.99,75A003,Gizmo,19.99,200timestamp: 2026-01-10T10:30:00Z​

​

三、TOON语法详解​

基本类型​

​

代码块​

YAML

# 字符串(简单字符串无需引号)name: Alicemessage: Hello World# 数字age: 25price: 99.99negative: -42# 布尔值active: truedeleted: false# 空值data: null​

​

对象​

​

代码块​

YAML

# 简单对象user:name: Aliceage: 25email: alice@example.com# 嵌套对象config:database:host: localhostport: 5432cache:enabled: truettl: 3600​

​

数组​

​

代码块​

YAML

# 简单数组colors[3]:redgreenblue# 对象数组(紧凑表格格式)users[3]{id,name,role}:1,Alice,admin2,Bob,user3,Charlie,guest# 混合数组items[4]:string value42truenull​

​

表格格式(核心创新)​

TOON最强大的特性是针对具有一致键的对象数组的表格格式:​

​

代码块​

YAML

​

​

这消除了每个对象重复键名的问题,而这正是JSON数组中Token浪费的主要来源。​

​

四、实际应用场景​

ChatGPT函数调用​

在使用GPT-4的函数调用时,响应数据可以使用TOON格式:​

​

代码块​

JavaScript

const systemPrompt = `​

返回结构化数据时,使用TOON格式:​

- 对象使用缩进​

- 对象数组使用表格格式:name[count]{keys}: values​

- 这可以显著减少Token用量​

`;​

​

RAG(检索增强生成)​

在向提示词注入上下文时,TOON显著减少Token开销:​

​

代码块​

JavaScript

// 使用JSON上下文const jsonContext = JSON.stringify(documents); // 约2000 Token// 使用TOON上下文const toonContext = encode(documents); // 约1200 Token(节省40%)​

​

结构化输出解析​

请求LLM以TOON格式输出以便高效解析:​

​

代码块​

JavaScript

const prompt = `​

分析以下文本并以TOON格式返回结果:​

​

文本:"${userInput}"​

​

返回格式:​

sentiment: positive/negative/neutral​

confidence: 0-1​

keywords[n]:​

keyword1​

keyword2​

entities[n]{type,value,confidence}:​

type1,value1,conf1​

`;​

​

批量处理​

对于批量API调用,TOON大幅降低成本:​

​

代码块​

JavaScript

// 处理1000条记录// JSON:约50,000 Token// TOON:约30,000 Token// 按GPT-4费率计算,每批次节省:$0.20​

​

五、实现指南​

安装​

​

代码块​

Bash

npm install @toon-format/toon​

​

基本用法​

​

代码块​

JavaScript

import { encode, decode } from '@toon-format/toon';​

​

​

与OpenAI集成​

​

代码块​

JavaScript

import OpenAI from 'openai';​

import { encode, decode } from '@toon-format/toon';​

​

const openai = new OpenAI();​

​

Token估算​

​

代码块​

JavaScript

function estimateTokens(text) {​

// 粗略估算:约4个字符对应1个Tokenreturn 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}%`​

​

六、最佳实践​

对同构数组使用表格格式​

​

代码块​

YAML

# 推荐:对一致的对象使用表格格式orders[100]{id,customer,total,status}:1,Alice,99.99,shipped2,Bob,149.99,pending...# 避免:当键一致时使用单独的对象orders:- id: 1customer: Alicetotal: 99.99status: shipped​

​

保持键名简短但有意义​

​

代码块​

YAML

# 推荐:简洁的键名users[3]{id,nm,rl,act}:1,Alice,admin,true# 避免:冗长的键名users[3]{userId,userName,userRole,isActive}:1,Alice,admin,true​

​

批量处理相似操作​

​

代码块​

YAML

# 推荐:批量处理多个项目updates[5]{id,field,value}:1,status,active2,status,inactive3,name,NewName4,email,new@email.com5,role,admin​

​

发送前验证​

​

代码块​

JavaScript

import { encode, decode } from '@toon-format/toon';​

​

function validateToon(toonString) {​

try {​

const parsed = decode(toonString);​

const reencoded = encode(parsed);​

return true;​

​

七、常见问题​

TOON与所有LLM兼容吗?​

是的,TOON设计为可被任何能理解结构化文本的LLM解析。它与GPT-4、Claude、Gemini和其他主流模型配合良好。由于格式易于人类阅读,LLM无需特殊训练即可解释。​

TOON能处理复杂的嵌套结构吗?​

完全可以。TOON支持对象和数组的任意嵌套。但是,对于具有一致键的对象数组,Token节省最为显著。​

JSON转换为TOON会丢失数据吗?​

不会,TOON是无损格式。所有JSON数据类型(字符串、数字、布尔值、null、数组、对象)在转换过程中都会保留。​

如何处理TOON中的特殊字符?​

包含逗号、冒号或换行符的字符串应使用引号。编码器会自动处理:​

​

代码块​

YAML

message: "Hello, World!"path: "C:\\Users\\name"​

​

编码/解码的性能开销是多少?​

编码/解码非常快(典型负载为微秒级)。由于减少API延迟而节省的时间通常远超编码开销。​

八、总结​

TOON格式代表了与LLM高效数据通信的重大进步。通过减少30-50%的Token用量,它提供:​

​

🤜

•

成本节省:直接降低API成本​

•

更快响应:更少的Token意味着更低的延迟​

​

随着LLM使用量持续增长,优化Token效率变得越来越重要。TOON提供了一个实用的、生产就绪的解决方案,可以以最小的努力集成到现有工作流程中。​

​