如何从 v0.0 版本的链进行迁移
LangChain 自首次发布以来已经不断发展,许多最初的“Chain”类已被弃用,取而代之的是更灵活、功能更强的 LCEL 和 LangGraph 框架。
本指南将帮助你将现有的 v0.0 链迁移到新的抽象结构中。
弃用的实现方式是如何工作的
尽管这些实现中的许多已经被弃用,它们在代码库中仍然受到支持。 然而,不建议用于新开发,我们建议使用以下指南重新实现它们!
要查看每个已弃用实现的计划移除版本,请参阅它们的 API 参考。
先决条件
这些指南假定读者对以下概念有一定了解:
LangChain 保留了许多遗留抽象。其中许多可以通过 LCEL 和 LangGraph 原语的简短组合重新实现。
LCEL
LCEL 旨在简化使用大型语言模型构建实用应用程序并整合相关组件的过程。它通过提供以下功能来实现这一点:
- 统一的接口: 每个 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 文档 以获取更多信息。