如何从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 文档以获取更多背景信息。