如何从 v0.0 chains 迁移
自首次发布以来,LangChain 已不断发展,许多原始的“Chain
本指南将帮助您将现有的 v0.0 chains 迁移到新的抽象层。
过时实现的工作原理
尽管其中许多实现已被弃用,但它们仍在代码库中得到支持。 然而,我们不推荐在新开发中使用它们,并建议使用以下指南重新实现它们!
要查看每个已弃用实现计划移除的版本,请查阅其 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:
- LLM链
- 对话链
- 检索问答
- 对话检索链
- 文档链
- MapReduceDocumentsChain
- MapRerankDocumentsChain
- RefineDocumentsChain
- LLM路由链
- 多提示链
- LLM数学链
- 宪法链
查看 LCEL 概念文档 和 LangGraph 文档 以获取更多背景信息。