如何从 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
- 对话链
- 检索 QA
- ConversationalRetrievalChain 会话检索链
- StuffDocumentsChain 文档链
- MapReduceDocumentsChain
- MapRerankDocumentsChain
- RefineDocumentsChain
- LLMRouter链
- 多提示链
- LLMMathChain
- 宪法链
查看 LCEL 概念文档和 LangGraph 文档,了解更多背景信息。