掌握LangChain与Pydantic版本兼容性:如何在应用中灵活运用

269 阅读2分钟

引言

Pydantic是Python中广泛使用的数据验证库,其最新版本Pydantic v2已于2023年6月发布,并带来了一些破坏性更改。与此同时,LangChain作为一款强大的自然语言处理库,也在努力适应这一变化。然而,由于LangChain仍在过渡到完全支持Pydantic v2的阶段,开发者可能会在使用不同版本的Pydantic时面临挑战。本文将探讨如何在LangChain中使用Pydantic的不同版本,以及如何在此过程中避免常见问题。

主要内容

使用Pydantic对象与LangChain API

在LangChain的许多API中,开发者可以选择使用Pydantic v1或v2的对象。关键在于了解你所使用的LangChain版本以及相应的Pydantic版本:

  1. Pydantic v1对象:如果你安装了Pydantic v1,使用继承自pydantic.BaseModel的子类;如果你安装了Pydantic v2,使用pydantic.v1.BaseModel
  2. Pydantic v2对象:使用继承自pydantic.BaseModel的子类(在Pydantic v2安装时)。

以下是LangChain API支持Pydantic对象的情况:

  • BaseChatModel.bind_tools
  • BaseChatModel.with_structured_output
  • Tool.from_function
  • StructuredTool.from_function

如果你在使用这些API时遇到问题,请确保你的代码符合相应的版本要求。

子类化LangChain模型

在继承和扩展LangChain模型时,建议继续使用Pydantic v1的原语(如验证器),以避免复杂的版本冲突问题。

代码示例

在使用不同版本的Pydantic与LangChain结合时,可以参考以下代码示例:

# 使用API代理服务提高访问稳定性
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.')

注意:请根据你使用的LangChain版本和安装的Pydantic版本来选择合适的BaseModel

常见问题和解决方案

  1. 混合使用Pydantic v1和v2的对象
    • 当你混合使用不同版本的Pydantic对象时,可能会遇到难以理解的错误。建议始终保持使用同一版本的对象。
  2. 生成OpenAPI文档的限制
    • 如果使用Pydantic v2,你将无法通过LangServe生成OpenAPI文档。解决方案包括回退到Pydantic v1或手动使用APIHandler创建API路由。

总结和进一步学习资源

在过渡期间,理解并灵活应用Pydantic的版本是使用LangChain的重要一环。您可以通过以下资源深入学习:

参考资料

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

---END---