14、LangChain 链:LCEL 与 Legacy 链的全面解析

LangChain 链:LCEL 与 Legacy 链的全面解析

1. LCEL 链与 Legacy 链概述

1.1 LCEL 链

LCEL 代表 “LangChain Execution Language”,是创建链的现代方式。它允许使用专门为此目的设计的领域特定语言,对链的每个步骤进行精细控制。其特点如下:
- 灵活性 :可以定义复杂逻辑,并无缝集成各种操作。
- 可扩展性 :由于其模块化特性,易于扩展和修改,适合不断发展的应用程序。
- 用例 :例如开发一个系统,该系统需要获取用户数据、进行分析,并动态生成个性化报告,就可以使用 LCEL 链精确构建此工作流程,并有效处理任务的各个方面。

1.2 Legacy 链

Legacy 链是 LangChain 中构建链的原始方法。虽然不如 LCEL 链灵活,但使用起来更简单,因为它们是为处理特定任务而预构建的。其特点如下:
- 简单性 :与 LCEL 链相比,实现起来更直接,所需的设置和配置更少。
- 直接应用 :适用于工作流程稳定、变更或定制需求较少的应用程序。
- 用例 :如果应用程序需要执行标准任务,如根据用户查询发送格式化的电子邮件响应,Legacy 链可能是理想之选。

1.3 两者区别

通过以下示例可以更好地理解两者的区别:

LCEL 链示例 <
### LangChain LCEL 实现多顺序调用 LangChain 提供了一种灵活的方式来组合多个条(Chains),并通过其表达语言(LCEL)实现复杂的逻辑操作。以下是关于如何通过 LangChain 的 `SimpleSequentialChain` 和其他组件来实现多顺序调用的具体方法。 #### 使用 SimpleSequentialChain 组合两条 Chain 可以通过 `SimpleSequentialChain` 将多个条按顺序连接起来,从而形成一个多阶段的工作流程。以下是一个具体的代码示例: ```python from langchain.chains import SimpleSequentialChain, LLMChain from langchain.prompts import PromptTemplate from langchain.llms import OpenAI # 定义第一个 Chain (Synopsis Chain) synopsis_template = """You are a helpful assistant that generates movie synopses. Title: {title} Genre: {genre} Write a brief synopsis for this movie:""" synopsis_prompt = PromptTemplate(input_variables=["title", "genre"], template=synopsis_template) llm = OpenAI(temperature=0.7) synopsis_chain = LLMChain(llm=llm, prompt=synopsis_prompt) # 定义第二个 Chain (Review Chain) review_template = """You are a helpful assistant that writes reviews about movies. Movie Synopsis: {movie_synopsis} Write a short review of this movie.""" review_prompt = PromptTemplate(input_variables=["movie_synopsis"], template=review_template) review_chain = LLMChain(llm=llm, prompt=review_prompt) # 创建 Sequential Chain 来串联这两个 Chains overall_chain = SimpleSequentialChain(chains=[synopsis_chain, review_chain], verbose=True) # 执行整体 Chain result = overall_chain.run({"title": "The Matrix", "genre": "Science Fiction"}) print(result) ``` 上述代码展示了如何使用 `SimpleSequentialChain` 将两个条按顺序执行[^1]。首先生成电影简介 (`synopsis_chain`),然后基于该简介撰写评论 (`review_chain`)。 --- #### 利用 Runnable 协议扩展功能 除了 `SimpleSequentialChain`,还可以利用 LangChain 中的 `Runnable` 协议来自定义更复杂的行为。例如,如果需要支持批量处理或流式传输数据,则可以借助 `Runnable` 接口中的 `stream` 或 `batch` 方法[^3]。下面展示一个简单的例子: ```python from langchain.schema.runnable import RunnableLambda # 自定义函数作为 Chain 的一部分 def process_input(text): return f"Processed Input: {text}" custom_chain = RunnableLambda(process_input) # 结合之前的 Chains 构建新的 Sequence complex_chain = synopsis_chain | custom_chain | review_chain # 调用 Complex Chain 并查看结果 output = complex_chain.invoke({"title": "Inception", "genre": "Thriller"}) print(output) ``` 在这个例子中,我们引入了 `RunnableLambda` 来封装自定义函数,并将其其他条结合起来,形成了一个新的工作流。 --- #### 声明式的 LangChain 表达语言(LCEL) 对于更加高级的需求,可以直接采用 LangChain 表达语言(LCEL)。它允许开发者以声明的方式描述整个流水线结构,而无需显式编写 Python 代码。这种模式非常适合大规模部署以及动态调整配置场景下的应用开发[^2]。 虽然官方文档尚未提供完整的 LCEL 示例脚本,但可以根据现有 API 文档推测其实现形式如下所示: ```yaml pipeline: steps: - name: generate_synopsis type: llm_chain config: prompt: | You are an AI writer who creates engaging summaries... input_vars: title: string genre: string - name: write_review type: llm_chain depends_on: [generate_synopsis] config: prompt: | Based on the provided summary, craft a compelling critique... input_vars: movie_synopsis: string ``` 此 YAML 文件定义了一个两步管道:第一步生成摘要;第二步依据前一步的结果撰写影评。实际运行时会由框架解析这些指令并完成相应任务。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值