您可以通过向 /v1/chat/completions
端点(通过 LM Studio 的 REST API 或任何 OpenAI 客户端)提供 JSON 模式,来强制大型语言模型使用特定的响应格式。
启动 LM Studio 作为服务器
要在您自己的代码中以编程方式使用 LM Studio,请将 LM Studio 作为本地服务器运行。
您可以从 LM Studio 的“开发者”选项卡或通过 lms
CLI 打开服务器。
运行 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_format
的 json_schema
字段中提供。
JSON 对象将以 string
形式提供在典型的响应字段 choices[0].message.content
中,需要将其解析为 JSON 对象。
使用 python
的示例
from openai import OpenAI
import json
client = OpenAI(
base_url="https://127.0.0.1:1234/v1",
api_key="lm-studio"
)
messages = [
{"role": "system", "content": "You are a helpful AI assistant."},
{"role": "user", "content": "Create 1-3 fictional characters"}
]
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"]
},
}
}
response = client.chat.completions.create(
model="your-model",
messages=messages,
response_format=character_schema,
)
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 用户聊天,讨论大型语言模型、硬件等。