決まった形で答えさせること
構造化出力とは、LLM の答えを、JSON (項目名と値を決まった書き方で並べたデータの形) のような決まった形で出させることを指す。表に入れる、プログラムで読む、他の仕組みに渡す、といった使い方では、答えの形が毎回同じでないと困る。たとえば問い合わせの文から、種類、急ぎかどうか、商品名の 3 項目を取り出す仕事である。
指示で「JSON で答えて」と頼むだけでも、形はそろいやすい。ただし Anthropic の説明では、それだけでは書き方の誤り、必須の項目の抜け、型の食い違いが起き得る。
形を指定する仕組み
多くの API には、答えの形を指定する機能がある。項目の名前、型 (数字か文字か)、選べる値の一覧を、スキーマ (形の定義) として渡す。モデルはその形に合う答えだけを書くよう制限される。
OpenAI は、この機能が渡したスキーマに必ず従う答えを出させ、必須の項目の抜けや、決めた選択肢に無い値を防ぐとしている。Anthropic と Google にも、同じ目的の機能がある。形の指定に使えるスキーマの書き方には、サービスごとに制限がある。
形が正しくても中身は確かめる
形が守られても、中身が正しいとは限らない。Google の手引きは、出力の文法が正しい JSON でも、値は自分のプログラムで必ず確かめるよう勧めている。形は合っているのに意味が違う答えへの備えも求めている。確かめ方は次の通りである。
- 値が決めた範囲や一覧に入っているかを調べる
- 正解の分かっている例で、取り出した値を突き合わせる
- 形や値が外れた時は、もう一度送り直す
項目名を短くし、要らない項目を除くと、出力のトークンも減る。