LLMで生成された無効なJSONをPythonのjson_repairで修正する

Pythonのjson_repairモジュールでLLMが出力した不正なJSONを修正する

AIが急速に進歩する中で、大規模言語モデル(LLM)は構造化データの生成に欠かせない存在となっています。しかし、これらのモデルは、その目覚ましい能力にもかかわらず、時に構文的に誤っていたり、形式が崩れたJSONを出力することがあり、これが自動化されたワークフローやデータ処理パイプラインを阻害するという共通の課題があります。

ここで登場するのが、この問題に特化して設計された、強力かつ軽量なPythonモジュールjson_repairです。不正なJSON文字列を修正するために開発されたjson_repairは、LLMの出力データを扱うあらゆる人にとって、データの一貫性とスムーズな運用を確保するための非常に価値あるツールです。

なぜjson_repairが不可欠なのか?

LLMは、その性質上、JSON出力にごくわずかなエラーを混入させることがあります。例えば、角括弧の欠落、エスケープされていない文字、あるいは予期せぬ余分な単語などです。これらは些細な間違いに見えるかもしれませんが、標準的なjson.loads()メソッドではJSON文字列を解析不能にしてしまい、エラー発生やワークフローの停止につながる可能性があります。

json_repairは、これらの不完全さをインテリジェントに修正するために介入します。単にjson.loads()try-exceptブロックで試すのとは異なり、json_repairは一連のヒューリスティックを用いてJSON文字列を積極的に修復しようとします。これにより、以下のことが可能になります。

  • 構文エラーの修正: 引用符の欠落、カンマの位置間違い、エスケープされていない文字、不完全なキーと値のペアなどを修正します。
  • 不正な構造の修復: カンマや括弧など、必要な要素を追加することで、不完全または破損した配列やオブジェクトを処理します。
  • 余分な文字のクリーンアップ: 有効な構造を維持しつつ、コメントなどJSON以外の文字を含むJSONを、それらの文字を除去することで処理します。
  • 欠落値の自動補完: 欠落している値に対して、空文字列やnullなどの妥当なデフォルト値を自動的に挿入します。

OpenAIの構造化出力機能(GPT-4oのJSONモードなど)のような進歩があっても、json_repairはその関連性を保ち続けています。開発者が指摘するように、構造化された出力でさえ、時には堅牢な修復メカニズムを必要とする例外的なケースがあるからです。

json_repairの使い方

json_repairの使い方は簡単です。pipでインストールできます。

pip install json-repair

インストール後、Pythonコードに簡単に組み込むことができます。

from json_repair import repair_json, loads, load

bad_json_string = "{'name': 'Alice', 'age': 30," # 閉じ波括弧が欠落
good_json_string = repair_json(bad_json_string)
print(good_json_string) # 出力: {"name": "Alice"}

この記事を共有