You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动设置Pydantic模型JSON Schema的description字段(无需修改文档字符串)

可以手动覆盖Pydantic模型JSON Schema的description字段

不用修改类文档字符串也能实现,下面分Pydantic版本给出具体方法:

Pydantic v1 实现方式

方法1:用Config里的schema_extra直接指定

通过schema_extra字典注入自定义描述,会覆盖类文档字符串的内容:

from pydantic import BaseModel

class MainModel(BaseModel):
    # 这里不用写类文档字符串,或者保留也会被覆盖
    class Config:
        title = 'Main'
        schema_extra = {
            "description": "这是手动设置的模型描述"
        }

print(MainModel.schema_json(indent=2))

方法2:重载schema方法灵活修改

如果需要更复杂的逻辑(比如根据条件动态生成描述),可以直接重载模型的schema类方法:

from pydantic import BaseModel

class MainModel(BaseModel):
    class Config:
        title = 'Main'

    @classmethod
    def schema(cls, **kwargs):
        # 先获取默认生成的schema
        base_schema = super().schema(**kwargs)
        # 替换或添加description字段
        base_schema['description'] = "手动设置的模型描述"
        return base_schema

print(MainModel.schema_json(indent=2))

Pydantic v2 实现方式

v2推荐使用model_config配置,以下两种方法都可行:

方法1:通过model_config的schema_extra设置

from pydantic import BaseModel, ConfigDict

class MainModel(BaseModel):
    model_config = ConfigDict(
        title='Main',
        schema_extra={
            "description": "这是手动设置的模型描述"
        }
    )

# v2用model_json_schema()获取schema
print(MainModel.model_json_schema())

方法2:使用__pydantic_modify_schema__钩子

这个钩子专门用于自定义修改生成的schema,适合需要动态调整的场景:

from pydantic import BaseModel

class MainModel(BaseModel):
    model_config = ConfigDict(title='Main')

    @classmethod
    def __pydantic_modify_schema__(cls, schema: dict[str, object]) -> None:
        schema['description'] = "手动设置的模型描述"

print(MainModel.model_json_schema())

为什么直接在Config里加description无效?因为Pydantic的配置类(v1)或ConfigDict(v2)并没有内置description参数,title是官方明确支持的配置项,但description默认绑定类的文档字符串,所以需要用上述方法手动覆盖。

内容的提问来源于stack exchange,提问作者Sebastian Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:10:27