LangChain LCEL深度解析:Runnable协议声明式编程新范式,有何独到之处?
- 内容介绍
- 文章标签
- 相关推荐
好的, 想象一下传统的乐高积木。每一块乐高,无论形状、大小、颜色,其顶部都有凸起,底部都有孔洞。这种统一的接口使得任何两块乐高都可以被牢固地拼接在一起。 1. 简介与背景 在人工智能领域, 特别是自然语言处理和大型语言模型的开发中,构建复杂的工作流程一直是一个挑战。早期的 LangChain 框架提供了 SequentialChain 等方式来组合不同的组件, 但这些方法往往配置繁琐、不够灵活。为了解决这些问题, LangChain 团队推出了新的表达式语言 ,它基于 Runnable 协议的声明式编程范式。 2. Runnable 协议详解 Runnable 是 LangChain 中一种核心的概念。它不是一个具体的类或函数,而是一种协议或接口。任何实现了 Runnable 协议的方法的组件都可以被认为是 Runnable 的。 2.1 Runnable 的关键方法 每个 Runnable 都必须实现以下方法: .invoke: 施行 Runnable 并返回后来啊 .batch: 批量施行 Runnable .stream: 流式施行 Runnable .ainvoke: 异步调用 Runnable 2.2 代码示例 from langchain__v1 import ChatModel, PromptTemplate, LLMChainfrom langchain_chroma import Chromafrom langchain_qwen import QwenEmbeddingsfrom _splitter import RecursiveCharacterTextSplitterfrom langchain_ import Document # 定义 PromptTemplate# 创建一个简单的 PromptTemplate模板template = "你是一个翻译器, 将以下内容翻译成英语: {text}" # 创建模型实例model = ChatModel # 创建 LLMChain# 定义输入和输出变量input_variables = # 创建一个链joke_chain = LLMChain translation = joke_chainprint 3. LCEL 的声明式特性 你想... LCEL 使用管道操作符 来连接不同的 Runnable 组件。这种声明式的语法使得链的构建更加简洁明了。比方说: # 构建一个简单的翻译链translation_chain = template | model# 施行链translation = translation_chainprint 4. 组件作为 Runnable 除了 PromptTemplate 和 LLM 外其他组件也可以作为 Runnable 被集成到 LCEL 链中。 乱弹琴。 5. Retriever 作为 Runnable from langchain__v1 import Document, VectorstoreRetrieverclass MyRetriever: def __init__: super.__init__ self._vectorstore = Chroma self._index = self._vectorstore.get def invoke: return self._indexMyRetriever = MyRetrieverretriever = MyRetrieverdocs = retrieverprint 6. 工具 作为Runnable from langchain__v1 import Toolfrom langchain__utilities import SerpAPIKeyimport osapi_key = ossearcher = Tool json res), description="Use Google Search to find answers to your queries.")result searcherprint 7. LCEL vs SequentialChain 的对比 | 特性 | SequentialChain | LCEL | |------------|-----------------|----------------| | 配置 | 手动繁琐 | 声明式简洁 | | 可读性 | 低 | 高 | | 可 性 | 有限 | 强大 | 8. LCEL 通过引入 runnable 协议和管道操作符 | ,极大地简化了 LangChain 中的工作流构建过程。它不仅提高了代码的可读性和可维护性,还增强了灵活性和可 性。因为 AI 应用需求的日益增长,LCEL 将在未来的开发中发挥越来越重要的作用。
好的, 想象一下传统的乐高积木。每一块乐高,无论形状、大小、颜色,其顶部都有凸起,底部都有孔洞。这种统一的接口使得任何两块乐高都可以被牢固地拼接在一起。 1. 简介与背景 在人工智能领域, 特别是自然语言处理和大型语言模型的开发中,构建复杂的工作流程一直是一个挑战。早期的 LangChain 框架提供了 SequentialChain 等方式来组合不同的组件, 但这些方法往往配置繁琐、不够灵活。为了解决这些问题, LangChain 团队推出了新的表达式语言 ,它基于 Runnable 协议的声明式编程范式。 2. Runnable 协议详解 Runnable 是 LangChain 中一种核心的概念。它不是一个具体的类或函数,而是一种协议或接口。任何实现了 Runnable 协议的方法的组件都可以被认为是 Runnable 的。 2.1 Runnable 的关键方法 每个 Runnable 都必须实现以下方法: .invoke: 施行 Runnable 并返回后来啊 .batch: 批量施行 Runnable .stream: 流式施行 Runnable .ainvoke: 异步调用 Runnable 2.2 代码示例 from langchain__v1 import ChatModel, PromptTemplate, LLMChainfrom langchain_chroma import Chromafrom langchain_qwen import QwenEmbeddingsfrom _splitter import RecursiveCharacterTextSplitterfrom langchain_ import Document # 定义 PromptTemplate# 创建一个简单的 PromptTemplate模板template = "你是一个翻译器, 将以下内容翻译成英语: {text}" # 创建模型实例model = ChatModel # 创建 LLMChain# 定义输入和输出变量input_variables = # 创建一个链joke_chain = LLMChain translation = joke_chainprint 3. LCEL 的声明式特性 你想... LCEL 使用管道操作符 来连接不同的 Runnable 组件。这种声明式的语法使得链的构建更加简洁明了。比方说: # 构建一个简单的翻译链translation_chain = template | model# 施行链translation = translation_chainprint 4. 组件作为 Runnable 除了 PromptTemplate 和 LLM 外其他组件也可以作为 Runnable 被集成到 LCEL 链中。 乱弹琴。 5. Retriever 作为 Runnable from langchain__v1 import Document, VectorstoreRetrieverclass MyRetriever: def __init__: super.__init__ self._vectorstore = Chroma self._index = self._vectorstore.get def invoke: return self._indexMyRetriever = MyRetrieverretriever = MyRetrieverdocs = retrieverprint 6. 工具 作为Runnable from langchain__v1 import Toolfrom langchain__utilities import SerpAPIKeyimport osapi_key = ossearcher = Tool json res), description="Use Google Search to find answers to your queries.")result searcherprint 7. LCEL vs SequentialChain 的对比 | 特性 | SequentialChain | LCEL | |------------|-----------------|----------------| | 配置 | 手动繁琐 | 声明式简洁 | | 可读性 | 低 | 高 | | 可 性 | 有限 | 强大 | 8. LCEL 通过引入 runnable 协议和管道操作符 | ,极大地简化了 LangChain 中的工作流构建过程。它不仅提高了代码的可读性和可维护性,还增强了灵活性和可 性。因为 AI 应用需求的日益增长,LCEL 将在未来的开发中发挥越来越重要的作用。

