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 参考中查看所有最新的集成包。
- 简化了工具定义和使用。在此处阅读更多。
- 添加了与聊天模型交互的实用工具:通用模型构造器、速率限制器、消息实用工具,
- 添加了分发自定义事件的功能。
- 改造了集成文档和 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 2 中存在一些破坏性变更,这可能需要您对 Pydantic 代码进行额外的更新。请参阅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。
虽然某些 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` 的更多信息。
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]