【LangChain 核心组件梳理:从模块到流程】
【LangChain】本文主要是我在学习 LangChain 过程中的一些理解总结,偏入门和认知梳理。
上一篇: LangChain入门理解:为什么需要它?)
本文主要整理 LangChain 的核心组件,用于理解其是如何构建 AI 应用的
一、从整体看 LangChain
上一篇笔记核心认知:LangChain 是一个用于构建 LLM 驱动型 AI 应用的开源框架。
1.核心疑问:LangChain 如何实现“构建 AI 应用”?
从极简流程来看,LangChain 本质是实现“输入 → 处理 → 输出”的闭环,但实际开发中会拆分为多个核心组件,形成完整工作流:
用户输入
↓
Prompt(构造规范输入)
↓
LLM(核心生成内容)
↓
Chain(链接多步流程)
↓
Memory(保存上下文记忆)
↓
OutputParser(解析输出格式)
2.核心思想:将复杂 AI 任务拆分为独立模块(组件),通过标准化接口组合执行,降低开发复杂度
二、核心组件详解
(一)LLM(大语言模型)—— 核心生成器
1.基本作用:
LLM 是整个 LangChain 体系的“核心引擎”,负责接收输入、生成符合语境的内容,是所有 AI 应用的基础。
极简逻辑:
输入 → 输出(接收 Prompt,生成文本结果)
我们来看一段代码:
from langchain_openai import ChatOpenAI
# 初始化 LLM 实例(以 OpenAI 模型为例)
model = ChatOpenAI()
# 调用模型
res = model.invoke("解释什么是递归,用通俗的语言说明")
# 输出文本
print(res.content)
2.可将 LLM 理解为:
一个“会说话的函数” —— 输入是 Prompt,输出是模型生成的文本,无需关注内部逻辑,只需调用即可
(二)Prompt(提示词)—— 输入控制器
1.核心意义:
LLM 的输出质量,直接由 Prompt 决定。同一个问题,模糊的 Prompt 会导致输出杂乱,明确的 Prompt 能让模型精准响应、提高效率。
举个例子:我们要AI帮我们写一段python代码
模糊的 Prompt(输出不可控):
帮我写一段代码
明确的 Prompt(输出精准):
你是一名Python 高级工程师,写一个快速排序算法,附带详细注释,同时说明时间复杂度和空间复杂度。
2.常用的工具:PromptTemplate
用于生成标准化 Prompt,支持参数化输入,避免重复编写相同格式的提示词
from langchain_core.prompts import PromptTemplate
# 1. 定义模板(这里主要以文本模板为主)
prompt_template = PromptTemplate.from_template(
"Translate the following into{language}")
# 2. 实例化模板
print(prompt_template.invoke({"language": "Chinese"}))
打印结果:
text='Translate the following intoChinese'
总结:
Prompt 决定输出质量 —— 编写 Prompt 时,需明确角色、任务要求、输出格式,避免模糊表述
(三)Runnable(核心接口)—— 组件连接器
- 核心定义:
在 LangChain 中,几乎所有组件(LLM、Prompt、Parser 等)都继承了 Runnable 接口,是组件之间能够组合的核心基础
- 核心功能(3种常用操作)
- invoke:单次调用(最常用),输入一个参数,返回一个结果
- batch:批量调用,同时输入多个参数,批量返回结果,提升效率
- stream:流式输出,逐步返回结果(类似 ChatGPT 的打字效果)
- 核心作用
Runnable 的核心作用:统一所有组件的调用方式,让不同组件可以无缝组合(无需关注每个组件的调用差异)。
(四)Chain(流程控制器)—— 多步执行者
- 核心意义:
现实中的 AI 任务往往是多步骤的(并非“输入 → 输出”一步完成),Chain 负责将多个组件(或步骤)串联起来,按顺序执行。
举个例子:最简单的链结构(链接LLM 和 Parser)
# 已初始化 model(LLM 实例)和 parser(OutputParser 实例)
# 用 | 符号串联组件(最常用),形成流程链
chain = model | parser
# 调用整个流程
result = chain.invoke("你好,讲一个简短的冷笑话")
- 本质与理解
Chain 的本质:
把多个步骤串起来执行,类似编程中的“函数调用链”:
函数1(Prompt构造) → 函数2(LLM生成) → 函数3(Parser解析)
(五)Memory(记忆组件)—— 上下文保存器
- 核心问题
LLM 默认是“无状态”的 —— 每次调用都是独立的,无法记住上一轮的对话内容(比如聊天时,无法记住你之前说过的话),非常影响我们使用
- 核心作用
-
保存对话历史(或上下文信息)
-
将历史信息传入下一次 LLM 调用,让模型“记住”之前的内容
- 典型使用场景
聊天机器人、AI 助手(需要持续对话,上下文连贯)。
Memory 的核心价值:
让 AI“记住之前说过什么”,解决 LLM 无状态的问题,实现连贯对话。
(六)OutputParser(输出解析器)—— 结果格式化工具
- 核心问题
LLM 的输出是“非结构化文本”(纯字符串),无法直接被程序使用(比如需要 JSON 格式、列表格式等)。
我们举个例子:我们可以让AI讲个冷笑话:
# 定义模型(这里以千问为例)
model = ChatTongyi(model="qwen-turbo")
#方式一:直接输出
res = model.invoke("你好,讲一个简短的冷笑话")
print(res)
#方式二:定义输出解析器直接输出
parser = StrOutputParser()
chain = model | parser
# 作用:将 LLM 的输出(非结构化文本)解析为标准字符串
print(chain.invoke("你好,讲一个简短的冷笑话"))
输出结果:
content='为什么冰箱会感冒? \n因为它打开了门!' additional_kwargs={} response_metadata={'model_name': 'qwen-turbo', 'finish_reason': 'stop', 'request_id': 'fdc528f4-d61c-9e59-85db-ae06c2d146bb', 'token_usage': {'input_tokens': 21, 'output_tokens': 10, 'prompt_tokens_details': {'cached_tokens': 0}, 'total_tokens': 31}} id='lc_run--019d965a-303e-75e2-930b-abab2b03c089-0' tool_calls=[] invalid_tool_calls=[]
为什么数学书总是很忧郁?
因为它有太多的问题。 😂
- 核心使用
通过 Chain 链接 LLM 和 Parser,直接获取格式化后的结果:
chain = model| parser
result = chain.invoke("什么是 LangChain")
OutputParser 的核心作用:把 LLM 的非结构化输出,转化为程序可直接使用的数据格式(字符串、JSON、列表等)
三、组件间的关系
我们可以将上述核心组件链接起来,可实现一个最简单的 LangChain 流程,逻辑流程为:
用户输入(讲编程笑话) → LLM(生成笑话) → Parser输出解析(格式化字符串) → 最终结果
转换为代码:
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
# 1. 初始化核心组件
# 定义模型(LLM 核心)
model= ChatOpenAI()
# 输出解析器
parser = StrOutputParser()
# 2. 用 Chain 链接组件(LLM → 解析器)
chain = model| parser
# 3. 调用流程,获取结果
result = chain.invoke("什么是langchain")
print(result )
四、小结
通过这一篇,我们已经梳理清楚了:
LangChain 是如何将多个组件组合起来,构建完整的 AI 应用流程
它的核心能力在于:
- 拆分任务
- 组织流程
- 串联组件
让原本只能“单次对话”的大模型,具备了构建实际应用的能力。
不过,到这里还有一个关键问题没有解决:
模型虽然可以完成流程,但它的“知识来源”仍然是有限但目前仍存在一个关键局限:
模型的回答高度依赖自身预训练知识,信息来源存在明显边界。
典型问题包括:
- 无法访问本地文档
- 无法获取企业私有数据
- 无法使用最新的信息
由此引出一个核心问题:
如何让模型调用外部知识,回答它原本 “不知道” 的问题?
这正是下一节我们要重点解决的关键技术:
RAG 检索增强生成
更多推荐


所有评论(0)