博客 / 詳情

返回

LLM調用的最佳數據格式:TOON,成本直降50%|附Java使用指南

在大模型逐漸融入業務系統的階段,結構化數據輸入/輸出已成為落地應用的必需: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呢?留言區可以聊一聊。

更多技術乾貨分享可以關注我的代碼世界
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.