当前位置: 首页 > ops >正文

LangChain :Chain

好的,我们来深入浅出地讲解 LangChain 中的核心概念之一:​​Chains(链)​​。

核心概念:什么是 Chain?

在 LangChain 中,​​Chain(链)​​ 是一个核心抽象,它允许我们将多个组件(如模型、提示模板、其他链、工具等)​​按预定的顺序或逻辑连接起来​​,以完成一个更复杂的任务。

你可以把它想象成一个​​工作流水线​​或​​函数调用链​​。单一的大型语言模型(LLM)调用可以比作一个单独的工具,而 Chain 则是将多个工具和步骤组装起来,完成一个端到端的复杂任务。


为什么需要 Chains?

单一的语言模型调用通常只能完成一步任务。但在现实世界中,大部分应用都需要多步推理和协作。例如:

  1. ​总结一篇长文​​:可能需要先“拆分”文章,再“总结”各部分,最后“合并”总结。
  2. ​基于网络搜索回答问题​​:需要先“搜索”问题,再“提炼”搜索结果,最后“组织”语言生成答案。
  3. ​与数据库交互​​:需要先“理解”用户问题,再“转换”为 SQL 查询,接着“执行”查询,最后将结果“解释”给用户。

​Chain​​ 就是为了优雅地解决这类多步问题而设计的。它提供了标准化、可复用、可组合的方式来构建这类应用。


Chains 的主要类型和工作模式

LangChain 提供了多种类型的 Chain,下图清晰地展示了最常见的工作模式:

flowchart TDA[用户输入] --> B[PromptTemplate<br>提示模板]B -- 填充变量 --> C[LLM<br>大语言模型]C -- 生成文本 --> D[OutputParser<br>输出解析器]D -- 结构化数据 --> E[最终结果]F[简单顺序链] --> G[组件序列化执行]H[转换链] --> I[处理列表数据<br>如文档摘要]J[路由链] --> K[根据输入选择不同处理分支]L[自定义链] --> M[自由组合组件<br>实现复杂逻辑]

其中最基础、最常用的是 ​​LLMChain​​,它构成了绝大多数复杂链的基础。其工作流程如下:

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_community.llms import OpenAI  # 或 from langchain_openai import ChatOpenAI# 1. 创建模板
prompt = PromptTemplate(input_variables=["product"],template="为一家生产{product}的公司起一个好听的名字,并给出一个 slogan。",
)# 2. 创建模型
llm = OpenAI(temperature=0.7) # 或者 ChatOpenAI(model="gpt-3.5-turbo")# 3. 创建链
chain = LLMChain(llm=llm, prompt=prompt)# 4. 运行链
result = chain.run("环保可降解的咖啡杯")
print(result)
# 输出可能: 
# 公司名: 绿源杯业
# Slogan: 品味咖啡,守护地球每一杯。

调用deepseek

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_community.llms import OpenAI  # 或 from langchain_openai import ChatOpenAI
from langchain_openai import ChatOpenAI# 1. 创建模板
prompt = PromptTemplate(input_variables=["product"],template="为一家生产{product}的公司起一个好听的名字,并给出一个 slogan。",
)# 2. 创建模型
#llm = OpenAI(temperature=0.7) # 或者 ChatOpenAI(model="gpt-3.5-turbo")
llm = ChatOpenAI(model="deepseek-chat",api_key="sk-api key",base_url="https://api.deepseek.com/v1",  # DeepSeek API 地址temperature=0.7)
# 3. 创建链
chain = LLMChain(llm=llm, prompt=prompt)# 4. 运行链
result = chain.run("环保可降解的咖啡杯")
print(result)
# 输出可能:
# 公司名: 绿源杯业
# Slogan: 品味咖啡,守护地球每一杯。


其他有用的 Chain 类型

除了 LLMChain,LangChain 还提供了许多开箱即用的高级链,专门为常见任务设计:

链类型说明典型应用
​Sequential Chain​按顺序执行多个链,将一个链的输出作为下一个链的输入。需要多步处理的任务,如翻译后再总结。
​Transformation Chain​处理文档列表,对每个文档进行转换(如总结),然后再组合。长文档摘要(先分块总结,再合并)。
​Router Chain​根据输入内容,决定将其发送到哪个子链(专业模型)处理。构建专家系统,如技术问题路由到编码模型,文学问题路由到创意模型。
​Custom Chain​自己组合各种组件和逻辑,实现高度定制化的流程。任何复杂、独特的业务逻辑。
示例:SequentialChain(顺序链)
from langchain.chains import SimpleSequentialChain# 假设我们已经定义了两个链
# chain_1: 负责生成公司名称
# chain_2: 负责根据公司名称写一段简短的介绍overall_chain = SimpleSequentialChain(chains=[chain_1, chain_2], verbose=True)# 运行总链
final_result = overall_chain.run("环保可降解的咖啡杯")
print(final_result)
# 输出: 
# 绿源杯业是一家致力于... (这里包含了chain_1的输出和chain_2的输出)

如何选择和使用 Chains?

  1. ​从 LLMChain 开始​​:绝大多数任务都是从定义一个好的提示模板和调用 LLM 开始的。这是最基本的构建块。
  2. ​使用内置工具链​​:在构建常见应用(如带来源的问答Q&A、摘要、API交互)时,先查看LangChain是否提供了对应的内置链(如create_retrieval_chain, create_summarization_chain),这可以节省大量时间。
  3. ​组合而非重写​​:LangChain 的设计哲学是组合。尽量将复杂任务拆解成多个小链,然后用 SequentialChain 或自定义链将它们组装起来。
  4. ​自定义复杂逻辑​​:当内置链无法满足需求时,可以继承 Chain 基类来创建完全自定义的链,完全控制 _call 方法的执行逻辑。

总结

​Chain(链)​​ 是 LangChain 框架的支柱之一,它解决了​​复杂AI应用的编排问题​​。

  • ​核心价值​​:通过将多个模块化组件(LLM调用、提示、工具等)连接起来,完成单个LLM调用无法处理的复杂、多步任务。
  • ​关键思想​​:​​可组合性(Composability)​​。像搭积木一样构建应用程序。
  • ​使用场景​​:几乎所有稍复杂的LangChain应用都会用到链,从简单的提示模板化到复杂的多步推理和操作。

简单来说,如果你需要让LLM完成一个需要多个步骤的任务,​​Chain​​ 就是你需要的工具。它让你的代码更加结构化、清晰且易于维护。

http://www.xdnf.cn/news/20103.html

相关文章:

  • WIN11控制面板中丢失BitLocker,找回WIN10控制面板中的BitLocker驱动器加密设置
  • 今日行情明日机会——20250905
  • 雨后阳光为何更强烈?
  • Spring整合MQTT使用
  • ai连接怡和达进行非标选型 抓包失败
  • 阿瓦隆 A1566HA 2U 480T矿机参数解析:性能与能效深入分析
  • 问题三ai思路
  • 项目经理为什么要有一张PMP®认证?
  • 力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
  • 代码可读性的详细入门
  • 1.10 虚拟内存管理机制
  • 【面板数据】全球数字贸易规则一体化程度数据及参考文献(2000-2024年)
  • 11.1.7 cpp客户端上传测试和文件引用计数测试
  • 【数据结构——哈夫曼树】
  • 理解UE4中C++17的...符号及enable_if_t的用法及SFINAE思想
  • Redis到底什么,该怎么用
  • JavaWeb —— 登录校验
  • AOI 检测准、机床运行稳?杰和 AR707 撑起工控 “精准 + 高效”
  • biocmanager安装 库 老是提示网络连接错误 才尝试各种办法
  • 「数据获取」《中国劳动统计年鉴》(1991-2024)
  • linux inotify 功能详解
  • MySQL锁篇-锁类型
  • 解析豆科系统发育冲突原因
  • 无字母数字命令执行
  • UC Berkeley 开源大世界模型(LWM):多模态大模型领域世界模型技术新进展
  • 鹿客发布旗舰新品AI智能锁V6 Max,打造AI家庭安全领域新标杆
  • keil 5 STM32工程介绍
  • 写给大学生的
  • 【开题答辩全过程】以 在线教育系统为例,包含答辩的问题和答案
  • 从安装到应用:GISBox与GeoServer的关键区别及用户适配指南