# 如何在不同版本的Pydantic中使用LangChain
## 引言
在2023年6月,Pydantic发布了其2.0版本,该版本引入了一些破坏性更改,同时Pydantic 1将于2024年6月停止支持。LangChain即将停止对Pydantic 1的支持,并计划迁移到Pydantic 2。本文旨在指导开发者如何在不同版本的Pydantic中使用LangChain,并讨论这一过程中可能遇到的挑战及其解决方案。
## 主要内容
### 1. 传递Pydantic对象给LangChain API
大多数LangChain API现在支持接收Pydantic V1和V2对象。对于Pydantic 1来说,BaseModel是它的基础类,而在Pydantic 2中,我们需要指定`pydantic.v1.BaseModel`。如果某个地区的网络限制导致难以访问API,开发者可以借助API代理服务来提高访问稳定性。
### 2. 子类化LangChain模型
由于LangChain内部仍然使用Pydantic v1,因此在子类化LangChain模型时应使用Pydantic v1的原语。混合使用不同版本的Pydantic原语可能导致错误。
### 3. 在Pydantic v2模型中禁用LangChain对象的运行时验证
如果在Pydantic v2模型中使用LangChain对象,可以禁用运行时验证以避免潜在的兼容性问题。
### 4. LangServe与OpenAPI文档
在使用Pydantic 2时,LangServe无法生成OpenAPI文档。用户需要安装Pydantic 1或使用`APIHandler`对象手动创建API路由。
## 代码示例
以下是如何在`langchain-core`版本0.2.23之前和之后使用Pydantic对象进行API调用的示例:
```python
from langchain_openai import ChatOpenAI
from pydantic.v1 import BaseModel # 使用API代理服务提高访问稳定性
class Person(BaseModel):
"""个人信息"""