こんにちは、MNTSQでエンジニアをやっている平田です。
ありがたいことに生成AI関連のイベントでLTする機会を何度かいただいており、その発表資料の小ネタについて嬉しいコメントをいただきましたので、記事にすることにしました。
トークン節約の方法考えてたら、ぴったりのもの見つけた。JSON を unpretty-print して、改行と空白を消す方法めちゃめちゃよい。https://t.co/hGCW8AT9eL
— Yuto (@YutoY3629) September 4, 2024
はじめに
プロダクトで生成AIを活用する際、トークン数(特に出力)の節約は重要です。 その理由は主に次のようなものです:
また、プロダクトでの生成AI活用では、JSON形式で出力を構造化することが一般的です。 関連する話題として、ChatGPTやGeminiではJSON出力を強制するStructured Outputsが提供されていますね。
この記事では、プロダクトでの生成AI活用を念頭に置き、出力JSONを圧縮(unpretty-print)することでトークン数を節約する方法をご紹介します。
やり方
やり方は非常に簡単で、プロンプトで「unpretty-printして」と指示するだけです。
次の例は、文章をJSONスキーマに従って構造化するプロンプトで、unpretty-printの指示を加える前後の差分を示したものです。
{text}
に文章、 {json_schema}
にJSONスキーマが入ります。
{text} -Transform the above text into a JSON according to the following JSON schema. Do not output anything other than the JSON. +Transform the above text into a JSON according to the following JSON schema. Output the JSON in an unpretty-printed format, and do not output anything other than the JSON. ```json {json_schema} ```
日本語でも同じようにできます。
{text} -上記の文章を次のJSONスキーマに従って変換してください。JSON以外は何も出力しないでください。 +上記の文章を次のJSONスキーマに従って変換してください。JSONはunpretty-printedフォーマットで出力し、JSON以外は何も出力しないでください。 ```json {json_schema} ```
効果
unpretty-printによりJSONから空白や改行が除去され、わたしが試した一例*1では約43%のトークン節約*2になりました🎉
また、(少なくともわたしが試した限りでは)unpretty-print前後で空白や改行以外の差分はありませんでした。 もちろん出力内容によっては差分が出ると思いますが、プロダクトとして許容可能な差分ならコスパの高い手法だと思います。
ぜひ、試してみてください。