文章目录
- 介绍
- 优势
- 运行接口
介绍
LCEL的全称是Lang Chain Expression Language。其实他的用处就是使用“|”运算符链接LangChain应用的各个组件。
是一种声明式的方法来链接Langchain组件。LCEL从第一天起就被设计为支持将原型投入生产,无需代码更改,从最简单的“提示词+大型语言模型”链到最复杂的链(我们看到有人成功在生产环境中运行包含数百个步骤的LCEL链)。
优势
以下是您可能想要使用 LCEL 的一些原因:
- 一流的流式支持: 使用 LCEL构建链时,您将获得最佳的首次令牌时间(从开始到第一个输出块出现的时间)。对于某些链,这意味着例如我们直接从大型语言模型流式传输令牌到流式输出解析器,您将以与大模型供应商输出原始令牌相同的速度返回解析后的增量输出块。
- 异步支持: 使用 LCEL 构建的任何链都可以通过同步 API(例如,在您的 Jupyter 笔记本中进行原型设计)以及异步
API(例如,在 LangServe 服务器中)进行调用。这使得在原型和生产中使用相同的代码成为可能,具有出色的性能,并能够在同一服务器上处理多个并发请求。 - 优化的并行执行: 每当您的 LCEL链有可以并行执行的步骤时(例如,如果您从多个检索器获取文档),我们会自动执行,无论是在同步接口还是异步接口中,以实现尽可能小的延迟。
- 重试和回退: 为您的 LCEL 链的任何部分配置重试和回退。这是使您的链在规模上更可靠的好方法。我们目前正在努力为重试/回退添加流式支持,以便您可以在没有任何延迟成本的情况下获得额外的可靠性。
- 访问中间结果: 对于更复杂的链,访问中间步骤的结果通常非常有用,即使在最终输出生成之前。这可以用来让最终用户知道正在发生某些事情,或者仅仅是为了调试你的链。你可以流式传输中间结果,并且它在每个 LangServe 服务器上都可用。
- 输入和输出模式 输入和输出模式为每个 LCEL 链提供了从链的结构推断出的 Pydantic 和 JSONSchema模式。这可以用于输入和输出的验证,并且是 LangServe 的一个重要组成部分。
- 无缝的 LangSmith 跟踪 随着你的链变得越来越复杂,理解每一步究竟发生了什么变得越来越重要。 使用 LCEL,所有步骤都会自动记录到 LangSmith 以实现最大程度的可观察性和可调试性。
运行接口
为了尽可能简化自定义链的创建,它们实现了一个"Runnable"协议。许多LangChain组件实现了Runnable协议,包括聊天模型、大型语言模型、输出解析器、检索器、提示词模板等。此外,还有一些用于处理可运行对象的有用原语,您可以在下面阅读。
这是一个标准接口,使得定义自定义链以及以标准方式调用它们变得简单。 标准接口包括:
- stream: 流式返回响应的块
- invoke: 在输入上调用链
- batch: 在输入列表上调用链
这些也有相应的异步方法,应该与asyncio的await语法一起使用以实现并发:
- astream: 异步流式返回响应的块
- ainvoke: 异步调用链上的输入
- abatch: 异步调用链上的输入列表
- astream_log: 在发生时流式返回中间步骤,除了最终响应
- astream_events: 测试版 在链中发生时流式事件 (在 langchain-core 0.1.14 中引入)
每个组件的 输入类型 和 输出类型 不同:
所有可运行的组件都暴露输入和输出 模式 以检查输入和输出:
- input_schema: 从可运行组件的结构自动生成的输入 Pydantic 模型
- output_schema: 从可运行组件的结构自动生成的输出 Pydantic 模型