鱼C论坛

 找回密码
 立即注册
查看: 17|回复: 1

[AI工作流] 17. LangChain组件——Chain的基础使用

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 糖逗 于 2026-3-7 19:41 编辑
1. Chain的作用是什么?
将组件串联,上一个组件的输出作为下一个组件的输入,实现数据的自动化流转与组件的协同工作

chain= prompt_template | model
核心前提:Runnable子类对象才能入链(以及Callable、Mapping接口子类对象也可加入(后续了解用的不多))

chain变量是RunnableSequence (RunnableSerializable子类)类型

下载 (34).png




2.代码实战
下载 (35).png

  1. from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
  2. from langchain_community.chat_models.tongyi import ChatTongyi

  3. chat_prompt_template = ChatPromptTemplate.from_messages(
  4.     [
  5.         ("system", "你是一个边塞诗人,可以作诗。"),
  6.         MessagesPlaceholder("history"),
  7.         ("human", "请再来一首唐诗"),
  8.     ]
  9. )

  10. history_data = [
  11.     ("human", "你来写一个唐诗"),
  12.     ("ai", "床前明月光,疑是地上霜,举头望明月,低头思故乡"),
  13.     ("human", "好诗再来一个"),
  14.     ("ai", "锄禾日当午,汗滴禾下锄,谁知盘中餐,粒粒皆辛苦"),
  15. ]

  16. model = ChatTongyi(model="qwen3-max")

  17. # 组成链,要求每一个组件都是Runnable接口的子类
  18. chain = chat_prompt_template | model

  19. # 通过链去调用invoke或stream
  20. # res = chain.invoke({"history": history_data})
  21. # print(res.content)

  22. # 通过stream流式输出
  23. for chunk in chain.stream({"history": history_data}):
  24.     print(chunk.content, end="", flush=True)
复制代码




学习视频:【黑马程序员大模型RAG与Agent智能体项目实战教程,基于主流的LangChain技术从大模型提示词到实战项目】[url=https://www.bilibili.com/video/B ... 2bff4ed856eadc41a71]https://www.bilibili.com/video/BV1yjz5BLEoY/?p=31&share_source=copy_web&vd_source=792a2cb63a1882bff4ed856eadc41a71[/url]

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层
鱼油的问题:LangChain组件——Chain的基础使用


1. Chain的作用是什么?

Chain 的核心作用是将不同的组件串联起来,让上一个组件的输出自动成为下一个组件的输入。这样就能形成一个“流水线”,实现数据和任务的自动化流转与多个组件的协同工作。

在代码中,典型的链式操作使用竖线符号 | 连接,例如 prompt_template | model

核心前提:
只有实现了 Runnable 接口的对象(或其子类)才能被串联成链。这确保了每个组件都有标准的调用方式。

2. 代码实战示例

以下是一个完整的示例,展示了如何将提示词模板(Prompt Template)和大语言模型(LLM)串联成一个链,并进行调用。


  1. # 导入必要的库
  2. from langchain_core.prompts import ChatPromptTemplate
  3. from langchain_community.chat_models.tongyi import ChatTongyi

  4. # 1. 定义一个聊天提示词模板
  5. # 这里我们创建一个简单的系统提示和用户输入占位符
  6. chat_prompt_template = ChatPromptTemplate.from_messages([
  7.     ("system", "你是一个乐于助人的AI助手。请用中文简洁地回答用户的问题。"),
  8.     ("human", "{user_input}")
  9. ])

  10. # 2. 定义大语言模型
  11. # 这里使用通义千问模型
  12. model = ChatTongyi(model="qwen-max")

  13. # 3. 组成链
  14. # 使用 | 操作符将提示词模板和模型连接起来,形成一个 Runnable 链
  15. chain = chat_prompt_template | model

  16. # 4. 调用链
  17. # 准备输入数据,字典的键 “user_input” 必须与提示词模板中的占位符名称一致
  18. user_question = "鱼油是什么?"
  19. input_data = {"user_input": user_question}

  20. # 方法一:使用 invoke 进行一次性调用
  21. res = chain.invoke(input_data)
  22. print(res.content)

  23. # 方法二:使用 stream 进行流式输出
  24. # print("流式输出:")
  25. # for chunk in chain.stream(input_data):
  26. #     print(chunk.content, end="", flush=True)
复制代码


代码说明:
  • 我们首先创建了一个 ChatPromptTemplate,它定义了我们发给模型的指令和对话结构。
  • 然后,实例化了一个大语言模型对象 ChatTongyi
  • 最关键的一步,使用管道运算符 | 将它们连接成链,得到一个名为 chain 的 Runnable 对象。
  • 最后,通过向链传递一个字典(其内容对应提示词模板的变量)来调用它。可以使用 .invoke() 获取完整响应,或使用 .stream() 获取流式响应。


关键要点总结:
  • Chain 的核心是连接可运行的组件。
  • 管道语法 | 非常直观,让代码逻辑清晰。
  • 调用链时,传入的数据必须与提示词模板中定义的变量名匹配。


关于视频教程,您可以在Bilibili等平台搜索“LangChain Chain 基础使用”或“大模型RAG与Agent智能体项目实战”等关键词找到相关教学资源进行深入学习。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-7 21:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表