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 Structured Outputの入口
目的LM Studioで見る入口最初の確認
JSON Schemaで返答を制約するPOST /v1/chat/completionsresponse_format.json_schemaとschemaを確認する
既存OpenAI clientを接続するbase_url=http://localhost:1234/v1model identifierとportを確認する
stateful chat・LM StudioのMCPPOST /api/v1/chatcustom tools用endpointと混同しない
外部関数を呼び出すTool Use / toolsJSON出力と関数実行を別の許可として設計する

公式REST APIの比較では、native /api/v1/chatはstateful chatやMCPを扱い、custom toolsは/v1/responsesや/v1/chat/completionsなどの互換endpoint側に整理されています。Structured OutputはそのうちJSON Schemaを使う返答形式の問題として扱います。

WindowsでDeveloper tab・server・model identifierを確認する

Structured Outputのコードを書く前に、LM StudioのDeveloper tabでlocal serverの状態、port、認証、ロード済みmodelを確認します。公式例ではlocalhost:1234が使われますが、手元のDeveloper表示とlms server statusを基準にします。

  1. LM StudioをWindowsで起動し、Developer tabでlocal serverを開始する。
  2. 利用モデルをロードし、画面上の通常chatで短い返答が返るか確認する。
  3. 端末運用ならlms server startとlms server statusでserver状態を別に確認する。
  4. GET http://localhost:1234/v1/modelsで、clientへ渡すmodel identifierを確認する。portは実際の表示に合わせる。
  5. 最初はschemaを3項目程度、stream=false、短い入力、外部送信なしで基準を作る。
lms server start
lms server status
GET http://localhost:1234/v1/models

LM StudioのChat画面が動くことは、OpenAI互換API、Structured Output、Tool Use、MCPが同じ条件で動くことを意味しません。server、model、endpoint、schemaを分けてログします。

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
PowerShellでのLM Studio Structured Output確認箇所
確認点見る場所失敗時の切り分け
endpoint/v1/chat/completionsnative /api/v1/chatやportを混ぜない
schemaresponse_format.json_schema.schemaname、properties、requiredを短くする
本文choices[0].message.contentJSON文字列をparseして別の値にする
モデルmodel identifierGET /v1/modelsとロード状態を再確認する

JSONとしてparseできても、categoryの候補、tagsの長さ、summaryの文字数などアプリ固有のルールまでは自動で決まりません。schema検証と業務検証を分けます。

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のバージョンと例外処理を管理します。

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)
JavaScriptでのLM Studio Structured Output段階
段階処理確認すること
接続baseURL / modellocalhost:1234/v1とmodel identifier
schema送信response_formatjson_schema.nameとschemaの階層
JSON化JSON.parse(content)本文がJSONとして読めるか
アプリ検証必要ならZod等型、列挙値、件数、業務ルール

stream=trueでは返答が断片になるため、最初はfalseでJSON化と検証を確認します。表示を早く始めることと、完全なJSONを安全に処理することを同じ段階にしません。

モデル制約とGGUF・MLX engineを確認する

LM Studio公式docsは、すべてのモデルがStructured Outputに対応するわけではなく、特に7B未満のLLMでは難しい場合があると説明しています。モデルカードやREADMEで対応情報を確認し、schemaが複雑になるほど安定性が下がる可能性を前提にします。

LM Studio Structured Outputのモデル条件
モデル・engine公式docsの説明読者側の確認
GGUFllama.cppのgrammar-based sampling APIsモデル形式とchat template、モデルカード
MLXOutlinesを使うengineMLXモデルの対応と手元の応答
小さいモデル7B未満などは能力に注意schemaを短くし、固定モデルで試す
すべてのモデルStructured Output成功を保証しないJSON.parseとアプリ検証を必ず行う
  • モデルカードREADMEでStructured Output、JSON Schema、chat templateの記載を確認する。
  • 最初はobject、string、arrayなど少ない型で、required項目を絞る。
  • temperature、max_tokens、streamを固定して、モデル変更時の差を比較する。
  • Structured Outputが動いたことと、生成内容の正しさ・業務判断の正しさを分ける。

失敗時はendpoint・model・schema・parseを一つずつ切り分ける

Structured Outputが返らないときは、LM Studioが起動していない、portやmodel identifierが違う、schemaが複雑、モデルが対応していない、streamの処理が未完成、native v1 endpointとOpenAI互換endpointを混同している、などを順番に分けます。

  1. Developer tabまたはlms server statusでlocal serverとportを確認し、GET /v1/modelsでmodel identifierを確認する。
  2. 通常の /v1/chat/completions をstream=falseで呼び、choices[0].message.contentが返るか確認する。
  3. response_formatをjson_schemaへ追加し、schemaを短くしてJSON.parseを確認する。
  4. モデルカード、chat template、GGUF/MLX、7B未満などの条件を比較する。
  5. 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の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まで段階的に進みます。

  1. ローカルAIをAPIで使う方法
  2. WindowsでローカルAIコーディングを始める
  3. VS CodeでローカルAIを使う
  4. LM Studioのlms CLIを使う
  5. LM StudioのTool Useを使う
  6. LM StudioのResponses APIを使う
  7. LM StudioのMCPをAPIで使う
  8. ローカルAIでJSON出力する方法
  9. LM StudioとOllamaの違い
  10. コンテキスト長とは
  11. RAG・埋め込み・ベクトルDBの仕組み
  12. OllamaのEmbedding APIを使う
  13. OllamaのResponses APIを使う
  14. OllamaのAPI認証を確認する
  15. OllamaをWindowsのLANから使う前の確認
  16. OllamaのモデルID・能力を確認する
  17. OllamaのModelfileを使う
  18. Ollama native API streamingを使う
  19. Ollama Web Search APIを使う
  20. OllamaのThinkingを使う
  21. LM StudioのEmbedding APIを使う
  22. RAG評価と引用確認の基礎
  23. faithfulness確認
  24. ローカルRAGのプライバシー
  25. MCPとは
  26. ローカルLLMの安全性とプライバシー
  27. Gemma 4 12Bの更新メモ
  28. Hermes Desktopとは
  29. Hermes DesktopとLM Studio接続
  30. Hermes DesktopとOllama接続
  31. Hermes Desktop接続トラブル
  32. Hermes DesktopでOpenRouterを使う
  33. Hermes DesktopでDeepSeek APIを使う
  34. Hermes DesktopでProviderを使い分ける
  35. Hermes DesktopとLM Studio接続の確認ポイント
  36. Hermes AgentとDesktopの違い
  37. Ollamaとは
  38. Windows ARMでローカルAIを使う前の確認
  39. WindowsでOllamaをインストールする
  40. Ollamaのローカルモデルとcloudモデルの違い
  41. Ollamaのモデル保存場所と移動
  42. Ollamaのモデル一覧・削除・容量整理
  43. OllamaのOpenAI互換APIを使う
  44. Ollamaのtool callingを使う
  45. OllamaのStructured Outputsを使う
  46. OllamaのEmbedding APIを使う
  47. OllamaのResponses APIを使う
  48. OllamaのAPI認証を確認する
  49. OllamaのモデルID・能力を確認する
  50. OllamaのModelfileを使う
  51. Ollama native API streamingを使う
  52. LM StudioのEmbedding APIを使う
  53. Ollamaの解説
  54. 診断基準
  55. 比較表

あなたはどのタイプ?

関連チェック先

関連ツール

比較表を見る / 最初に検討しやすいツールを確認する