糖逗 发表于 前天 19:23

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

FishC 发表于 前天 19:23

鱼油的问题: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]
查看完整版本: 17. LangChain组件——Chain的基础使用