開発実践ガイド

OllamaでJSON Schemaを使う方法|構造化出力をアプリ側でも検証する

OllamaでJSON Schemaを使う方法 — 構造化出力をアプリ側でも検証する
目次

公式サイトで次に進む

この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。

local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。

Ollamaの構造化出力を使うと、自由な文章ではなく、決めたJSONの形へ返答を寄せられる。

自作プログラムへ結果を渡すときに便利だが、正しいJSONが返ることと、その中身が事実として正しいことは別だ。

JSON Schemaで形を決め、返答を受け取った後もアプリ側で検証する。

最初は小さなSchemaから始める

たとえば製品名と分類だけを返すなら、最初から深く入れ子になった巨大なSchemaは必要ない。

{
  "type": "object",
  "properties": {
    "name": {"type": "string"},
    "category": {"type": "string"}
  },
  "required": ["name", "category"]
}

Ollamaの公式資料では、formatへJSON Schemaを渡す方法が案内されている。

まず小さな形で成功させ、必要な項目だけ後から増やす。

モデルの返答をそのまま処理へ流さない

Schemaを指定していても、受け取った返答はアプリ側でJSONとして読み取れるか確認する。

そのうえで、

  • 必須項目があるか
  • 型が合っているか
  • 許可した値だけになっているか
  • 余分な項目をどう扱うか

などを検証する。

PythonならPydantic、JavaScriptならZodなどを使って、アプリ側でも同じ構造を検証できる。

Schemaに合っていても値は間違う

たとえばageが整数として返ってきても、その数字が実際の年齢とは限らない。

確認は少なくとも次の三つに分ける。

構造: JSON Schemaに合っているか
内容: 値が元情報や事実と合っているか
実行: その値を使って処理してよいか

構造化出力は、事実確認や権限確認を不要にする仕組みではない。

正常な入力だけでなく失敗しやすい入力も試す

複数の入力を使い、

  • 情報が足りない
  • 表現が曖昧
  • Schemaへ当てはめにくい
  • 列挙した値のどれにも合わない

といった場合も確認する。

失敗したときは、JSONとして読めないのか、Schema違反なのか、形式は正しいが内容が誤っているのかを分けて記録する。

構造化出力は後段処理を安定させるために使う

Ollamaの構造化出力は、LLMを正確なデータベースへ変える機能ではない。

後段のプログラムが扱いやすい形へ出力をそろえ、その後の検証箇所を明確にするための機能として使うと分かりやすい。

ツール呼び出しと組み合わせる前に、まずは小さなJSON Schemaで返答を受け取り、アプリ側の検証まで通す。

まとめ

  • Ollamaでは`format`へJSON Schemaを指定し、返答の形を決められる
  • 最初は項目数の少ない小さなSchemaから試す
  • モデルの返答はアプリ側でもJSONとして読み取り、Schemaに合うか検証する
  • Schemaに合うJSONであることと、中の値が事実として正しいことは分けて確認する
同じテーマから

この記事で扱ったデータ

モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。

サイト内検索