
1. 案例目标
本案例旨在介绍LangChain表达式语言(LCEL)的基本用法,展示如何通过LCEL将提示模板、模型和输出解析器组合成一个完整的处理链。具体目标包括:
- 理解LCEL的基本概念和工作原理
- 学习如何创建和使用提示模板(PromptTemplate)
- 掌握如何将多个组件通过管道操作符(|)连接成链
- 了解如何使用输出解析器处理模型响应
- 实现流式输出和批量处理功能
2. 技术栈与核心依赖
本案例使用的主要技术栈和依赖包括:
- LangChain - 用于构建AI应用的核心框架
- langchain-openai - 提供与OpenAI API的集成
- langchain-core - 提供LangChain的核心功能,包括提示模板和输出解析器
- langchain-community - 提供社区贡献的组件和集成
- langsmith - 用于跟踪和调试LangChain应用
- langchain-opentutorial - 提供教程辅助功能
- OpenAI API - 提供GPT-4o-mini模型服务
3. 环境配置
运行本案例需要进行以下环境配置:
3.1 安装依赖
# 安装langchain-opentutorial包
%pip install langchain-opentutorial
# 安装所需的核心包
from langchain_opentutorial import package
package.install(
[
"langsmith",
"langchain",
"langchain_openai",
"langchain_community",
],
verbose=False,
upgrade=False,
)
3.2 设置环境变量
# 设置环境变量
from langchain_opentutorial import set_env
set_env(
{
"OPENAI_API_KEY": "", # 设置您的OpenAI API密钥
"LANGCHAIN_API_KEY": "", # 设置LangSmith API密钥
"LANGCHAIN_TRACING_V2": "true",
"LANGCHAIN_ENDPOINT": "https://api.smith.langchain.com",
"LANGCHAIN_PROJECT": "",
}
)
也可以通过.env文件加载环境变量:
# 加载.env文件中的环境变量
from dotenv import load_dotenv
load_dotenv(override=True)
3.3 启用LangSmith跟踪
# 设置LangSmith跟踪
from langsmith import utils
utils.tracing_is_enabled()
4. 案例实现
4.1 提示模板的使用
提示模板(PromptTemplate)用于通过整合用户输入变量来创建完整的提示字符串。
创建提示模板
from langchain_core.prompts import PromptTemplate
# 定义模板
template = "What is the capital of {country}?"
# 使用from_template方法创建PromptTemplate对象
prompt_template = PromptTemplate.from_template(template)
prompt_template
使用提示模板生成提示
# 生成提示
prompt = prompt_template.format(country="Korea")
print(prompt) # 输出: What is the capital of Korea?
prompt = prompt_template.format(country="USA")
print(prompt) # 输出: What is the capital of USA?
4.2 链的创建
LangChain表达式语言(LCEL)允许我们使用管道操作符(|)将多个组件组合成一个链。
基本链的创建
from langchain_openai.chat_models import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
# 创建模型
model = ChatOpenAI(model="gpt-4o-mini", temperature=0.1)
# 创建提示
prompt = PromptTemplate.from_template("Please explain {topic} in simple terms.")
# 创建输出解析器
output_parser = StrOutputParser()
# 使用管道操作符创建链
chain = prompt | model | output_parser
调用链
# 设置输入
input = {"topic": "The Principles of Learning in Artificial Intelligence Models"}
# 调用链
response = chain.invoke(input)
print(response)
流式输出
# 请求流式输出
answer = chain.stream(input)
# 流式输出
for token in answer:
print(token.content, end="", flush=True)
4.3 高级应用示例
案例中还展示了一个更复杂的应用,创建一个英语对话生成器:
创建对话模板
template = """
You are a seasoned English teacher with 10 years of experience. Please write an English conversation suitable for the given situation.
Refer to the [FORMAT] for the structure.
#SITUATION:
{question}
#FORMAT:
- Dialogue in English:
- Explanation of the Dialogue:
"""
# 生成提示
prompt = PromptTemplate.from_template(template)
# 初始化ChatOpenAI模型
model = ChatOpenAI(model_name="gpt-4o-mini")
# 初始化字符串输出解析器
output_parser = StrOutputParser()
# 构建链
chain = prompt | model | output_parser
使用对话生成器
# 执行链获取响应
print(chain.invoke({"question": "I want to go to a restaurant and order food."}))
# 流式输出
answer = chain.stream({"question": "Ordering Pizza in the US"})
for token in answer:
print(token, end="", flush=True)
5. 案例效果
5.1 基本链效果
当使用基本链询问"人工智能模型的学习原理"时,系统会返回一个详细的解释,包括:
- 数据的重要性
- 从示例中学习
- 反馈循环
- 泛化能力
- 过拟合和欠拟合
- 算法选择
- 持续学习
2. 对话生成器效果
对话生成器能够根据给定的场景生成符合格式的英语对话,包括:
- 完整的英语对话内容
- 对话的详细解释
- 场景相关的词汇和表达
- 实用的交际用语
3. 流式输出效果
流式输出功能可以实时显示模型生成的文本,提供更好的用户体验,特别是在生成长文本时。
6. 案例实现思路
6.1 LCEL设计理念
LangChain表达式语言(LCEL)的设计理念是提供一种简洁、直观的方式来组合不同的组件。其核心思想包括:
- 组合性:通过管道操作符(|)将不同组件连接起来,形成处理链
- 统一接口:所有组件都实现了相同的接口,可以无缝连接
- 异步支持:原生支持异步操作,提高性能
- 流式处理:内置流式处理能力,适合实时应用
6.2 组件协作机制
在LCEL中,各组件之间的协作遵循以下机制:
- 数据流:数据从左向右流动,每个组件的输出作为下一个组件的输入
- 类型转换:LCEL自动处理不同组件之间的类型转换
- 错误处理:支持统一的错误处理机制
- 批处理:支持批量处理多个输入
6.3 提示模板设计
提示模板的设计考虑了以下因素:
- 参数化:使用占位符({})表示可变部分
- 格式化:支持多种格式化方式
- 验证:对输入参数进行验证
- 部分变量:支持部分变量的预填充
6.4 输出解析器设计
输出解析器的设计考虑了以下因素:
- 格式转换:将模型输出转换为所需格式
- 错误处理:处理解析失败的情况
- 类型安全:确保输出类型的一致性
- 扩展性:支持自定义解析逻辑
7. 扩展建议
7.1 功能扩展
- 多模态支持:扩展链以支持图像、音频等多模态输入
- 记忆机制:添加记忆组件,使链能够记住之前的交互
- 条件路由:根据输入内容动态选择不同的处理路径
- 并行处理:支持并行执行多个分支,提高效率
7.2 性能优化
- 缓存机制:为频繁调用的组件添加缓存
- 批处理优化:优化批处理逻辑,提高吞吐量
- 异步优化:充分利用异步特性,提高并发性能
- 资源管理:优化资源使用,减少内存占用
7.3 应用场景扩展
- 文档问答:结合向量数据库,构建文档问答系统
- 代码生成:扩展为代码生成和解释工具
- 数据分析:集成数据分析工具,提供智能分析能力
- 工作流自动化:构建复杂的工作流自动化系统
7.4 集成扩展
- 外部API集成:集成更多外部API,扩展功能
- 数据库集成:与各种数据库系统集成,支持数据持久化
- 云服务集成:与云服务提供商集成,提供云端能力
- 监控集成:集成监控系统,实时跟踪应用性能
8. 总结
本案例详细介绍了LangChain表达式语言(LCEL)的基本概念和使用方法,展示了如何通过LCEL将提示模板、模型和输出解析器组合成一个完整的处理链。通过这个案例,我们学习了:
- LCEL的核心概念:了解了LCEL的设计理念和工作原理
- 提示模板的使用:掌握了如何创建和使用提示模板
- 链的构建和调用:学会了如何使用管道操作符构建和调用链
- 输出解析器的应用:理解了如何使用输出解析器处理模型响应
- 流式输出的实现:掌握了如何实现流式输出功能
LCEL为构建AI应用提供了一种简洁、直观的方式,使得开发者可以轻松地组合不同的组件,创建复杂的应用。通过本案例的学习,读者应该能够理解LCEL的基本概念,并能够使用LCEL构建自己的AI应用。
未来,LCEL有望成为构建AI应用的标准方式,随着LangChain生态系统的不断发展,LCEL的功能和性能也将不断提升,为开发者提供更加强大和灵活的工具。
1万+

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



