Geminiの出力形式をJSONに強制

背景
OCRの実装で列形式の出力に揃えたかったときに活用した。 OpenAIでいうJsonモードにあたるはず。 ChatGPTは激古、Gemini先生はやや古いバージョンを出力、解説記事も大体ちょい古いのでメモ。
実装のメイン
出力のスキーマはあらかじめ定義しておく。
response_schema = {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {"type": "string"},
"debit": {"type": "string"},
"debit_amount": {"type": "integer"},
},
"required": ["date", "debit", "debit_amount"]
}
}
},
"required": ["items"]
}
例えば以下のようにpropertiesで"列名 : {"type" : "型名"}と設定する。
型名は以下で確認できる。
GenerativeModelでgenerate_contentを使うときに引数generation_config内で指定する
from vertexai.generative_models import GenerationConfig, GenerativeModel model = GenerativeModel("gemini-1.5-flash") response = model.generate_content( [prompt], generation_config=GenerationConfig( response_mime_type="application/json", response_schema=response_schema ) )
お勉強した順
- Gemini API を使用して構造化された出力を生成する | Google AI for Developers
- GenerationConfig | Google AI for Developers
- スキーマ | Google AI for Developers
補足
画像入れるならImageを定義しておいて、promptの隣に含める
from vertexai.generative_models import GenerationConfig, GenerativeModel model = GenerativeModel("gemini-1.5-flash") image = Image.load_from_file(image_path) response = model.generate_content( [images, prompt], generation_config=GenerationConfig( response_mime_type="application/json", response_schema=response_schema ) )