文章目录
- 📄 基本信息
- 🚀 LangChain框架概述
- 核心定位
- 生态系统
- 核心价值
- 使用建议
- 选择考量
- 🧩 LangChain核心抽象详解
- 核心抽象组件
- ChatModel详解
- PromptTemplate详解
- OutputParser详解
- 核心抽象的价值
- 📝 使用示例
- 运行结果
- 🎯 功能概述
- 🔧 核心技术点
- 📊 代码结构分析
- 🔍 关键代码解析
- 1. 三大核心组件初始化
- 2. Chain构造与执行
- 3. 流式响应处理
- 📝 扩展使用示例
- 运行结果
- 💡 学习建议
- 📚 相关资源
- � 总结
📄 基本信息
- 创建时间:2025-12-24 18:02
- 作者:zuozewei
- 功能:LangChain三大核心组件演示
- 技术栈:Python、LangChain、DeepSeek API
🚀 LangChain框架概述
核心定位
LangChain是一个开发框架,提供基础抽象和LangChain表达式语言(LCEL),通过管道符简化了组装链的过程,提升了代码的表达性。它不只是一个框架,而是一个完整的生态系统,包括社区生态和扩展生态。
生态系统
- 社区生态:包含大量的各种实现和工具,需要根据需求选择相应的实现
- 扩展生态:包括LangServe、LangSmith、LangGraph等工具和平台,提供更多可做的事情
- 核心库:提供基础组件和抽象
核心价值
- 学习材料:提供了大量示例和提示词模板,是一个很好的学习资源
- 基础抽象:提供了一些开发应用所需的基础抽象,大部分实现由社区生态提供
- 表达式语言LCEL:通过管道符简化了组装链的过程,提升了代码的表达性
- 完整生态:从框架到工具链,提供完整的大模型应用开发支持
使用建议
- 需求评估:根据自己的情况评估使用场景,LangChain不是社区里的唯一选择
- 持续关注:持续关注和了解LangChain的新发展
- 生态利用:充分利用社区生态和扩展生态提供的资源
- 合理选择:根据项目需求和团队情况,评估是否选择使用LangChain
选择考量
- 项目规模:小型项目可能只需要部分组件
- 团队熟悉度:考虑团队对框架的熟悉程度
- 定制需求:评估框架是否满足特定定制需求
- 长期维护:考虑框架的可持续性和社区支持
🧩 LangChain核心抽象详解
核心抽象组件
LangChain的核心抽象包括ChatModel、PromptTemplate和OutputParser,它们是构建大模型应用的核心部分,分别处理模型调用、输入和输出。
ChatModel详解
- 核心地位:是整个框架的核心,根据输入的内容生成输出
- 调用方法:
- 同步调用:使用
invoke()方法 - 流式处理:使用
stream()方法 - 批处理:处理多个输入
- 异步调用:使用
ainvoke()等异步方法
- 同步调用:使用
- 社区实现:如OpenAI提供了ChatModel和Embedding模型,统一放到
langchain-openai包中 - 简化代码:通过统一接口,简化了不同模型服务的调用代码
PromptTemplate详解
- 概念:用于预置提示词,可以不断调整以达到更好的效果
- 共享性:可以共享给其他开发者使用
- 使用方法:
- 创建模板:定义提示词结构和占位符
- 组装模型链:与ChatModel和OutputParser组合
- 调用链:通过替换占位符将输入参数处理成发给模型的消息
- 有效拆分:有效拆分了开发者提示词和用户提示词
OutputParser详解
- 功能:负责处理输出结果的解析过程
- 常用解析器:
StrOutputParser:将输出解析为字符串JsonOutputParser:将输出解析为JSON格式
- 其他解析器:
- JSON、CSV、分隔符、枚举等格式解析器
- 相应的格式指令
- 包含格式指令:处理输出时包含了格式指令,确保输出符合预期格式
核心抽象的价值
- 统一接口:提供了标准化的接口,简化了开发流程
- 职责分离:
- ChatModel:处理模型调用
- PromptTemplate:处理输入
- OutputParser:处理输出
- 灵活性:可以根据需要组合不同的实现
- 扩展性:社区可以提供更多的实现和工具
📝 使用示例
# -*- coding: utf-8 -*-""" @Time : 2026/01/02 09:39 @Author : zuozewei @File : 2.LangChain的核心抽象.py @Desc : LangChain的核心抽象 """importosimportdotenvfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_openaiimportChatOpenAI# 加载环境变量dotenv.load_dotenv()# ChatModel: 对于大模型的抽象llm=ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"),openai_api_base=os.getenv("OPENAI_API_BASE"),model_name=os.getenv("AI_MODEL","deepseek-chat"),)# PromptTemplate: 负责编排提示词prompt=ChatPromptTemplate.from_messages([("system","请将下面的内容翻译成英文:"),("user","{text}"),])# OutputParser: 负责解析LLM的生成结果parser=StrOutputParser()# 构造Chain# Chain中组件的声明顺序,就是其实际的执行顺序chain=prompt|llm|parser# 调用Chain,获取执行结果# 采用流式响应# 流式响应返回的是一个Token的Iterator,可以通过for循环遍历stream=chain.stream({"text":"床前明月光,疑似地上霜"})forchunkinstream:print(chunk,flush=True,end="")print()运行结果
Before my bed, there is bright moonlight, It seems like frost on the ground.🎯 功能概述
示例展示了LangChain框架的三大核心抽象组件:ChatModel、PromptTemplate和OutputParser,并演示了如何使用管道操作符|将这些组件串联起来形成一个完整的处理链。
🔧 核心技术点
- LangChain核心组件
- 管道操作符串联
- 流式响应处理
- 提示词模板
- 输出解析
📊 代码结构分析
1. 导入依赖库2. 加载环境变量3. 初始化ChatModel4. 创建PromptTemplate5. 定义OutputParser6. 构造处理Chain7. 调用Chain并处理流式响应🔍 关键代码解析
1. 三大核心组件初始化
# ChatModel: 对于大模型的抽象llm=ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"),openai_api_base=os.getenv("OPENAI_API_BASE"),model_name=os.getenv("AI_MODEL","deepseek-chat"),)# PromptTemplate: 负责编排提示词prompt=ChatPromptTemplate.from_messages([("system","请将下面的内容翻译成英文:"),("user","{text}"),])# OutputParser: 负责解析LLM的生成结果parser=StrOutputParser()- ChatModel:抽象了不同的大模型服务,提供统一接口
- PromptTemplate:管理提示词的结构和变量,支持模板化
- OutputParser:将模型输出转换为结构化数据,如字符串、JSON等
2. Chain构造与执行
# 构造Chain# Chain中组件的声明顺序,就是其实际的执行顺序chain=prompt|llm|parser- 使用管道操作符
|串联组件,形成数据处理流程 - 执行顺序:prompt → llm → parser
- Chain的构造方式简洁明了,便于维护和扩展
3. 流式响应处理
# 调用Chain,获取执行结果# 采用流式响应# 流式响应返回的是一个Token的Iterator,可以通过for循环遍历stream=chain.stream({"text":"床前明月光,疑似地上霜"})forchunkinstream:print(chunk,flush=True,end="")print()- 使用
stream()方法获取流式响应 - 通过迭代器逐个获取生成的Token
- 设置
flush=True和end=""实现实时输出效果
📝 扩展使用示例
# -*- coding: utf-8 -*-""" @Time : 2026/01/02 09:39 @Author : zuozewei @File : 2.LangChain的核心抽象.py @Desc : LangChain的核心抽象 - 情感分析示例 """importosimportdotenvfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_openaiimportChatOpenAI# 加载环境变量dotenv.load_dotenv()# 定义情感分析提示词prompt=ChatPromptTemplate.from_messages([("system","请分析用户输入的情感倾向,返回'积极'、'消极'或'中性'。"),("user","{text}"),])# 初始化组件llm=ChatOpenAI(model_name=os.getenv("AI_MODEL","deepseek-chat"))parser=StrOutputParser()# 构造并执行Chainchain=prompt|llm|parser result=chain.invoke({"text":"今天天气真好,心情非常愉快!"})print(f"情感分析结果:{result}")运行结果
情感分析结果: 积极💡 学习建议
- 组件组合:尝试组合不同的PromptTemplate、ChatModel和OutputParser,实现多样化功能
- 参数调优:根据任务需求调整LLM的temperature、max_tokens等参数
- 错误处理:为Chain添加异常处理机制,提高代码健壮性
- 扩展组件:学习自定义PromptTemplate和OutputParser,满足特定需求
- 性能优化:对于高频调用,考虑添加缓存机制
📚 相关资源
- LangChain官方文档
- LangChain核心组件
- DeepSeek API文档
� 总结
LangChain框架通过ChatModel、PromptTemplate和OutputParser三大核心抽象,为大模型应用开发提供了标准化的接口和灵活的组合方式。使用管道操作符|可以轻松串联这些组件,形成完整的处理链,简化了代码结构,提升了开发效率。
本文通过详细的代码示例和解析,展示了如何使用LangChain的核心组件构建实际应用,包括基本的翻译功能和情感分析功能。同时,本文还介绍了LangChain的生态系统和使用建议,帮助开发者更好地理解和应用这一框架。
最终,是否选择LangChain应基于个人或团队的具体需求评估,权衡其优势与局限性,充分利用其生态系统的价值,为大模型应用开发赋能。