引言
随着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代理服务提高访问稳定性
常见问题和解决方案
-
子类化LangChain模型
如果你正在子类化LangChain模型,建议使用Pydantic v1的基本类,以保持一致性。混用不同版本的Pydantic类可能导致模糊错误。
-
禁用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")) -
LangServe与OpenAPI文档生成问题
如果需要生成OpenAPI文档而您正使用Pydantic 2,则需要安装Pydantic 1或者使用
APIHandler对象手动创建API路由。
总结和进一步学习资源
在不同Pydantic版本下使用LangChain可能会带来一些复杂性,但通过本文的指导,您应该能够更顺利地过渡和操作。有关LangChain与Pydantic的更多信息及更新,请参阅以下资源:
参考资料
Pydantic v2发布博客
LangChain的Pydantic对象使用指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---