探索LangChain在不同Pydantic版本下的使用方法

151 阅读2分钟

引言

随着Pydantic v2的发布,LangChain即将结束对Pydantic v1的支持,计划在LangChain 0.3版本中迁移到Pydantic 2。同时,LangChain在目前的版本(>=0.0.267)允许用户安装Pydantic v1或v2。这篇文章将探讨如何在不同Pydantic版本下使用LangChain。

主要内容

1. 使用LangChain API

LangChain的大部分API已经更新,可以接受Pydantic v1或v2对象。然而,由于Pydantic不支持混用.v1和.v2对象,我们建议在LangChain 0.3发布前继续使用Pydantic v1对象。

API支持情况:

APIPydantic 1Pydantic 2
BaseChatModel.bind_toolsYeslangchain-core>=0.2.23
BaseChatModel.with_structured_outputYeslangchain-core>=0.2.23

合作包支持情况:

包名Pydantic 1Pydantic 2
langchain-mistralaiYes>=0.1.11

2. 子类化LangChain模型

由于LangChain内部使用Pydantic v1,如果你正扩展LangChain模型,应该使用Pydantic v1的基础类。

示例

from pydantic.v1 import validator
from langchain_core.tools import BaseTool

class CustomTool(BaseTool):
    x: int = 1

    def _run(*args, **kwargs):
        return "hello"

    @validator('x')
    @classmethod
    def validate_x(cls, x: int) -> int:
        return 1

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

如果在Pydantic v2模型中使用LangChain对象,可以禁用运行时验证:

from typing import Annotated
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, SkipValidation

class Foo(BaseModel):
    model: Annotated[ChatOpenAI, SkipValidation()]

Foo(model=ChatOpenAI(api_key="hello"))

4. 使用LangServe生成OpenAPI文档

如果你使用Pydantic 2,将无法生成OpenAPI文档。你可以安装Pydantic 1或者手动使用APIHandler创建API路由。

代码示例

以下是如何在Pydantic v1和v2下使用LangChain的简单示例:

# 对于Pydantic version 1
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.')
# 对于Pydantic version 2
from langchain_openai import ChatOpenAI
from pydantic import BaseModel

class Person(BaseModel):
    name: str

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

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

常见问题和解决方案

  1. 混合使用v1和v2对象导致错误: 确保不混合使用Pydantic v1和v2对象。
  2. 在Pydantic 2下无法生成OpenAPI文档: 使用Pydantic 1或手动创建API路由。

总结和进一步学习资源

LangChain在Pydantic v1和v2的过渡期间提供了一定的灵活性,但开发者应注意避免混用不同版本的对象。等待LangChain 0.3发布将带来更简单的兼容性。

参考资料

  1. Pydantic v2发布公告
  2. Pydantic v2迁移指南
  3. LangChain文档

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

---END---