如何从v0.0链迁移
LangChain 自首次发布以来已经发展,许多原始的 "Chain" 类已被弃用,转而采用更灵活和强大的 LCEL 和 LangGraph 框架。
本指南将帮助您将现有的v0.0链迁移到新的抽象层。
How deprecated implementations work
尽管许多这些实现已被弃用,但它们在代码库中仍然受支持。 然而,不建议在新开发中使用它们,我们建议使用以下指南重新实现它们!
要查看每个已弃用实现的计划移除版本,请检查它们的API参考。
Prerequisites
这些指南假设您对以下概念有一定的了解:
LangChain 维护了许多遗留的抽象。其中许多可以通过 LCEL 和 LangGraph 原语的简短组合重新实现。
LCEL
LCEL 旨在简化使用LLMs构建有用应用程序并组合相关组件的过程。它通过提供以下内容来实现这一点:
- 统一的接口:每个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文档以获取更多背景信息。