LM StudioのStructured OutputをWindowsで使う方法|response_format・JSON Schema・Python
- 公開日
- 2026-08-09
- 更新日
- 2026-08-09
- 情報確認日
- 2026-08-09
- 編集・運営
- Local AI Compass
LM StudioのStructured Outputは、OpenAI互換の /v1/chat/completions にJSON Schemaを渡し、モデルの返答を決まったJSONとして受け取りやすくする機能です。WindowsではDeveloper tabまたはlms server startでserverを起動し、model identifier、response_format、choices[0].message.contentの検証を順番に確認します。
導入前に確認すること
- Windowsのバージョン、メモリ容量、GPU/VRAM、空き容量を確認する
- 最初は軽量モデル、短い質問、少ない同時作業から始める
- 公式サイトの対応OS、利用規約、モデルのライセンスを確認する
先に結論:Structured Outputは/v1/chat/completionsのJSON契約
LM Studio公式docsでは、JSON Schemaを /v1/chat/completions のresponse_formatへ渡し、返答をchoices[0].message.contentの文字列として受け取ってからJSONへparseする流れが案内されています。Structured Outputは「返答の形」を固定しやすくする機能で、回答の事実性やアプリ側の業務検証を省略するものではありません。
| 目的 | LM Studioで見る入口 | 最初の確認 |
|---|---|---|
| JSON Schemaで返答を制約する | POST /v1/chat/completions | response_format.json_schemaとschemaを確認する |
| 既存OpenAI clientを接続する | base_url=http://localhost:1234/v1 | model identifierとportを確認する |
| stateful chat・LM StudioのMCP | POST /api/v1/chat | custom tools用endpointと混同しない |
| 外部関数を呼び出す | Tool Use / tools | JSON出力と関数実行を別の許可として設計する |
公式REST APIの比較では、native /api/v1/chatはstateful chatやMCPを扱い、custom toolsは/v1/responsesや/v1/chat/completionsなどの互換endpoint側に整理されています。Structured OutputはそのうちJSON Schemaを使う返答形式の問題として扱います。
- ローカルAIでJSON出力 - JSON Schemaの概念、用途、検証の全体像を見る
- LM Studio Tool Use - 関数呼び出しとStructured Outputの違いを見る
- LM Studio公式Structured Output - response_formatとJSON Schemaの公式例を見る
WindowsでDeveloper tab・server・model identifierを確認する
Structured Outputのコードを書く前に、LM StudioのDeveloper tabでlocal serverの状態、port、認証、ロード済みmodelを確認します。公式例ではlocalhost:1234が使われますが、手元のDeveloper表示とlms server statusを基準にします。
- LM StudioをWindowsで起動し、Developer tabでlocal serverを開始する。
- 利用モデルをロードし、画面上の通常chatで短い返答が返るか確認する。
- 端末運用ならlms server startとlms server statusでserver状態を別に確認する。
- GET http://localhost:1234/v1/modelsで、clientへ渡すmodel identifierを確認する。portは実際の表示に合わせる。
- 最初はschemaを3項目程度、stream=false、短い入力、外部送信なしで基準を作る。
lms server start
lms server status
GET http://localhost:1234/v1/modelsLM StudioのChat画面が動くことは、OpenAI互換API、Structured Output、Tool Use、MCPが同じ条件で動くことを意味しません。server、model、endpoint、schemaを分けてログします。
- LM Studioのlms CLI - server start、status、model操作を端末から確認する
- LM StudioをWindowsに入れる - 導入と初回モデル確認へ戻る
- LM Studioモデル保存場所 - モデルの保存と空き容量を確認する
PowerShellからresponse_formatとJSON Schemaを送る
WindowsのPowerShellでは、response_formatの入れ子をハッシュテーブルで組み立ててConvertTo-Jsonに渡すと、引用符のエスケープを減らせます。LM Studio公式例はcurlで /v1/chat/completions へ送り、schemaはresponse_formatのjson_schemaフィールドへ入れています。
$body = @{
model = "MODEL_IDENTIFIER"
messages = @(
@{ role = "system"; content = "JSON Schemaに従って返答してください" }
@{ role = "user"; content = "メモを分類してください" }
)
response_format = @{
type = "json_schema"
json_schema = @{
name = "note_result"
schema = @{
type = "object"
properties = @{
category = @{ type = "string" }
summary = @{ type = "string" }
tags = @{ type = "array"; items = @{ type = "string" } }
}
required = @("category", "summary", "tags")
}
}
}
temperature = 0.2
stream = $false
} | ConvertTo-Json -Depth 10
$response = Invoke-RestMethod `
-Uri "http://localhost:1234/v1/chat/completions" `
-Method Post `
-ContentType "application/json" `
-Body $body
$result = $response.choices[0].message.content | ConvertFrom-Json
$result | ConvertTo-Json
| 確認点 | 見る場所 | 失敗時の切り分け |
|---|---|---|
| endpoint | /v1/chat/completions | native /api/v1/chatやportを混ぜない |
| schema | response_format.json_schema.schema | name、properties、requiredを短くする |
| 本文 | choices[0].message.content | JSON文字列をparseして別の値にする |
| モデル | model identifier | GET /v1/modelsとロード状態を再確認する |
JSONとしてparseできても、categoryの候補、tagsの長さ、summaryの文字数などアプリ固有のルールまでは自動で決まりません。schema検証と業務検証を分けます。
- LM Studio Chat Completions公式docs - POST、payload、stream、modelの公式仕様を見る
- LM Studio OpenAI Compatibility - base URLと対応endpointを確認する
- ローカルAI API入門 - localhost APIとproviderの基本へ進む
PythonのOpenAI clientでschemaを渡してJSONをparseする
LM Studio公式のStructured Output docsでは、OpenAI clientのbase_urlをlocalhostへ向け、response_formatへJSON Schemaを渡し、choices[0].message.contentをjson.loadsする例が示されています。clientを使っても、parse・型・値の検証はアプリ側に残ります。
from openai import OpenAI
import json
client = OpenAI(
base_url="http://localhost:1234/v1",
api_key="lm-studio",
)
schema = {
"type": "json_schema",
"json_schema": {
"name": "note_result",
"schema": {
"type": "object",
"properties": {
"category": {"type": "string"},
"summary": {"type": "string"},
"tags": {"type": "array", "items": {"type": "string"}},
},
"required": ["category", "summary", "tags"],
},
},
}
response = client.chat.completions.create(
model="MODEL_IDENTIFIER",
messages=[{"role": "user", "content": "メモを分類してください"}],
response_format=schema,
temperature=0.2,
)
result = json.loads(response.choices[0].message.content)
print(result["category"])- base_urlはOpenAIの公開先ではなく、LM Studioのlocal serverへ向ける。
- api_keyはserverの認証設定に合わせ、サンプル文字列を秘密情報として扱わない。
- response_formatのschemaとmodel identifierをログに残し、変更時の差を追えるようにする。
- json.loadsの例外、必須key、値の候補、長さを別のエラー処理にする。
OpenAI clientやPythonの依存関係をこのサイトへ追加する手順ではありません。読者のアプリ側で既存の環境に合わせて導入し、SDKのバージョンと例外処理を管理します。
- LM Studio Structured Output公式docs - Python clientとjson.loadsの公式例を見る
- WindowsローカルAIコーディング - コード実行と権限の境界を確認する
- ローカルLLMの安全性 - 入力・ログ・送信先の扱いを見る
JavaScriptのOpenAI clientでもresponse_formatを使える
LM StudioのOpenAI互換endpointはJavaScriptやTypeScriptなどのclientからbase URLを切り替えて使う入口があります。JavaScriptではresponse_formatを送ったあと、choices[0].message.contentをJSON.parseし、必要ならZodなどのschema検証をアプリ側で追加します。
import OpenAI from "openai"
const client = new OpenAI({
baseURL: "http://localhost:1234/v1",
apiKey: "lm-studio",
})
const response = await client.chat.completions.create({
model: "MODEL_IDENTIFIER",
messages: [{ role: "user", content: "メモを分類してください" }],
response_format: {
type: "json_schema",
json_schema: {
name: "note_result",
schema: {
type: "object",
properties: {
category: { type: "string" },
summary: { type: "string" },
tags: { type: "array", items: { type: "string" } },
},
required: ["category", "summary", "tags"],
},
},
},
temperature: 0.2,
})
const result = JSON.parse(response.choices[0].message.content)
console.log(result.category, result.tags)
| 段階 | 処理 | 確認すること |
|---|---|---|
| 接続 | baseURL / model | localhost:1234/v1とmodel identifier |
| schema送信 | response_format | json_schema.nameとschemaの階層 |
| JSON化 | JSON.parse(content) | 本文がJSONとして読めるか |
| アプリ検証 | 必要ならZod等 | 型、列挙値、件数、業務ルール |
stream=trueでは返答が断片になるため、最初はfalseでJSON化と検証を確認します。表示を早く始めることと、完全なJSONを安全に処理することを同じ段階にしません。
- LM Studio OpenAI Compatibility公式docs - JS/TypeScriptのbase URL例を見る
- LM Studio Tool Use - toolsとJSON出力の役割を分ける
- LM Studioのlms CLI - serverとmodel identifierを再確認する
モデル制約とGGUF・MLX engineを確認する
LM Studio公式docsは、すべてのモデルがStructured Outputに対応するわけではなく、特に7B未満のLLMでは難しい場合があると説明しています。モデルカードやREADMEで対応情報を確認し、schemaが複雑になるほど安定性が下がる可能性を前提にします。
| モデル・engine | 公式docsの説明 | 読者側の確認 |
|---|---|---|
| GGUF | llama.cppのgrammar-based sampling APIs | モデル形式とchat template、モデルカード |
| MLX | Outlinesを使うengine | MLXモデルの対応と手元の応答 |
| 小さいモデル | 7B未満などは能力に注意 | schemaを短くし、固定モデルで試す |
| すべてのモデル | Structured Output成功を保証しない | JSON.parseとアプリ検証を必ず行う |
- モデルカードREADMEでStructured Output、JSON Schema、chat templateの記載を確認する。
- 最初はobject、string、arrayなど少ない型で、required項目を絞る。
- temperature、max_tokens、streamを固定して、モデル変更時の差を比較する。
- Structured Outputが動いたことと、生成内容の正しさ・業務判断の正しさを分ける。
- LM Studio公式Structured Output - 7B未満、GGUF、MLX engineの注記を見る
- LM Studio GPU offload - モデルとPC負荷の問題を分ける
- GGUFが読み込めないとき - 形式・保存・ロードの診断へ進む
失敗時はendpoint・model・schema・parseを一つずつ切り分ける
Structured Outputが返らないときは、LM Studioが起動していない、portやmodel identifierが違う、schemaが複雑、モデルが対応していない、streamの処理が未完成、native v1 endpointとOpenAI互換endpointを混同している、などを順番に分けます。
- Developer tabまたはlms server statusでlocal serverとportを確認し、GET /v1/modelsでmodel identifierを確認する。
- 通常の /v1/chat/completions をstream=falseで呼び、choices[0].message.contentが返るか確認する。
- response_formatをjson_schemaへ追加し、schemaを短くしてJSON.parseを確認する。
- モデルカード、chat template、GGUF/MLX、7B未満などの条件を比較する。
- native /api/v1/chat、OpenAI互換/v1、Tool Use、MCPを混ぜず、必要な機能のendpointだけを使う。
- HTTP接続エラーは、server、port、認証、model identifierを確認する。
- 本文が空・通常文の場合は、response_format、schema、stream、モデル対応を確認する。
- JSON.parse成功後の値が不適切なら、列挙値・長さ・件数・業務ルールを追加する。
- 実ファイル、秘密情報、削除・書き込み、外部APIを最初のStructured Outputテストに使わない。
- LM Studio REST API公式docs - nativeと互換endpointの機能比較を再確認する
- LM Studioが起動しないとき - server、port、モデルの診断へ進む
- ローカルAIのトラブルシューティング - モデル・メモリ・入力の問題を横断して見る
よくある質問
LM StudioのStructured Outputとは何ですか?
LM StudioのOpenAI互換POST /v1/chat/completionsへJSON Schemaを渡し、モデルの返答を決まったJSONとして受け取りやすくする機能です。返ったchoices[0].message.contentは文字列なので、JSON.parseとアプリ側の検証を行います。
Windowsで使うendpointはどれですか?
この記事の中心はhttp://localhost:1234/v1/chat/completionsです。Developer tabまたはlms server startでserverを起動し、portとGET /v1/modelsのmodel identifierを実際の環境に合わせます。
response_formatには何を入れますか?
typeをjson_schemaにし、json_schemaのnameとschemaへJSON Schemaを入れます。公式例に合わせてresponse_formatのjson_schemaフィールドへschemaを置き、返答後にcontentをJSONとしてparseします。
PythonのOpenAI clientで使えますか?
使えます。OpenAI clientのbase_urlをhttp://localhost:1234/v1へ向け、response_formatへschemaを渡し、choices[0].message.contentをjson.loadsする例がLM Studio公式docsにあります。
すべてのLM StudioモデルでStructured Outputを使えますか?
すべてで成功するとは限りません。LM Studio公式docsは特に7B未満のモデルなどに注意を示しています。モデルカード、chat template、GGUF/MLX engine、手元の応答を確認し、schemaを小さくして試してください。
Structured OutputとTool Useは同じですか?
同じではありません。Structured Outputは返答JSONの形を整える機能、Tool Useはモデルが外部関数やAPIの呼び出しを提案し、アプリが検証・実行する機能です。JSONが正しくても関数実行の権限は別に管理します。
native /api/v1/chatでも同じJSON Schemaを使えますか?
この記事の公式手順はOpenAI互換の/v1/chat/completionsです。native /api/v1/chatはstateful chatやMCPなど別の機能を持つため、Structured Outputのresponse_formatと同じendpointとして扱わず、利用目的に応じて公式比較表を確認してください。
次に読むおすすめルート
開発・API連携したい人
LM StudioとOllamaの違いを確認し、API、長文処理、RAGまで段階的に進みます。
- ローカルAIをAPIで使う方法
- WindowsでローカルAIコーディングを始める
- VS CodeでローカルAIを使う
- LM Studioのlms CLIを使う
- LM StudioのTool Useを使う
- 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のStructured Outputsを使う
- 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まで段階的に進みます。
関連チェック先
- LM Studio Structured Output - OpenAI互換の/v1/chat/completions、response_format、JSON Schema、Python例を確認できます。
- LM Studio OpenAI Compatibility - 対応endpoint、base URL、モデルidentifierの前提を確認できます。
- LM Studio Chat Completions - POST /v1/chat/completions、payload、stream、prompt templateを確認できます。
- LM Studio REST API - native v1 REST APIとOpenAI互換endpoint、機能比較を確認できます。
- LM Studio local server - WindowsのDeveloper tabでlocal serverを起動する入口を確認できます。
- LM Studio lms CLI - lms server start、status、モデル操作の現行CLI入口を確認できます。
- LM Studio Tool Use - Structured Outputとcustom toolsを別機能として比較する公式資料です。