在大模型逐漸融入業務系統的階段,結構化數據輸入/輸出已成為落地應用的必需:RAG 檢索結果、Agent 工具調用參數、業務查詢結果、批處理列表等都需要讓自然語言與“可機讀”的結構化格式互通。事實標準是 JSON,但在高頻調用、海量數據場景下,JSON 的標點開銷會顯著推高 token 成本。
如下JSON格式的例子:
{
"users": [
{"id": 1, "name": "Alice", "role": "admin"},
{"id": 2, "name": "Bob", "role": "user"}
]
}
Tokens 為 47:
採用 TOON 格式之後,內容明顯減少:
users[2]{id,name,role}:
1,Alice,admin
2,Bob,user
Tokens 為:24
差異的核心在於:TOON 用“縮進 + 一次性字段聲明”的方式消除了絕大部分語法標點的冗餘;當你在生產環境每天傳輸成千上萬條記錄時,冗餘標點的累計開銷會直接轉化為可觀的 API 費用。實踐表明,TOON 在輸入側常帶來 40–60% 的 token 節省。
基準測試:TOKEN減少、準確率上升
TOON格式在LLM調用時候除了在Token數量上的優化之外,不可忽略的是LLM檢索準確率。如果單純Token數量減少了,而準確率下降了,那意義就不大了。
以下是TOON官方倉庫給出的綜合效率排名:
TOON ████████████████████ 26.9 │ 73.9% acc │ 2,744 tokens
JSON compact █████████████████░░░ 22.9 │ 70.7% acc │ 3,081 tokens
YAML ██████████████░░░░░░ 18.6 │ 69.0% acc │ 3,719 tokens
JSON ███████████░░░░░░░░░ 15.3 │ 69.7% acc │ 4,545 tokens
XML ██████████░░░░░░░░░░ 13.0 │ 67.1% acc │ 5,167 tokens
TOON 的準確率達到 73.9% (JSON 的準確率為 69.7%),同時使用的標記數減少了 39.6% 。可以看到TOON不僅在Token數量上有優勢,在準確率上也有明顯優勢,更多基準測試結果請參考TOON官方倉庫。
什麼時候不用 TOON
TOON 格式在處理統一類型的對象數組時表現出色,但在某些情況下,其他格式更為合適:
- 嵌套過深或結構不規則 (表格適用性 ≈ 0%):JSON-compact 通常使用較少的標記。例如:具有多個嵌套層的複雜配置對象。
- 半均勻數組 (約 40-60% 符合表格格式):Token節省量減少。如果您的pipline已經依賴於 JSON,則建議優先使用 JSON。
- 純表格數據 :對於平面表格,CSV 比 TOON 格式文件更小。TOON 格式僅需少量額外開銷(約 5-10%)即可提供結構信息(數組長度聲明、字段頭、分隔符作用域),從而提高 LLM 的可靠性。
- 對延遲要求嚴格的應用 :如果端到端響應時間是您的首要考慮因素,請在您的實際環境中進行基準測試。某些部署(尤其是像 Ollama 這樣的本地/量化模型)即使 TOON 的Token數量較少,處理緊湊型 JSON 的速度也可能更快。請測量兩種格式的 TTFT、每秒Token數和總時間,並使用速度更快的格式。
Java 中如何使用 TOON
對於數據格式轉換,各主流語言都有好用的SDK可以直接拿來使用。以Java為例,可以使用:
<dependency>
<groupId>com.felipestanzani</groupId>
<artifactId>jtoon</artifactId>
<version>0.1.2</version>
</dependency>
用法也是非常簡單,核心API如下:
// Java 對象 → TOON 字符串
String toon = JToon.encode(object);
// JSON 字符串 → TOON
String toon = JToon.encodeJson(jsonString);
// TOON → Java 對象
Object obj = JToon.decode(toonString);
// TOON → JSON 字符串
String json = JToon.decodeToJson(toonString);
小結
本文介紹了LLM調用時JSON格式調用在Token消耗的劣勢,從而引出TOON格式。對於合適場景,如果目前Token消耗量偏高的應用,可以考慮在數據格式上進行優化,從而實現成本的優化。目前你都用什麼格式呢?是否有用過TOON呢?留言區可以聊一聊。
更多技術乾貨分享可以關注我的代碼世界