Pydantic v1动态创建模型时__fields__属性未填充问题求助
解决Pydantic v1动态创建模型时__fields__为空的问题
问题原因
你使用create_model时直接将Enum类型作为字段值传入,不符合Pydantic v1的动态模型定义规则。静态类中specialty: SpecialtyEnumStatic的写法是隐式声明了必填字段,但动态创建时需要显式用**(类型, 必填标记)**或Field对象的形式定义字段,才能让Pydantic正确生成__fields__元数据。
修复后的代码
from enum import Enum from langchain.pydantic_v1 import BaseModel, create_model class SpecialtyEnumStatic(str, Enum): psychiatry = "SPECIALTY:Psychiatry" sports_medicine_internal_medicine = "SPECIALTY:Sports Medicine (Internal Medicine)" class ProviderSearchInputStatic(BaseModel): specialty: SpecialtyEnumStatic print(ProviderSearchInputStatic.__fields__) # {'specialty': ModelField(name='specialty', type=SpecialtyEnumStatic, required=True)} specialties = { 'psychiatry': 'SPECIALTY:Psychiatry', 'sports_medicine_internal_medicine': 'SPECIALTY:Sports Medicine (Internal Medicine)' } SpecialtyEnumDynamic = Enum('SpecialtyEnumDynamic', specialties) # 关键修改:将字段定义改为 (类型, ...) 显式标记必填 ProviderSearchInputDynamic = create_model( 'ProviderSearchInputDynamic', specialty=(SpecialtyEnumDynamic, ...), __base__=BaseModel ) print(ProviderSearchInputDynamic.__fields__) # {'specialty': ModelField(name='specialty', type=SpecialtyEnumDynamic, required=True)}
补充说明
- 若需要定义可选字段,可将
...替换为默认值,例如specialty=(SpecialtyEnumDynamic, None) - 也可以用
Field类实现更精细化的字段控制,比如添加描述:from langchain.pydantic_v1 import Field ProviderSearchInputDynamic = create_model( 'ProviderSearchInputDynamic', specialty=(SpecialtyEnumDynamic, Field(description="医生专业领域")), __base__=BaseModel )
内容的提问来源于stack exchange,提问作者David Stocker
相关产品推荐
相关产品推荐

