如何从 v0.0 链迁移
自发布以来,LangChain 不断发展,许多最初的 "Chain" 类已被弃用,取而代之的是更灵活、更强大的 LCEL 和 LangGraph 框架。
本指南将帮助您将现有的 v0.0 链迁移到新的抽象。
已弃用的实现如何工作
尽管许多这些实现已被弃用,但它们在代码库中仍然受支持。不过,我们不推荐在新开发中使用它们,并建议您使用以下指南进行重新实现!
要查看每个已弃用实现计划移除的版本,请查看其 API 参考。
先决条件
这些指南假设您对以下概念有一定的了解:
LangChain 维护了许多遗留抽象。其中许多可以通过 LCEL 和 LangGraph 的基本组件进行简短的组合来实现。
LCEL
LCEL 旨在简化使用 LLM 构建实用应用和组合相关组件的过程。它通过提供以下功能来实现这一点:
- 统一接口: 每个 LCEL 对象都实现了
Runnable接口,该接口定义了一组通用的调用方法(invoke、batch、stream、ainvoke等)。这使得能够自动且一致地支持流式中间步骤和批处理等有用操作,因为由 LCEL 对象组成的每个链本身也是一个 LCEL 对象。 - 组合原语: LCEL 提供了一系列原语,可以轻松地组合链、并行化组件、添加回退、动态配置链的内部组件等等。
LangGraph
LangGraph 构建在 LCEL 之上,允许在保持代码简洁易读的同时,高性能地编排应用程序组件。它内置了持久性、支持循环,并优先考虑可控性。 如果对于大型或更复杂的链来说,LCEL 变得难以管理,那么转向 LangGraph 实现可能会带来益处。
优势
为现有的 v0.0 链使用这些框架带来了一些优势:
- 生成的链通常会实现完整的
Runnable接口,包括在适当情况下的流式处理和异步支持; - 链可以更轻松地扩展或修改;
- 相较于以前版本倾向于子类化且参数和内部机制不透明的情况,这些链的参数通常会被暴露出来以便于自定义(例如修改提示);
- 如果使用 LangGraph,链将支持内置持久性,从而通过“记忆”聊天历史来实现会话体验。
- 如果使用 LangGraph,链的步骤可以进行流式处理,从而提供更高的控制力和可定制性。
以下页面将协助您从各种特定链迁移到 LCEL 和 LangGraph:
- LLMChain
- ConversationChain
- RetrievalQA
- ConversationalRetrievalChain
- StuffDocumentsChain
- MapReduceDocumentsChain
- MapRerankDocumentsChain
- RefineDocumentsChain
- LLMRouterChain
- MultiPromptChain
- LLMMathChain
- ConstitutionalChain
请查看 LCEL 概念文档 和 LangGraph 文档 以获取更多背景信息。