17. LangChain组件——Chain的基础使用
本帖最后由 糖逗 于 2026-3-7 19:41 编辑1. Chain的作用是什么?
将组件串联,上一个组件的输出作为下一个组件的输入,实现数据的自动化流转与组件的协同工作
chain= prompt_template | model
核心前提:Runnable子类对象才能入链(以及Callable、Mapping接口子类对象也可加入(后续了解用的不多))
chain变量是RunnableSequence (RunnableSerializable子类)类型
2.代码实战
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.chat_models.tongyi import ChatTongyi
chat_prompt_template = ChatPromptTemplate.from_messages(
[
("system", "你是一个边塞诗人,可以作诗。"),
MessagesPlaceholder("history"),
("human", "请再来一首唐诗"),
]
)
history_data = [
("human", "你来写一个唐诗"),
("ai", "床前明月光,疑是地上霜,举头望明月,低头思故乡"),
("human", "好诗再来一个"),
("ai", "锄禾日当午,汗滴禾下锄,谁知盘中餐,粒粒皆辛苦"),
]
model = ChatTongyi(model="qwen3-max")
# 组成链,要求每一个组件都是Runnable接口的子类
chain = chat_prompt_template | model
# 通过链去调用invoke或stream
# res = chain.invoke({"history": history_data})
# print(res.content)
# 通过stream流式输出
for chunk in chain.stream({"history": history_data}):
print(chunk.content, end="", flush=True)
学习视频:【黑马程序员大模型RAG与Agent智能体项目实战教程,基于主流的LangChain技术从大模型提示词到实战项目】https://www.bilibili.com/video/B ... 2bff4ed856eadc41a71]https://www.bilibili.com/video/BV1yjz5BLEoY/?p=31&share_source=copy_web&vd_source=792a2cb63a1882bff4ed856eadc41a71
鱼油的问题:LangChain组件——Chain的基础使用
1. Chain的作用是什么?
Chain 的核心作用是将不同的组件串联起来,让上一个组件的输出自动成为下一个组件的输入。这样就能形成一个“流水线”,实现数据和任务的自动化流转与多个组件的协同工作。
在代码中,典型的链式操作使用竖线符号 | 连接,例如 prompt_template | model。
核心前提:
只有实现了 Runnable 接口的对象(或其子类)才能被串联成链。这确保了每个组件都有标准的调用方式。
2. 代码实战示例
以下是一个完整的示例,展示了如何将提示词模板(Prompt Template)和大语言模型(LLM)串联成一个链,并进行调用。
# 导入必要的库
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models.tongyi import ChatTongyi
# 1. 定义一个聊天提示词模板
# 这里我们创建一个简单的系统提示和用户输入占位符
chat_prompt_template = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的AI助手。请用中文简洁地回答用户的问题。"),
("human", "{user_input}")
])
# 2. 定义大语言模型
# 这里使用通义千问模型
model = ChatTongyi(model="qwen-max")
# 3. 组成链
# 使用 | 操作符将提示词模板和模型连接起来,形成一个 Runnable 链
chain = chat_prompt_template | model
# 4. 调用链
# 准备输入数据,字典的键 “user_input” 必须与提示词模板中的占位符名称一致
user_question = "鱼油是什么?"
input_data = {"user_input": user_question}
# 方法一:使用 invoke 进行一次性调用
res = chain.invoke(input_data)
print(res.content)
# 方法二:使用 stream 进行流式输出
# print("流式输出:")
# for chunk in chain.stream(input_data):
# print(chunk.content, end="", flush=True)
代码说明:
[*]我们首先创建了一个 ChatPromptTemplate,它定义了我们发给模型的指令和对话结构。
[*]然后,实例化了一个大语言模型对象 ChatTongyi。
[*]最关键的一步,使用管道运算符 | 将它们连接成链,得到一个名为 chain 的 Runnable 对象。
[*]最后,通过向链传递一个字典(其内容对应提示词模板的变量)来调用它。可以使用 .invoke() 获取完整响应,或使用 .stream() 获取流式响应。
关键要点总结:
[*]Chain 的核心是连接可运行的组件。
[*]管道语法 | 非常直观,让代码逻辑清晰。
[*]调用链时,传入的数据必须与提示词模板中定义的变量名匹配。
关于视频教程,您可以在Bilibili等平台搜索“LangChain Chain 基础使用”或“大模型RAG与Agent智能体项目实战”等关键词找到相关教学资源进行深入学习。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]