LangChain v0.3
最后更新:09.16.24
发生了什么变化
- 所有包内部已从Pydantic 1升级到Pydantic 2。用户代码中完全支持使用Pydantic 2,所有包都不需要像
langchain_core.pydantic_v1
或pydantic.v1
这样的桥接。 - Pydantic 1 将不再受支持,因为它已于2024年6月达到其生命周期结束。
- Python 3.8 将不再受支持,因为它的生命周期将于2024年10月结束。
这些是唯一的重大变化。
最新动态
在0.2.x版本的开发过程中,新增了以下功能:
- 将更多的集成从
langchain-community
移动到它们自己的langchain-x
包中。这是一个非破坏性的更改,因为旧版实现仍然保留在langchain-community
中,并标记为已弃用。这使我们能够更好地管理这些集成的依赖关系、测试和版本控制。您可以在API参考中查看所有最新的集成包。 - 简化的工具定义和使用。阅读更多 here。
- 添加了用于与聊天模型交互的工具:通用模型构造函数、速率限制器、消息工具,
- 增加了dispatch custom events的能力。
- 改进了集成文档和API参考。阅读更多这里。
- 标记了一些遗留链为弃用,并为所有这些链添加了迁移指南。这些链计划在
langchain
1.0.0版本中移除。请参阅弃用链和相关的迁移指南。
如何更新您的代码
如果您正在使用 langchain
/ langchain-community
/ langchain-core
0.0 或 0.1 版本,我们建议您首先 升级到 0.2。
如果您正在使用langgraph
,请升级到langgraph>=0.2.20,<0.3
。这将适用于所有基础包的0.2或0.3版本。
以下是所有已发布包的完整列表以及我们建议升级的版本约束。
任何现在需要langchain-core
0.3的包都进行了小版本更新。
任何现在兼容langchain-core
0.2和0.3的包都进行了补丁版本更新。
你可以使用langchain-cli
来自动更新已弃用的导入。
CLI将处理在LangChain 0.0.x和LangChain 0.1中引入的已弃用导入的更新,
以及更新langchain_core.pydantic_v1
和langchain.pydantic_v1
的导入。
基础包
包 | 最新 | 推荐约束 |
---|---|---|
langchain | 0.3.0 | >=0.3,<0.4 |
langchain-community | 0.3.0 | >=0.3,<0.4 |
langchain-text-splitters | 0.3.0 | >=0.3,<0.4 |
langchain-core | 0.3.0 | >=0.3,<0.4 |
langchain-experimental | 0.3.0 | >=0.3,<0.4 |
下游包
包 | 最新 | 推荐约束 |
---|---|---|
langgraph | 0.2.20 | >=0.2.20,<0.3 |
langserve | 0.3.0 | >=0.3,<0.4 |
集成包
包 | 最新 | 推荐约束 |
---|---|---|
langchain-ai21 | 0.2.0 | >=0.2,<0.3 |
langchain-aws | 0.2.0 | >=0.2,<0.3 |
langchain-anthropic | 0.2.0 | >=0.2,<0.3 |
langchain-astradb | 0.4.1 | >=0.4.1,<0.5 |
langchain-azure-dynamic-sessions | 0.2.0 | >=0.2,<0.3 |
langchain-box | 0.2.0 | >=0.2,<0.3 |
langchain-chroma | 0.1.4 | >=0.1.4,<0.2 |
langchain-cohere | 0.3.0 | >=0.3,<0.4 |
langchain-elasticsearch | 0.3.0 | >=0.3,<0.4 |
langchain-exa | 0.2.0 | >=0.2,<0.3 |
langchain-fireworks | 0.2.0 | >=0.2,<0.3 |
langchain-groq | 0.2.0 | >=0.2,<0.3 |
langchain-google-community | 2.0.0 | >=2,<3 |
langchain-google-genai | 2.0.0 | >=2,<3 |
langchain-google-vertexai | 2.0.0 | >=2,<3 |
langchain-huggingface | 0.1.0 | >=0.1,<0.2 |
langchain-ibm | 0.3.0 | >=0.3,<0.4 |
langchain-milvus | 0.1.6 | >=0.1.6,<0.2 |
langchain-mistralai | 0.2.0 | >=0.2,<0.3 |
langchain-mongodb | 0.2.0 | >=0.2,<0.3 |
langchain-nomic | 0.1.3 | >=0.1.3,<0.2 |
langchain-nvidia | 0.3.0 | >=0.3,<0.4 |
langchain-ollama | 0.2.0 | >=0.2,<0.3 |
langchain-openai | 0.2.0 | >=0.2,<0.3 |
langchain-pinecone | 0.2.0 | >=0.2,<0.3 |
langchain-postgres | 0.0.13 | >=0.0.13,<0.1 |
langchain-prompty | 0.1.0 | >=0.1,<0.2 |
langchain-qdrant | 0.1.4 | >=0.1.4,<0.2 |
langchain-redis | 0.1.0 | >=0.1,<0.2 |
langchain-sema4 | 0.2.0 | >=0.2,<0.3 |
langchain-together | 0.2.0 | >=0.2,<0.3 |
langchain-unstructured | 0.1.4 | >=0.1.4,<0.2 |
langchain-upstage | 0.3.0 | >=0.3,<0.4 |
langchain-voyageai | 0.2.0 | >=0.2,<0.3 |
langchain-weaviate | 0.0.3 | >=0.0.3,<0.1 |
一旦您更新到最近的软件包版本,您可能需要解决由于内部从Pydantic v1切换到Pydantic v2而产生的以下问题:
- 如果你的代码除了LangChain之外还依赖于Pydantic,你需要将你的pydantic版本约束升级为
pydantic>=2,<3
。如果你使用pydantic v1,请参阅Pydantic的迁移指南以获取帮助,将你的非LangChain代码迁移到Pydantic v2。 - 由于内部从Pydantic v1切换到v2,LangChain组件产生了一些副作用。我们在下面列出了一些常见情况以及推荐的解决方案。
过渡到Pydantic 2时的常见问题
1. 不要使用 langchain_core.pydantic_v1
命名空间
将任何使用langchain_core.pydantic_v1
或langchain.pydantic_v1
的地方替换为直接从pydantic
导入。
例如,
from langchain_core.pydantic_v1 import BaseModel
至:
from pydantic import BaseModel
这可能要求您对Pydantic代码进行额外的更新,因为Pydantic 2中有许多重大更改。请参阅Pydantic迁移指南了解如何将代码从Pydantic 1升级到2。
2. 将Pydantic对象传递给LangChain API
用户使用以下API:
BaseChatModel.bind_tools
BaseChatModel.with_structured_output
Tool.from_function
StructuredTool.from_function
应确保他们传递的是Pydantic 2对象,而不是Pydantic 1对象(通过pydantic 2的pydantic.v1
命名空间创建)。
虽然某些API可能接受v1
对象,但建议用户使用Pydantic 2对象以避免未来的问题。
3. 子类化 LangChain 模型
任何从现有LangChain模型(例如BaseTool
、BaseChatModel
、LLM
)继承的子类都应升级以使用Pydantic 2功能。
例如,任何依赖Pydantic 1功能的用户代码(例如,validator
)应更新为Pydantic 2的等效功能(例如,field_validator
),并且任何对pydantic.v1
、langchain_core.pydantic_v1
、langchain.pydantic_v1
的引用应替换为从pydantic
导入。
from pydantic.v1 import validator, Field # if pydantic 2 is installed
# from pydantic import validator, Field # if pydantic 1 is installed
# from langchain_core.pydantic_v1 import validator, Field
# from langchain.pydantic_v1 import validator, Field
class CustomTool(BaseTool): # BaseTool is v1 code
x: int = Field(default=1)
def _run(*args, **kwargs):
return "hello"
@validator('x') # v1 code
@classmethod
def validate_x(cls, x: int) -> int:
return 1
应该更改为:
from pydantic import Field, field_validator # pydantic v2
from langchain_core.pydantic_v1 import BaseTool
class CustomTool(BaseTool): # BaseTool is v1 code
x: int = Field(default=1)
def _run(*args, **kwargs):
return "hello"
@field_validator('x') # v2 code
@classmethod
def validate_x(cls, x: int) -> int:
return 1
CustomTool(
name='custom_tool',
description="hello",
x=1,
)
4. model_rebuild()
当从LangChain模型进行子类化时,用户可能需要向文件中添加相关的导入并重新构建模型。
你可以在这里阅读更多关于model_rebuild
的信息here.
from langchain_core.output_parsers import BaseOutputParser
class FooParser(BaseOutputParser):
...
新代码:
from typing import Optional as Optional
from langchain_core.output_parsers import BaseOutputParser
class FooParser(BaseOutputParser):
...
FooParser.model_rebuild()
使用 langchain-cli 迁移
langchain-cli
可以帮助自动更新代码中已弃用的 LangChain 导入。
请注意,langchain-cli
仅处理已弃用的 LangChain 导入,无法帮助您将代码从 pydantic 1 升级到 pydantic 2。
有关Pydantic 1到2迁移的帮助,请参考Pydantic迁移指南。
从0.0.31版本开始,langchain-cli
依赖于gritql来应用代码修改。
安装
pip install -U langchain-cli
langchain-cli --version # <-- Make sure the version is at least 0.0.31
用法
鉴于迁移脚本并不完美,您应首先确保对代码进行了备份(例如,使用像git
这样的版本控制)。
langchain-cli
将处理 LangChain 0.3 中引入的 langchain_core.pydantic_v1
弃用以及更早的弃用(例如,from langchain.chat_models import ChatOpenAI
应该改为 from langchain_openai import ChatOpenAI
),
您需要运行迁移脚本两次,因为每次运行只应用一个导入替换。
例如,假设你的代码仍然在使用旧的导入 from langchain.chat_models import ChatOpenAI
:
第一次运行后,你会得到:from langchain_community.chat_models import ChatOpenAI
第二次运行后,你会得到:from langchain_openai import ChatOpenAI
# Run a first time
# Will replace from langchain.chat_models import ChatOpenAI
langchain-cli migrate --help [path to code] # Help
langchain-cli migrate [path to code] # Apply
# Run a second time to apply more import replacements
langchain-cli migrate --diff [path to code] # Preview
langchain-cli migrate [path to code] # Apply
其他选项
# See help menu
langchain-cli migrate --help
# Preview Changes without applying
langchain-cli migrate --diff [path to code]
# Approve changes interactively
langchain-cli migrate --interactive [path to code]