OllamaのStructured OutputsをWindowsで使う方法|JSON Schema・Python・JavaScript
- 公開日
- 2026-08-09
- 更新日
- 2026-08-09
- 情報確認日
- 2026-08-09
- 編集・運営
- Local AI Compass
OllamaのStructured Outputsは、モデルの返答をJSON Schemaに合わせて受け取り、アプリ側で検証しやすくする機能です。Windowsではまずnativeの /api/chat に format を渡し、PowerShellで短いschemaを試してから、PythonのPydanticやJavaScriptのZodによる検証、OpenAI互換APIとの違いへ進みます。
導入前に確認すること
- Windowsのバージョン、メモリ容量、GPU/VRAM、空き容量を確認する
- 最初は軽量モデル、短い質問、少ない同時作業から始める
- 公式サイトの対応OS、利用規約、モデルのライセンスを確認する
先に結論:JSON modeとJSON Schemaを使い分ける
Ollama公式docsでは、nativeのPOST /api/chatにformat: "json"を渡す方法と、formatへJSON Schemaオブジェクトを渡す方法が案内されています。JSON modeはJSONらしい返答の入口、schema指定は項目・型・requiredをアプリ側の契約として明示する入口です。
| 目的 | native APIで見る項目 | 最初の確認 |
|---|---|---|
| JSONとして返す | format: "json" | response.message.contentをJSON.parseできるか |
| 項目と型を固定する | format: { type: "object", ... } | required、properties、配列の形が合うか |
| プログラムで検証する | Pydantic / Zodなど | parse・validationエラーを表示できるか |
| 関数を呼び出す | tools・tool_calls | Structured Outputとは別の実行フローか |
Structured Outputsは返答の形を整える機能です。モデルが外部関数を呼び出すtool calling、文書を検索するRAG、MCPでツールを接続する処理とは目的が違います。JSONが正しくても、内容の事実性や実行許可まで保証するものではありません。
- ローカルAIでJSON出力 - JSON Schemaの基本と用途の全体像を見る
- Ollama tool calling - 関数呼び出しの要求とtool結果の往復を見る
- Ollama Structured Outputs公式docs - formatとschemaの公式例を確認する
WindowsでOllama・モデル・localhostを分けて確認する
Structured Outputsの失敗をschemaだけの問題にしないため、Ollama本体、モデル名、通常のchat、API接続を別々に確認します。端末で通常の返答が成功しても、schema付きの応答や検証まで同じように動くとは限りません。
- OllamaをWindowsで起動し、PowerShellでollama lsとollama psを実行する。
- 利用するモデルの名前とタグ、空き容量、モデルカードの対応情報を確認する。
- ollama run MODELで短い通常chatを1回行い、モデル単体が応答することを確認する。
- GET http://localhost:11434/api/tagsでAPI接続とモデル一覧を確認する。
- 最初はstream=false、短い入力、3項目程度のschema、temperature 0に近い設定で基準を作る。
ollama ls
ollama ps
ollama run MODEL
GET http://localhost:11434/api/tags公式サンプルのモデル名は説明用の例です。手元のモデルのサイズ、chat template、対応機能、利用可能なタグを確認し、成功を固定モデル全体へ一般化しません。
- WindowsでOllamaをインストール - 導入、起動、localhostの基本へ戻る
- Ollamaモデル管理 - ls、show、ps、容量整理を確認する
- Ollama公式モデル一覧 - モデル名とタグの確認先を見る
PowerShellからnative /api/chatへJSON Schemaを渡す
WindowsのPowerShellでは、JSONを文字列として手作業でエスケープするより、ハッシュテーブルをConvertTo-Jsonで組み立てるとschemaの階層を確認しやすくなります。Ollama Chat APIのstream既定値はtrueなので、最初はfalseにして完成したmessage.contentを検証します。
$body = @{
model = "MODEL"
messages = @(@{ role = "user"; content = "商品メモを分類してください" })
stream = $false
format = @{
type = "object"
properties = @{
category = @{ type = "string" }
summary = @{ type = "string" }
tags = @{ type = "array"; items = @{ type = "string" } }
}
required = @("category", "summary", "tags")
}
options = @{ temperature = 0 }
} | ConvertTo-Json -Depth 10
$response = Invoke-RestMethod `
-Uri "http://localhost:11434/api/chat" `
-Method Post `
-ContentType "application/json" `
-Body $body
$result = $response.message.content | ConvertFrom-Json
$result | ConvertTo-Json
| 確認点 | 見る場所 | 失敗時の分岐 |
|---|---|---|
| HTTP応答 | $response | server、port、model、JSON bodyを確認する |
| 本文の場所 | $response.message.content | thinkingやmetadataを本文と混ぜない |
| JSON parse | ConvertFrom-Json | schema、出力途中、余分な説明文を確認する |
| 項目の意味 | category・summary・tags | 値の候補や長さをアプリ側で検証する |
schemaを渡しても、返った文字列をそのまま信頼できるとは限りません。JSONとして読めること、期待した項目があること、値の範囲が正しいことを順に確認します。
- Ollama Chat API公式docs - format、stream、response fieldsを確認する
- Ollama OpenAI互換API - native APIと/v1 endpointの違いを見る
- ローカルAI API入門 - localhost APIとproviderの基本へ進む
PythonではPydanticのschemaと検証を分ける
Ollama公式のPython例では、Pydanticモデルのmodel_json_schema()をformatへ渡し、返ったmessage.contentをmodel_validate_json()で検証します。schemaを生成する処理と、受け取ったJSONを信頼できるデータへ変換する処理を同じものと考えないことが重要です。
from ollama import chat
from pydantic import BaseModel
class Note(BaseModel):
category: str
summary: str
tags: list[str]
response = chat(
model="MODEL",
messages=[{"role": "user", "content": "商品メモを分類してください"}],
format=Note.model_json_schema(),
options={"temperature": 0},
)
note = Note.model_validate_json(response.message.content)
print(note.category)
print(note.tags)- Pydanticの型とrequired項目を、モデルへ渡すschemaの契約として先に決める。
- JSON文字列をmodel_validate_json()へ渡し、parse失敗を成功扱いにしない。
- 値の候補、文字列の長さ、配列の件数、業務上の妥当性は別のチェックとして持つ。
- schemaを複雑にしすぎず、まず分類・短い要約・タグのような小さな出力で確認する。
Python SDKやPydanticをサイトの依存関係へ追加する手順ではありません。読者のアプリ側で既存の環境に合わせて導入し、バージョンとエラー処理を管理します。
- Ollama Structured Outputs公式docs - Pydanticのmodel_json_schemaと検証例を見る
- VS CodeとOllama - ローカルproviderを開発環境へ接続する流れを見る
- ローカルLLMの安全性 - 入力・ログ・外部送信の境界を確認する
JavaScriptではZodでJSON.parse後の型を検証する
Ollama公式のJavaScript例では、Zod schemaをz.toJSONSchema()でformatへ渡し、返ったmessage.contentをJSON.parseしてからSchema.parse()へ通します。JSON.parseできたことと、アプリが期待する型・値になっていることは別の判定です。
import ollama from "ollama"
import * as z from "zod"
const Note = z.object({
category: z.string(),
summary: z.string(),
tags: z.array(z.string()),
})
const response = await ollama.chat({
model: "MODEL",
messages: [{ role: "user", content: "商品メモを分類してください" }],
format: z.toJSONSchema(Note),
options: { temperature: 0 },
})
const note = Note.parse(JSON.parse(response.message.content))
console.log(note.category, note.tags)
| 段階 | 処理 | 失敗を分ける理由 |
|---|---|---|
| schema生成 | z.toJSONSchema(Note) | モデルへ要求する形を固定する |
| JSON化 | JSON.parse(content) | 本文がJSONとして読めるかを見る |
| 型検証 | Note.parse(value) | required、型、配列を確認する |
| 業務検証 | アプリ固有の条件 | 値の妥当性や副作用を別に確認する |
stream=trueへ進む場合も、断片を完成させる前にJSON.parseやアプリ処理を始めません。まず非streamで基準を作り、chunkの収集、終了条件、空応答、再試行を別に設計します。
- Ollama Structured Outputs公式docs - ZodとJSON Schemaの公式例を見る
- Ollama回答が途中で止まるとき - stream、done、contextの切り分けを見る
- Ollamaが遅いとき - 速度とJSON検証の問題を分ける
OpenAI互換・Tool calling・local/cloudの境界を確認する
Ollamaのnative APIではformatへJSON Schemaを渡します。公式のOpenAI互換APIでは、既存clientのbase URLをhttp://localhost:11434/v1/へ向け、Structured Outputsはresponse_formatとして扱う入口がありますが、native APIと同じフィールドがすべて同じ挙動になるとは限りません。
| 仕組み | 主な入口 | 返したいもの |
|---|---|---|
| native Structured Outputs | POST /api/chat | format: "json"またはJSON Schemaのcontent |
| OpenAI互換Structured Outputs | POST /v1/chat/completions | response_formatと互換clientのresponse |
| Tool calling | tools・tool_calls | 関数呼び出し要求と実行結果の往復 |
| MCP | ホストとMCP server | 外部tool/resourceへの接続と権限 |
| Ollama Cloud | cloud model/provider | Structured Outputsは公式docsの現行注記を確認する |
Ollama公式Structured Outputs docsには、Ollama Cloudは現在structured outputsをサポートしないという注記があります。local modelとcloud modelをモデル名だけで同一視せず、利用するendpoint、provider、保存・送信範囲を確認します。
- Ollama OpenAI互換API - base URL、/v1 endpoint、model IDを確認する
- Ollama tool calling - toolsと関数実行の実装へ分岐する
- Ollamaのlocal/cloud - 推論場所とデータ経路の違いを見る
Structured Outputsが崩れるときの切り分け
JSON Schemaを渡しても、モデル、schema、stream、入力、SDK、API endpointのどこで失敗したかを分けて確認します。公式docsもPydanticやZodによる検証、temperatureを低くすること、schemaの意図をpromptにも含めることを信頼性のヒントとして挙げています。
- まずollama run MODELで通常chatが返るか、次にnative /api/chatでstream=falseが返るか確認する。
- format: "json"でJSON.parseまたはConvertFrom-Jsonできるか確認し、schema付きへ進む。
- schemaの項目数、ネスト、requiredを減らし、短い入力とtemperature 0に近い設定で再試行する。
- 本文をJSON.parseした後にPydantic、Zod、アプリ固有の値検証を行う。
- nativeとOpenAI互換、localとcloud、Structured Outputとtool callingを混ぜず、失敗した層だけを修正する。
- 余分な説明文が混ざる場合は、schema・prompt・endpoint・model・streamを確認する。
- required項目が欠ける場合は、schemaを短くし、モデルの対応情報と出力ログを確認する。
- parseは成功しても値が不適切な場合があるため、列挙値、長さ、件数、業務ルールを追加検証する。
- 実データ、秘密情報、削除・書き込み・外部送信を最初のテスト対象にしない。
- Ollama Structured Outputs公式docs - 信頼性のヒントと対応範囲を再確認する
- OllamaのAPIエラー - server、port、localhostの診断へ進む
- ローカルAIのトラブルシューティング - モデル・メモリ・入力の問題を横断して見る
よくある質問
OllamaのStructured Outputsとは何ですか?
モデルの返答をJSON Schemaに合わせ、アプリから検証しやすくする機能です。Ollamaのnative /api/chatではformatへjsonまたはJSON Schemaを渡す方法が案内されていますが、内容の正しさや業務上の妥当性まで保証するものではありません。
Windowsのnative APIではどのendpointを使いますか?
この記事の中心はhttp://localhost:11434/api/chatです。まずstream:falseで完成したresponse.message.contentを受け取り、JSON.parseやConvertFrom-Json、Pydantic、Zodなどで検証します。
format: "json"とJSON Schemaは何が違いますか?
format: "json"はJSONとして返す入口です。JSON Schemaを渡す方法では、properties、型、requiredなど返答の形をより具体的に指定できます。どちらも返答後の検証は必要です。
Pythonではどのように検証しますか?
Pydanticのmodel_json_schema()をformatへ渡し、返ったresponse.message.contentをmodel_validate_json()へ通す方法が公式例にあります。schema生成と、返答の内容が業務上正しいかの検証は分けてください。
JavaScriptでもStructured Outputsを使えますか?
使えます。Ollama公式例ではZod schemaをz.toJSONSchema()でformatへ渡し、JSON.parseした結果をSchema.parse()で検証しています。streamingする場合は、chunkを完成させてからJSON化します。
Structured Outputsとtool callingは同じですか?
同じではありません。Structured Outputsは返答JSONの形を整える機能、tool callingはモデルが関数呼び出しを提案し、アプリが検証・実行して結果を戻す機能です。関数実行の許可は別に設計します。
Ollama CloudでもStructured Outputsを使えますか?
Ollama公式のStructured Outputs docsには、Ollama Cloudは現在structured outputsをサポートしないという注記があります。local modelとcloud modelを混同せず、利用時点の公式docs、endpoint、providerの対応状況を確認してください。
次に読むおすすめルート
開発・API連携したい人
LM StudioとOllamaの違いを確認し、API、長文処理、RAGまで段階的に進みます。
- ローカルAIをAPIで使う方法
- WindowsでローカルAIコーディングを始める
- VS CodeでローカルAIを使う
- LM Studioのlms CLIを使う
- LM StudioのTool Useを使う
- LM StudioのStructured Outputを使う
- LM StudioのResponses APIを使う
- LM StudioのMCPをAPIで使う
- ローカルAIでJSON出力する方法
- LM StudioとOllamaの違い
- コンテキスト長とは
- RAG・埋め込み・ベクトルDBの仕組み
- OllamaのEmbedding APIを使う
- OllamaのResponses APIを使う
- OllamaのAPI認証を確認する
- OllamaをWindowsのLANから使う前の確認
- OllamaのモデルID・能力を確認する
- OllamaのModelfileを使う
- Ollama native API streamingを使う
- Ollama Web Search APIを使う
- OllamaのThinkingを使う
- LM StudioのEmbedding APIを使う
- RAG評価と引用確認の基礎
- faithfulness確認
- ローカルRAGのプライバシー
- MCPとは
- ローカルLLMの安全性とプライバシー
- Gemma 4 12Bの更新メモ
- Hermes Desktopとは
- Hermes DesktopとLM Studio接続
- Hermes DesktopとOllama接続
- Hermes Desktop接続トラブル
- Hermes DesktopでOpenRouterを使う
- Hermes DesktopでDeepSeek APIを使う
- Hermes DesktopでProviderを使い分ける
- Hermes DesktopとLM Studio接続の確認ポイント
- Hermes AgentとDesktopの違い
- Ollamaとは
- Windows ARMでローカルAIを使う前の確認
- WindowsでOllamaをインストールする
- Ollamaのローカルモデルとcloudモデルの違い
- Ollamaのモデル保存場所と移動
- Ollamaのモデル一覧・削除・容量整理
- OllamaのOpenAI互換APIを使う
- Ollamaのtool callingを使う
- OllamaのEmbedding APIを使う
- OllamaのResponses APIを使う
- OllamaのAPI認証を確認する
- OllamaのモデルID・能力を確認する
- OllamaのModelfileを使う
- Ollama native API streamingを使う
- LM StudioのEmbedding APIを使う
- Ollamaの解説
- 診断基準
- 比較表
あなたはどのタイプ?
- 初めてローカルAIを触る人 - まず全体像をつかみ、LM StudioとOllamaの違い、モデルサイズの考え方を順番に確認します。
- LM Studio・Ollamaの症状別トラブルを解決したい人 - 起動、モデルロード、Prompt Processing、generation、API接続、GPU確認をツール別に分けて読みます。
- GPUなし・低スペックPCの人 - 軽量モデル、メモリ別の目安、重いときの確認ポイントを先に見ます。
- PDFや資料を読ませたい人 - 先に基本を押さえ、モデル単体の確認後にAnythingLLMへ進みます。
- ローカルAIエージェントを試したい人 - Bionic、Ollama、AnythingLLM、Hermesを役割別に分け、local/cloud、tool、保存、PC負荷を順番に確認します。
- 開発・API連携したい人 - LM StudioとOllamaの違いを確認し、API、長文処理、RAGまで段階的に進みます。
関連チェック先
- Ollama Structured Outputs - native /api/chatのformat、JSON Schema、Python・JavaScript・vision例を確認できます。
- Ollama Chat API - messages、format、stream、response.message.contentのAPI仕様を確認できます。
- Ollama OpenAI compatibility - OpenAI互換のbase URL、response_format、対応endpointの境界を確認できます。
- Ollama Windows - Windows版Ollamaの起動とローカルAPI利用の前提を確認できます。
- Ollama Quickstart - モデルを実行し、ローカルAPIを使い始める入口を確認できます。
- Ollama Tool calling - Structured Outputsとtool callingを別機能として比較するための公式資料です。
- Ollama Models - モデル名やタグを確認する公式のモデル一覧です。