文档

结构化输出

您可以通过向 /v1/chat/completions 端点(通过 LM Studio 的 REST API 或任何 OpenAI 客户端)提供 JSON 模式,来强制大型语言模型使用特定的响应格式。


启动 LM Studio 作为服务器

要在您自己的代码中以编程方式使用 LM Studio,请将 LM Studio 作为本地服务器运行。

您可以从 LM Studio 的“开发者”选项卡或通过 lms CLI 打开服务器。

lms server start
运行 npx lmstudio install-cli 来安装 lms

这将允许您通过类似 OpenAI 的 REST API 与 LM Studio 交互。有关类似 OpenAI 的 LM Studio API 的介绍,请参阅 运行 LM Studio 作为服务器


结构化输出

当提供 JSON 模式 时,API 通过 /v1/chat/completions 端点支持结构化的 JSON 输出。这样做将导致大型语言模型以符合提供的模式的有效 JSON 响应。

它遵循 OpenAI 最近发布的 结构化输出 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 对象将以 string 形式提供在典型的响应字段 choices[0].message.content 中,需要将其解析为 JSON 对象。

使用 python 的示例

from openai import OpenAI
import json

# Initialize OpenAI client that points to the local LM Studio server
client = OpenAI(
    base_url="https://127.0.0.1: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 的大型语言模型。

如果您不确定模型是否支持结构化输出,请查看模型卡自述文件。

结构化输出引擎

  • 对于 GGUF 模型:使用 llama.cpp 的基于语法的采样 API。
  • 对于 MLX 模型:使用 Outlines

MLX 实现可在 Github 上找到:lmstudio-ai/mlx-engine


社区

LM Studio Discord 服务器 上与其他 LM Studio 用户聊天,讨论大型语言模型、硬件等。