LangChain智能体开发(保姆级教程)从零玩转核心概念,看这一篇就够了!
相信阅读完上述代码大家会有疑问:如果LangChain没有实现我想要组件的功能该怎么办呀?不用担心,LangChain早预想到了这种情况,提供了开发者自定义可运行节点的功能。同样是上面的案例,如果我们想在链中设置调试组件该如何编写代码?这就需要用到LangChain的Runnable组件了。在上述复合链代码中添加:return x将python函数转换为可运行节点。转化后的节点可以像
本期分享我们一起来学习LangChain最核心思想——搭建Chains,也就是所谓链式调用的核心方法。顾名思义,LangChain之所以被称为LangChain,其核心概念就是Chain。只要掌握了Chain的搭建方法,我们就掌握了LangChain搭建智能体的核心技巧。
本系列分享是笔者结合自己学习工作中使用LangChain&LangGraph经验倾心编写的,力求帮助大家体系化快速掌握LangChain&LangGraph AI Agent智能体开发的技能!大家感兴趣可以关注笔者掘金账号和系列专栏。更可关注笔者同名微信公众号: 大模型真好玩, 每期分享涉及的代码均可在公众号私信: LangChain智能体开发获得。
PS:鉴于后台私信越来越多,我建了一些大模型交流群,大家在日常学习生活工作中遇到的大模型知识和问题都可以在群中分享出来大家一起解决!如果大家想交流大模型知识,可以关注我并回复加群。
一、LangChain链式调用架构
链式调用位于LangChain三层核心架构中的中间层——工作流API抽象层。Chain翻译成中文就是“链”,我们将大模型、相关工具等作为组件,链就是负责将这些组件按照某一种逻辑,顺序组合成一个流水线的方式。比如我们要构建一个简单的问答链,就需要把大模型组件和标准输出组件用链串联起来。下面笔者将通过由易到难的示例向大家介绍常用的链式调用模式:

二、LangChain链搭建代码实战
2.1 尝试搭建一个简单链
第一个示例先尝试搭建一个简单链,将模型“输出结果”过滤为一个纯字符串格式:
from langchain.chat_models import init_chat_modelfrom langchain_core.output_parsers import StrOutputParser # 导入标准输出组件model = init_chat_model(model="Qwen/Qwen3-8B",model_provider="openai",base_url="https://api.siliconflow.cn/v1/",api_key="", #你注册的硅基流动api_key)# 搭建链条,把model和字符串输出解析器组件连接在一起basic_qa_chain = model | StrOutputParser()# 查看输出结果question = "你好,请你介绍一下你自己。"result = basic_qa_chain.invoke(question)print(result)

上图是以上代码执行结果,可以看到此时的result不再是包含模型各种调用信息的AIMessage对象,而是纯粹的模型响应的字符串结果。这里用到的StrOutputParser()实际上就是用于构成LangChain中一个链条的一个组件,其核心功能是用于处理模型输出结果。同时我们也发现LangChain中搭建链的方法十分简单,只需将不同组件通过|符号串联即可。
2.2 加入提示词模板创建链
接下来尝试为简单的链流程增加一个提示词模板,可以借助ChatPromptTemplate非常便捷的将一个提示词模板打造为组件,同样以链的形式加入当前流程中:
from langchain.chat_models import init_chat_modelfrom langchain.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParsermodel = init_chat_model(model="Qwen/Qwen3-8B",model_provider="openai",base_url="https://api.siliconflow.cn/v1/",api_key="", #你注册硅基流动api_key)prompt_template = ChatPromptTemplate([("system", "你是一个乐意助人的助手,请根据用户的问题给出回答"),("user", "这是用户的问题: {topic}, 请用 yes 或 no 来回答")])# 直接使用模型 + 输出解析器bool_qa_chain = prompt_template | model | StrOutputParser()# 测试question = "请问 1 + 1 是否 大于 2?"result = bool_qa_chain.invoke({'topic':question})print(result)

当我们调用指令跟随能力较强的大模型时,借助提示词模板即可实现相应的结构化输出。
2.3 结构化解析器
LangChain中一个基础的链一般由如下三部分构成,分别是提示词模板、大模型和结构化解析器。智能体开发人员通过提示词让大模型输出结构化的字符串,然后通过结构化解析器将字符串解析为指定对象。流程如下:

我们上文使用的StrOutputParser仅仅是一种最简单的结构化解析器,LangChain中常用的核心结构化解析器功能如下:

下面使用BooleanOutputParser()改变上述代码,将yes or no的输出转化为True or False:
from langchain.chat_models import init_chat_modelfrom langchain.prompts import ChatPromptTemplatefrom langchain.output_parsers import BooleanOutputParsermodel = init_chat_model(model="Qwen/Qwen3-8B",model_provider="openai",base_url="https://api.siliconflow.cn/v1/",api_key="", # 你注册的硅基流动 api key)prompt_template = ChatPromptTemplate([("system", "你是一个乐意助人的助手,请根据用户的问题给出回答"),("user", "这是用户的问题: {topic}, 请用 yes 或 no 来回答")])# 直接使用模型 + 输出解析器bool_qa_chain = prompt_template | model | BooleanOutputParser()# 测试question = "请问 1 + 1 是否 大于 2?"result = bool_qa_chain.invoke({'topic':question})print(result)

BooleanOutputParser()的用法比较简单,大家用的更多的是StructedOutputParser从文档中提取指定的类似Json这种结构化信息。
from langchain.chat_models import init_chat_modelfrom langchain_core.prompts import PromptTemplatefrom langchain.output_parsers import ResponseSchema, StructuredOutputParserschemas = [ # 构建结构化数据模板ResponseSchema(name="name", description="用户的姓名"),ResponseSchema(name="age", description="用户的年龄")]parser = StructuredOutputParser.from_response_schemas(schemas) # 根据模板生成解析器model = init_chat_model(model="Qwen/Qwen3-8B",model_provider="openai",base_url="https://api.siliconflow.cn/v1/",api_key="", # 你注册的硅基流动api_key)prompt = PromptTemplate.from_template("请根据以下内容提取用户信息,并返回 JSON 格式:\n{input}\n\n{format_instructions}") # 这是另一种使用占位符的提示词模板表示方式chain = (prompt.partial(format_instructions=parser.get_format_instructions())| model| parser)result = chain.invoke({"input": "用户叫李雷,今年25岁,是一名工程师。"}) # 输入input, format_instructions前面已经赋值print(result)
以上代码有如下几个关键点:
1. 通过PromptTemplate.from_template()构建提示词组件,提示词组件的内容可以指定任意占位符。这里我们的占位符是input和format_instructions。
2. prompt.partial(format_instructions=parser.get_format_instructions())
代码中partial()表示对部分占位符赋值,这里是对format_instructions变量赋值。parser.get_format_instructions()则是LangChain自动创建的提示词,我们打印输出一下,正因为这个提示词,LangChain链中大模型才能按我们期望的输出:

3. parser解析器可以自动将大模型输出提取成json格式,上述代码的执行结果如下:

2.4 复杂链搭建
链不但可以将不同的组件组织起来。不同的链又可以作为组件被其它的链串联起来(世界就是巨大的套娃),下面我们就来尝试创建一条复合链:第一个子链负责生成新闻内容,第二个子链负责生成新闻摘要,结构如下:

以上复合链的代码如下:
from langchain.chat_models import init_chat_modelfrom langchain_core.prompts import PromptTemplatefrom langchain.output_parsers import ResponseSchema, StructuredOutputParser# 第一步:根据标题生成新闻正文news_gen_prompt = PromptTemplate.from_template("请根据以下新闻标题撰写一段简短的新闻内容(100字以内):\n\n标题:{title}")model = init_chat_model(model="Qwen/Qwen3-8B",model_provider="openai",base_url="https://api.siliconflow.cn/v1/",api_key="", # 你注册的硅基流动api_key)# 第一个子链:生成新闻内容news_chain = news_gen_prompt | model# 第二步:从正文中提取结构化字段schemas = [ResponseSchema(name="time", description="事件发生的时间"),ResponseSchema(name="location", description="事件发生的地点"),ResponseSchema(name="event", description="发生的具体事件"),]parser = StructuredOutputParser.from_response_schemas(schemas)summary_prompt = PromptTemplate.from_template("请从下面这段新闻内容中提取关键信息,并返回结构化JSON格式:\n\n{news}\n\n{format_instructions}")# 第二个子链:生成新闻摘要summary_chain = (summary_prompt.partial(format_instructions=parser.get_format_instructions())| model| parser)# 组合成一个复合 Chainfull_chain = news_chain | summary_chain# 调用复合链result = full_chain.invoke({"title": "苹果公司在加州发布新款AI芯片"})print(result)
执行结果如下:

2.5 自定义组件
相信阅读完上述代码大家会有疑问:如果LangChain没有实现我想要组件的功能该怎么办呀?不用担心,LangChain早预想到了这种情况,提供了开发者自定义可运行节点的功能。
同样是上面的案例,如果我们想在链中设置调试组件该如何编写代码?这就需要用到LangChain的Runnable组件了。 在上述复合链代码中添加:
from langchain_core.runnables import RunnableLambdadef debug_print(x):print('中间结果(新闻正文):', x)return xdebug_node = RunnableLambda(debug_print)# 组合成一个复合 Chainfull_chain = news_chain | debug_node | summary_chain# 调用复合链result = full_chain.invoke({"title": "苹果公司在加州发布新款AI芯片"})print(result)

RunnableLambda将python函数转换为可运行节点。转化后的节点可以像任何其它Runnable一样组合并与LangChain链无缝集成。(特别注意: RunnableLambda适合非流式输出,如果要流式输出请使用RunnableGenerator https://python.langchain.com/api_reference/core/runnables/langchain_core.runnables.base.RunnableGenerator.html)。
看到这里,大家基本了解了LangChain链的核心原理,我们离使用LangChain快速开发出一个智能问答机器人项目也不远了~
三、LCEL简述
在上述代码中|符号被我们广泛使用,大家可能会想问:“Python语言里面这个符号的用法好像也不是链呀,在这里为什么可以把各个组件串起来呢?”
其实这是LangChain专门为现代大语言模型应用开发的一种全新表达范式,被称为LCEL(LangChain Expression Language) 。它不仅简化了模型交互的编排过程,还增强了组合的灵活性和可维护性。
3.1 LCEL的定义
LCEL,全称为LangChain Expression Language,是一种专为 LangChain 框架设计的表达语言。它通过一种链式组合的方式,允许开发者使用清晰、声明式的语法来构建语言模型驱动的应用流程。 简单来说,LCEL 是一种“函数式管道风格”的组件组合机制,用于连接各种可执行单元(Runnable)。这些单元包括提示模板、语言模型、输出解析器、工具函数等。
3.2 LCEL的设计目的
LCEL 的设计初衷在于:
- 模块化构建
将模型调用流程拆解为独立、可重用的组件。
- 逻辑可视化
通过语法符号(如管道符
|)呈现出明确的数据流路径。 - 统一运行接口
所有 LCEL 组件都实现了
.invoke()、.stream()、.batch()等标准方法,便于在同步、异步或批处理环境下调用。 - 脱离框架限制
相比传统的
Chain类和Agent架构,LCEL 更轻量、更具表达力,减少依赖的“黑盒”逻辑。
3.3 LCEL的核心组成
LCEL的核心组成有如下三点:
-
Runnable 接口
LCEL 的一切基础单元都是
Runnable对象,它是一种统一的可调用接口,支持如下形式:.invoke(input)同步调用
.stream(input)流式生成
.batch(inputs)批量执行
-
管道运算符
|这是 LCEL 最具特色的语法符号。多个
Runnable对象(也就是我们说的组件)可以通过|串联起来,形成清晰的数据处理链。例如:prompt | model | parser表示数据将依次传入提示模板、模型和输出解析器,最终输出结构化结果。
-
PromptTemplate 与 OutputParser
LCEL 强调组件之间的职责明确,Prompt 只负责模板化输入,Parser 只负责格式化输出,Model 只负责推理。
以上就是我们今天分享的全部内容~
四、总结
本期分享我们讲解了LangChain的核心概念——“链”,由易到难搭建了LangChain简单链、复合链和自定义节点链,同时了解了LangChain提示词模板和结构化解析器的基本用法。在实战代码案例中让大家感受到了LangChain LCEL语法设计的简洁性和实用性,大家学完本期内容初步具备了搭建简易LangChain智能体的能力,下一期分享我们将手把手带大家完成一个全栈项目——LangChain搭建多轮对话网站,大家一起期待一下吧!
如何学习AI大模型 ?
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈
(👆👆👆安全链接,放心点击)
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战项目来学习。(全套教程文末领取哈)
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)
只要你是真心想学AI大模型,我这份资料就可以无偿分享给你学习,我国在这方面的相关人才比较紧缺,大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
(👆👆👆安全链接,放心点击)
更多推荐


所有评论(0)