MNTSQ Techブログ

リーガルテック・カンパニー「MNTSQ(モンテスキュー)」のTechブログです。

生成AIの出力JSONをunpretty-printしてトークン節約する

MNTSQ Tech Blog TOP > 記事一覧 > 生成AIの出力JSONをunpretty-printしてトークン節約する

こんにちは、MNTSQでエンジニアをやっている平田です。

ありがたいことに生成AI関連のイベントでLTする機会を何度かいただいており、その発表資料の小ネタについて嬉しいコメントをいただきましたので、記事にすることにしました。

はじめに

プロダクトで生成AIを活用する際、トークン数(特に出力)の節約は重要です。 その理由は主に次のようなものです:

  1. 生成AIの課金体系がトークン数に依存する
  2. トークン数が多いとターンアラウンドタイムが長くなる

また、プロダクトでの生成AI活用では、JSON形式で出力を構造化することが一般的です。 関連する話題として、ChatGPTやGeminiではJSON出力を強制するStructured Outputsが提供されていますね。

openai.com

この記事では、プロダクトでの生成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になりました🎉

JSONのunpretty-printによるトークン節約効果

また、(少なくともわたしが試した限りでは)unpretty-print前後で空白や改行以外の差分はありませんでした。 もちろん出力内容によっては差分が出ると思いますが、プロダクトとして許容可能な差分ならコスパの高い手法だと思います。

ぜひ、試してみてください。

この記事を書いた人

Takumi Hirata

MNTSQのアルゴリズムエンジニア。流離のなんでも屋

*1:https://tech.mntsq.co.jp/entry/2024/06/17/110000 で紹介しているタスク

*2:tiktokenによる計数