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 物件傳遞至這些 API,而不是 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` 的資訊。
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]