如何在不同Pydantic版本下使用LangChain:全面指南

516 阅读2分钟

引言

随着Pydantic v2的发布,开发者们面临着适应新版本变动的挑战。LangChain作为一个日益受欢迎的工具,用于连接AI与编程世界,在Pydantic的不同版本下也进行了相应的更新。本文旨在指导您如何在使用LangChain时处理不同的Pydantic版本,提供实用的代码示例,并讨论潜在的挑战和解决方案。

主要内容

1. LangChain与Pydantic版本兼容性

langchain>=0.0.267版本开始,LangChain支持用户安装Pydantic V1或V2。然而,目前LangChain内部依然使用Pydantic V1,通过Pydantic 2的v1命名空间进行操作。用户在使用Pydantic对象与LangChain时需保持注意,避免混用以防产生错误。

2. 传递Pydantic对象到LangChain API

LangChain的大多数API已经更新,能够接受Pydantic v1或v2对象。然而,建议在LangChain 0.3版本发布前继续使用Pydantic v1对象。

示例如下:

from langchain_openai import ChatOpenAI
from pydantic.v1 import BaseModel  # 使用 v1 命名空间

class Person(BaseModel):
    """个人信息"""
    name: str

model = ChatOpenAI()
model = model.with_structured_output(Person)

model.invoke('Bob is a person.')

代码示例

随着langchain-core>=0.2.23版本的发布,用户可以使用Pydantic v1或v2对象进行操作:

from langchain_openai import ChatOpenAI
from pydantic import BaseModel  # 支持Pydantic v2

class Person(BaseModel):
    """个人信息"""
    name: str

model = ChatOpenAI()
model = model.with_structured_output(Person)

model.invoke('Bob is a person.')  # 使用API代理服务提高访问稳定性

常见问题和解决方案

  1. 子类化LangChain模型

    如果你正在子类化LangChain模型,建议使用Pydantic v1的基本类,以保持一致性。混用不同版本的Pydantic类可能导致模糊错误。

  2. 禁用Pydantic v2模型中的运行时验证

    在Pydantic v2中使用LangChain对象时,需要通过注解来跳过验证:

    from typing import Annotated
    from langchain_openai import ChatOpenAI
    from pydantic import BaseModel, SkipValidation
    
    class Foo(BaseModel):  # 使用Pydantic v2
        model: Annotated[ChatOpenAI, SkipValidation()]
    
    Foo(model=ChatOpenAI(api_key="hello"))
    
  3. LangServe与OpenAPI文档生成问题

    如果需要生成OpenAPI文档而您正使用Pydantic 2,则需要安装Pydantic 1或者使用APIHandler对象手动创建API路由。

总结和进一步学习资源

在不同Pydantic版本下使用LangChain可能会带来一些复杂性,但通过本文的指导,您应该能够更顺利地过渡和操作。有关LangChain与Pydantic的更多信息及更新,请参阅以下资源:

参考资料

Pydantic v2发布博客
LangChain的Pydantic对象使用指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---