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

如何将Pydantic v2模型转换为v1模型适配LangChain?

Pydantic v2模型架构转v1适配LangChain的实现方案

要实现Pydantic v2模型架构向v1的转换,核心思路是借助JSON Schema作为中间层——Pydantic v2和v1都支持基于JSON Schema生成模型类。以下是具体实现方案:

实现步骤

  1. 从v2模型导出标准的JSON Schema
  2. 使用Pydantic v1的create_model方法,结合导出的Schema生成对应的v1模型类
  3. 可选:同步v2模型中的字段描述、验证器等元信息(如果需要保留这些细节)

完整代码实现

from langchain.chains import create_tagging_chain_pydantic
from pydantic import BaseModel as BaseModelV2, Field
from pydantic.v1 import BaseModel as BaseModelV1, create_model

class TaggingModel(BaseModelV2):
    """示例标注模型"""
    entity: str = Field(description="需要识别的实体名称")
    category: str = Field(description="实体所属的分类")
    confidence: float = Field(ge=0.0, le=1.0, description="识别置信度")

def convert_to_v1(v2_model: type[BaseModelV2]) -> type[BaseModelV1]:
    # 导出v2模型的JSON Schema
    v2_schema = v2_model.model_json_schema()
    
    # 提取字段定义:适配v1 create_model的参数格式
    fields = {}
    for field_name, field_info in v2_schema["properties"].items():
        # 映射JSON Schema类型到Python基础类型
        type_map = {
            "string": str,
            "number": float,
            "integer": int,
            "boolean": bool
        }
        py_type = type_map.get(field_info.get("type"), object)
        
        # 处理字段默认值
        default = field_info.get("default", ...)
        
        # 提取字段元信息(描述、数值约束等)
        field_kwargs = {}
        if "description" in field_info:
            field_kwargs["description"] = field_info["description"]
        if "minimum" in field_info:
            field_kwargs["ge"] = field_info["minimum"]
        if "maximum" in field_info:
            field_kwargs["le"] = field_info["maximum"]
        
        fields[field_name] = (py_type, Field(**field_kwargs) if field_kwargs else default)
    
    # 生成v1模型类
    v1_model = create_model(
        v2_model.__name__,
        __doc__=v2_model.__doc__,
        **fields
    )
    
    return v1_model

# 示例调用
if __name__ == "__main__":
    # 假设已初始化llm实例(如ChatOpenAI)
    # llm = ChatOpenAI(temperature=0)
    chain = create_tagging_chain_pydantic(pydantic_schema=convert_to_v1(TaggingModel), llm=llm)

注意事项

  • 上述代码仅处理基础类型和常见验证规则,若v2模型包含嵌套模型、枚举等复杂类型,需扩展转换逻辑
  • 若v2模型使用自定义验证器,需手动将验证逻辑迁移到生成的v1模型中
  • 测试时需验证转换后的v1模型与原v2模型的字段约束、序列化/反序列化行为一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:42:33