如何将链迁移到 LCEL
前提条件
本指南假设您熟悉以下概念:
LCEL 旨在简化使用 LLM 构建有用应用程序和组合相关组件的过程。它通过提供以下功能实现这一点:
- 统一接口:每个 LCEL 对象都实现了
Runnable
接口,该接口定义了一组通用的调用方法(invoke
、batch
、stream
、ainvoke
等)。这使得可以自动且一致地支持有用的操作,例如中间步骤的流式处理和批处理,因为由 LCEL 对象组成的每个链本身也是一个 LCEL 对象。 - 组合原语:LCEL 提供了一些原语,使得组合链、并行化组件、添加后备、动态配置链内部等操作变得简单。
LangChain 维护了一些遗留抽象。这些抽象中的许多可以通过 LCEL 原语的简短组合重新实现。这样做有一些一般性的好处:
- 结果链通常实现了完整的
Runnable
接口,包括适当的流式处理和异步支持; - 链可能更容易扩展或修改;
- 链的参数通常更易于定制(例如,提示),相比于以前的版本,后者往往是子类并且具有不透明的参数和内部结构。
LCEL 实现可能稍微冗长,但在透明性和可定制性方面有显著的好处。
以下页面帮助从各种特定链迁移到 LCEL:
查看 LCEL 概念文档 以获取更多背景信息。