はじめに
最近、LLM に大きめの JSON を渡すとやたらとトークン量が増えてしまい、APIの使用料金が多くなってしまいます。
そうでなくても、
それを解決するものとして最近話題になっているのが TOON(Token-Oriented Object Notation) と言う時ものです。
使うにあたっても詳細を知らないと効率的に使えないので、簡単にまとめてアウトプットしようと思います。
そもそも TOON とは
簡単に言えばとLLM にとって都合の良い JSON の軽量版です。
- JSON と同じようにオブジェクト・配列・プリミティブを扱える
- 余計な記号や繰り返しを省き、トークン数を30〜60%削減できる
- 例としては、
{}等
- 例としては、
つまり JSON を小さくしたものだという解釈でいいでしょう。
具体的にどれくらい違うのでしょうか。
例えば、次のようなテーブルデータを LLM に渡すとします。
[
{ "id": 1, "name": "Alice", "score": 82 },
{ "id": 2, "name": "Bob", "score": 91 }
]
id name score
1 Alice 82
2 Bob 91
これだけで引用符・カンマ・波かっこ等がすべて不要になり、 LLM に投げる際のトークン数も大幅に減ります。
これで請求が少しでも減りますね!(少しだけ)
なお、 TOON は不規則的な構造の場合は不向きなので気をつけましょう。
TOON が使用可能なもの
- TypeScript/JavaScript: @toon-format/toon
https://www.npmjs.com/package/@toon-format/toon - Python: python-toon
https://pypi.org/project/python-toon/
AI 等で使用されるイメージの強い python にはすでに対応しているようです。
おわりに
実際に触ってみたところ思った以上に使いやすかったです。
いろんな言語にもすでに対応していると言うことも大きいでしょう。
もし LLM に大きめの JSON を渡すときは、一度 TOON を試してみる価値はあると思います。
最後までお読みいただきありがとうございました。