LangChain LCEL 简介
LangChain表达式语言( LCEL),是一种声明式的语言,通过它可以轻松地将链组合在一起。 LCEL 从设计的第一天开始就是为了支持 原型即产品,代码无变更 理念的。从最简单的 “Prompt + LLM” 链到最复杂的链(曾有过成功在生产中运行具有数百个步骤的 LCEL 链的案例)。
以下是几个使用 LCEL 的好处:
支持流式传输 当使用 LCEL 构建链时,用户将获得最佳的首次令牌时间(从开始到第一个输出块出现所消耗的时间)。对于某些链来说,这意味着令牌直接从一个 LLM 流式传输到一个支持流式的输出解析器,用户将以与 LLM 输入方输入原始token的相同速率获得解析后的增量输出块。
支持异步 使用 LCEL 构建的任何链都可以使用同步 API(例如在 Jupyter notebook 中进行的原型开发)以及异步 API(例如在 LangServe 服务器中运行)进行调用。这使得原型开发和生产环境中可以使用相同的代码,它们在生产环境将可以获得出色的性能,以及在同一个服务器上处理许多并发请求。
优化的并行执行 每当 LCEL 链具有可以并行执行的步骤(例如,从多个检索器中获取文档),LangChain都会以尽可能小的延迟自动执行它,无论是同步还是异步接口。
重试和回退 可以为 LCEL 链的任何部分配置重试和回退策略,这是一种链(Chain)更可靠扩展的绝佳实践。LangChain目前正在努力为重试/回退添加流式传输支持,以便使用者可以在没有任何延迟成本的情况下获得更多的可靠性。
中间结果可见 对于调试一些更复杂的链,通常希望在最终输出生成之前,也能访问中间步骤的结果。这可以让用户知道每一步正在发生什么,以便能方便的调试链。在LangServe 服务器中,这些中间结果也是流式传输的。
输入和输出模式化 LangChain 可以从 LCEL 链结构中推断出输入输出模式,并为每个 LCEL 链提供 Pydantic 和 JSONSchema 两种模式支持。这些模式可以用于输入和输出的验证,它也是 LangServe 的一个重要组成部分。
无缝集成 LangSmith 跟踪 当链(Chain)变得越来越复杂,了解链中每个步骤确切发生的事情也变得越来越重要。 使用 LCEL,所有 步骤都会自动记录到 LangSmith 中,以实现最大的可观测性和可调试性。
无缝集成 LangServe 部署 使用 LCEL 创建的任何链都可以轻松地部署在 LangServe 上。