技术背景介绍
在自然语言处理开发中, LLMChain 一直是一个颇受欢迎的工具,它结合了提示模板、语言模型(LLM)和输出解析器,简化了生成式 AI 应用的开发。然而,随着需求的增加和复杂场景的出现,开发者们逐渐发现 LLMChain 的一些局限性。这时,LCEL(LangChain Execution Layer)应运而生,它提供了更清晰的内容和参数、简化的流媒体处理功能以及对原始消息输出的便捷访问。
核心原理解析
LLMChain 的设计是为了将提示模板、语言模型和输出解析器封装在一个统一的类中,虽然简化了使用,但灵活性和扩展性相对有限。而 LCEL 则通过分离不同的组件,使开发者能够更灵活地控制每个步骤,特别是在处理流媒体输出和原始消息时。此外,LCEL 提供了更明确的接口和配置选项,对于复杂应用场景更为友好。
代码实现演示
以下是如何将 LLMChain 迁移到 LCEL 的具体代码示例:
使用LLMChain的实现
# 安装并设置语言链的OpenAI接口
%pip install --upgrade --quiet langchain-openai
import os
from getpass import getpass
# 通过getpass安全获取API密钥
os.environ["OPENAI_API_KEY"] = getpass()
from langchain.chains import LLMChain
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 创建聊天提示模板
prompt = ChatPromptTemplate.from_messages(
[("user", "Tell me a {adjective} joke")],
)
# 使用LLMChain组合模型和提示
chain = LLMChain(llm=ChatOpenAI(), prompt=prompt)
# 执行链条并提供形容词参数
response = chain({"adjective": "funny"})
print(response)
使用LCEL的实现
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 创建聊天提示模板
prompt = ChatPromptTemplate.from_messages(
[("user", "Tell me a {adjective} joke")],
)
# 使用管道模式组合各个组件
chain = prompt | ChatOpenAI() | StrOutputParser()
# 执行管道并提供形容词参数
response = chain.invoke({"adjective": "funny"})
print(response)
# 如果需要冷藏输入输出,可以使用RunnablePassthrough
from langchain_core.runnables import RunnablePassthrough
outer_chain = RunnablePassthrough().assign(text=chain)
response_with_metadata = outer_chain.invoke({"adjective": "funny"})
print(response_with_metadata)
LCEL 的优势
- 清晰的结构和参数控制:每个组件独立而明确,使得参数的传递和处理更加直观。
- 简化的流媒体支持:通过管道形式轻松处理流媒体输出。
- 便捷的原始消息访问:无需复杂回调即可获取原始消息内容。
应用场景分析
使用 LCEL 可以极大地提高生成式 AI 应用的开发效率,尤其在需要频繁更改提示模板和模型选项的情况下,LCEL 的模块化特性尤为突出。此外,它可以在 AI 驱动的对话系统、自定义内容生成器等场景中发挥重要作用。
实践建议
- 在需要流媒体输出或者复杂数据操控的项目中,优先考虑使用 LCEL 以获得更好的性能和开发体验。
- 在 LCEL 中定制输出解析器,以满足特定的格式和内容需求。
- 利用 LCEL 的模块化特性,进行逐步调试和测试,以确保每个组件的功能和表现。
如果遇到问题欢迎在评论区交流。
—END—
214

被折叠的 条评论
为什么被折叠?



