ドキュメント

API

構造化出力

JSONスキーマを使用してLLMの応答フォーマットを強制します。

LM Studio の REST API (または任意の OpenAI クライアント) を介して、LM Studio の REST API を使用して /v1/chat/completions エンドポイントに JSON スキーマを提供することで、LLM から特定の応答フォーマットを強制することができます。


LM Studio をサーバーとして起動

LM Studio をプログラムから自分のコードで使用するには、LM Studio をローカルサーバーとして実行してください。

サーバーは LM Studio の「開発者」タブから、または lms CLI を使用してオンにできます。

lms server start
npx lmstudio install-cli を実行して lms をインストールしてください。

これにより、OpenAI ライクな REST API を介して LM Studio と対話できるようになります。LM Studio の OpenAI ライクな API の概要については、LM Studio をサーバーとして実行する を参照してください。


構造化出力

API は、JSON スキーマが提供された場合に、/v1/chat/completions エンドポイントを介して構造化された JSON 出力をサポートします。これにより、LLM は提供されたスキーマに準拠した有効な JSON で応答するようになります。

これは、OpenAI が最近発表した Structured Output API と同じ形式に従っており、OpenAI クライアント SDK を介して機能することが期待されます。

curl を使用した例

この例では、curl ユーティリティを使用した構造化出力リクエストを示します。

この例を Mac または Linux で実行するには、任意のターミナルを使用してください。Windows では、Git Bash を使用してください。

curl http://{{hostname}}:{{port}}/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "{{model}}",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful jokester."
      },
      {
        "role": "user",
        "content": "Tell me a joke."
      }
    ],
    "response_format": {
      "type": "json_schema",
      "json_schema": {
        "name": "joke_response",
        "strict": "true",
        "schema": {
          "type": "object",
          "properties": {
            "joke": {
              "type": "string"
            }
          },
        "required": ["joke"]
        }
      }
    },
    "temperature": 0.7,
    "max_tokens": 50,
    "stream": false
  }'

/v1/chat/completions で認識されるすべてのパラメータは尊重され、JSON スキーマは response_formatjson_schema フィールドで提供する必要があります。

JSON オブジェクトは、通常の応答フィールドである choices[0].message.contentstring 形式で提供され、JSON オブジェクトに解析する必要があります。

python を使用した例

from openai import OpenAI
import json

# Initialize OpenAI client that points to the local LM Studio server
client = OpenAI(
    base_url="https://:1234/v1",
    api_key="lm-studio"
)

# Define the conversation with the AI
messages = [
    {"role": "system", "content": "You are a helpful AI assistant."},
    {"role": "user", "content": "Create 1-3 fictional characters"}
]

# Define the expected response structure
character_schema = {
    "type": "json_schema",
    "json_schema": {
        "name": "characters",
        "schema": {
            "type": "object",
            "properties": {
                "characters": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {"type": "string"},
                            "occupation": {"type": "string"},
                            "personality": {"type": "string"},
                            "background": {"type": "string"}
                        },
                        "required": ["name", "occupation", "personality", "background"]
                    },
                    "minItems": 1,
                }
            },
            "required": ["characters"]
        },
    }
}

# Get response from AI
response = client.chat.completions.create(
    model="your-model",
    messages=messages,
    response_format=character_schema,
)

# Parse and display the results
results = json.loads(response.choices[0].message.content)
print(json.dumps(results, indent=2))

重要: すべてのモデルが構造化出力を実行できるわけではありません。特に 7B パラメータ未満の LLM では困難です。

モデルが構造化出力をサポートしているか不明な場合は、モデルカードの README を確認してください。

構造化出力エンジン

  • GGUF モデルの場合: llama.cpp の文法ベースサンプリング API を利用してください。
  • MLX モデルの場合: Outlines を使用します。

MLX の実装は GitHub で利用可能です: lmstudio-ai/mlx-engine


コミュニティ

他の LM Studio ユーザーとチャットし、LLM、ハードウェアなどについて LM Studio Discord サーバーで議論しましょう。

このページのソースは GitHub で入手できます。