文档

基础知识

结构化响应

使用 Pydantic 模型或 JSON Schema 强制模型返回结构化响应

您可以通过向 .respond() 方法提供 JSON Schema 来强制 LLM 采用特定的响应格式。这保证了模型的输出符合您提供的 Schema。

JSON Schema 可以直接提供,也可以通过提供实现 lmstudio.ModelSchema 协议的对象(例如 pydantic.BaseModellmstudio.BaseModel)来提供。

lmstudio.ModelSchema 协议定义如下

@runtime_checkable
class ModelSchema(Protocol):
    """Protocol for classes that provide a JSON schema for their model."""

    @classmethod
    def model_json_schema(cls) → DictSchema:
        """Return a JSON schema dict describing this model."""
        ...

当提供了 Schema 时,预测结果的 parsed 字段将包含一个符合给定 Schema 的字符串键字典(对于非结构化结果,该字段是一个字符串字段,其值与 content 相同)。

使用基于类的 Schema 定义进行强制

如果您希望模型生成符合给定 Schema 的 JSON,建议使用 pydanticmsgspec 等库提供基于类的 Schema 定义。

Pydantic 模型原生实现了 lmstudio.ModelSchema 协议,而 lmstudio.BaseModel 是一个 msgspec.Struct 子类,它适当地实现了 .model_json_schema()

定义一个基于类的 Schema

from pydantic import BaseModel

# A class based schema for a book
class BookSchema(BaseModel):
    title: str
    author: str
    year: int

生成结构化响应

result = model.respond("Tell me about The Hobbit", response_format=BookSchema)
book = result.parsed

print(book)
#           ^
# Note that `book` is correctly typed as { title: string, author: string, year: number }

使用 JSON Schema 进行强制

您还可以使用 JSON Schema 强制结构化响应。

定义一个 JSON Schema

# A JSON schema for a book
schema = {
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "author": { "type": "string" },
    "year": { "type": "integer" },
  },
  "required": ["title", "author", "year"],
}

生成结构化响应

result = model.respond("Tell me about The Hobbit", response_format=schema)
book = result.parsed

print(book)
#     ^
# Note that `book` is correctly typed as { title: string, author: string, year: number }

此页面的源代码可在 GitHub 上获取