LangChain核心解析:掌握AI开发的“链“式思维

news2025/5/10 9:53:17

0. 思维导图

在这里插入图片描述

1. 引言 🌟

在人工智能快速发展的今天,如何有效地利用大语言模型(LLM)构建强大的应用成为众多开发者关注的焦点。前面的课程中,我们学习了正则表达式以及向量数据库的相关知识,了解了如何处理文档并将其附加给大模型。本章我们将深入探讨LangChain中的核心概念——“Chain”(链)。

LangChain作为一个强大的框架,让我们能够将LLM与其他计算资源或知识源结合起来,创建更加智能的应用。而Chain则是这个框架的重要组成部分,它就像是将各种功能模块串联起来的纽带,使得复杂的AI工作流成为可能。

2. 什么是Chain(链)💡

2.1 链的基本概念

在LangChain中,Chain(链)是一个核心概念,它代表一系列组件的连接,这些组件按照特定的顺序执行,以完成复杂的任务。简单来说,Chain就是将多个步骤组合成一个可调用的单元,让信息能够从一个组件流向另一个组件。

链的基本工作流程是:接收输入 → 处理数据 → 产生输出。而这个处理过程可能涉及到与LLM的交互、文档的检索、信息的提取等多个步骤。

2.2 链的重要性

链的设计理念使得我们可以:

  • 🔄 模块化地组合不同功能
  • 📦 封装复杂的逻辑流程
  • 🛠️ 重用常见的处理模式
  • 🧩 灵活地扩展应用功能

正是这种灵活性和模块化的特性,使得LangChain能够适应各种各样的AI应用场景,从简单的问答系统到复杂的智能助手。

3. 四种基本的内置链 🔗

LangChain提供了多种内置的链类型,其中最基础的四种分别是LLM链、顺序链、路由链和检索链。这些内置链为我们提供了处理不同任务的基本工具。

3.1 LLM Chain

LLM Chain(LLM链)是最基础也是最常用的链类型,它将提示模板(PromptTemplate)和语言模型(LLM)结合在一起,形成一个简单但强大的处理单元。

工作原理

  1. 接收用户输入
  2. 根据提示模板格式化输入
  3. 将格式化后的提示发送给LLM
  4. 返回LLM的响应

代码示例

from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

# 创建提示模板
template = "请告诉我{topic}的三个重要知识点"
prompt = PromptTemplate(input_variables=["topic"], template=template)

# 初始化LLM
llm = OpenAI(temperature=0.7)

# 创建LLM链
chain = LLMChain(llm=llm, prompt=prompt)

# 使用链
response = chain.run("人工智能")
print(response)

3.2 Sequential Chain(顺序链)

顺序链允许我们将多个链按照特定顺序连接起来,前一个链的输出可以作为后一个链的输入,从而实现更复杂的处理流程。

顺序链主要有两种类型:

  1. SimpleSequentialChain:每个链只有一个输入和一个输出,链之间一对一串联
  2. SequentialChain:支持多输入多输出,更加灵活

代码示例(SimpleSequentialChain)

from langchain.chains import SimpleSequentialChain
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.7)

# 第一个链:生成一个故事概要
first_prompt = PromptTemplate(
    input_variables=["subject"],
    template="请为{subject}写一个简短的故事概要"
)
chain_one = LLMChain(llm=llm, prompt=first_prompt)

# 第二个链:基于故事概要写一个完整故事
second_prompt = PromptTemplate(
    input_variables=["概要"],
    template="基于以下概要,写一个完整的故事:\n\n{概要}"
)
chain_two = LLMChain(llm=llm, prompt=second_prompt)

# 创建顺序链
overall_chain = SimpleSequentialChain(chains=[chain_one, chain_two])

# 运行链
response = overall_chain.run("一只迷路的猫")
print(response)

代码示例(SequentialChain)

from langchain.chains import SequentialChain
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.7)

# 第一个链:为电影生成标题
first_prompt = PromptTemplate(
    input_variables=["genre"],
    template="为{genre}类型的电影想一个标题"
)
title_chain = LLMChain(llm=llm, prompt=first_prompt, output_key="title")

# 第二个链:为电影生成简介
second_prompt = PromptTemplate(
    input_variables=["title"],
    template="为电影《{title}》写一个简短的简介"
)
synopsis_chain = LLMChain(llm=llm, prompt=second_prompt, output_key="synopsis")

# 创建顺序链
overall_chain = SequentialChain(
    chains=[title_chain, synopsis_chain],
    input_variables=["genre"],
    output_variables=["title", "synopsis"]
)

# 运行链
response = overall_chain.run("科幻")
print(f"标题: {
     response['title']}\n简介: {
     response['synopsis']}")

3.3 Router Chain(路由链)

路由链是一种能够根据输入动态决定调用哪个子链的高级链。它根据输入的内容或特征,选择最适合处理该输入的链,类似于一个智能分发器。

Router Chain由三个主要部分组成:

  1. 路由器(决定使用哪个链)
  2. 目标链(可选择的链集合)
  3. 默认链(当无法确定路由时使用)

代码示例

from langchain.chains.router import MultiPromptChain
from langchain.chains.router.llm_router import LLMRouterChain
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.7)

# 定义各专业领域的提示模板
physics_template = PromptTemplate(
    template="你是一位物理学专家。回答以下物理学问题:{question}",
    input_variables=["question"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思维链编程模式下可视化医疗编程具体模块和流程架构分析(全架构与代码版)

引言 随着人工智能在医疗领域的广泛应用,医疗AI思维链可视化编程工具应运而生,旨在为非技术背景的医疗从业者提供便捷的AI模型开发平台。这个工具通过直观的可视化界面,简化了AI模型的构建过程,帮助用户高效完成数据处理、模型训…

AI与玩具结合的可行性分析

文章目录 一、市场需求:教育与陪伴的双重驱动(一)教育需求(二)情感陪伴需求(三)消费升级 二、技术发展:赋能玩具智能化(一)AI技术的成熟(二&#…

软考又将迎来新的改革?

3月26日,工信部所属事业单位发布了一则招聘公告,其中,工信教考中心面相符合条件的博士招聘1名“考务处技术研究岗”的人员,具体岗位内容: 其岗位简介中,有一条“研究、制定考试技术改革方案,并组…

怎么让一台云IPPBX实现多家酒店相同分机号码一起使用

下面用到的IPPBX是我们二次开发后的成品,支持各种云服务器一键安装,已经写好了一键安装包,自动识别系统环境,安装教程这里就不再陈述了! 前言需求 今天又遇到了一个客户咨询,关于部署一台云IPPBX&#xf…

蓝桥杯2024JavaB组的一道真题的解析

文章目录 1.问题描述2.问题描述3.思路分析4.代码分析 1.问题描述 这个是我很久之前写的一个题目,当时研究了这个题目好久,发布了一篇题解,后来很多人点赞,我都没有意识到这个问题的严重性,我甚至都在怀疑自己&#xf…

计算机视觉算法实战——基于YOLOv8的行人流量统计系统

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 引言:智能客流分析的市场需求 在零售、交通、安防等领域,准确的行人流量统计对于商业决策、公共安全管理…

机器学习ML极简指南

机器学习是现代AI的核心,从推荐系统到自动驾驶,无处不在。但每个智能应用背后,都离不开那些奠基性的模型。本文用最简练的方式拆解核心机器学习模型,助你面试时对答如流,稳如老G。 线性回归 线性回归试图通过"最…

flux绘画模型介绍

一、Flux绘画模型的核心定义与背景 Flux绘画模型是由Black Forest Labs开发的先进AI图像生成模型,其核心团队源自Stable Diffusion的创始成员(如Robin Rombach),结合了Stability AI的技术积累与创新突破。该模型于2024年8月首次发…

LLM驱动的智能体:基于GPT的对话智能体开发指南

前言 大语言模型(LLM, Large Language Model)正在彻底改变智能体(Agent)的设计和实现方式。从简单的聊天机器人到复杂的自动化助手,基于GPT等LLM的对话智能体已经在客服、教育、办公自动化、编程助手等领域得到了广泛…

项目之Boost搜索引擎

目录 搜索引擎项目背景 搜索引擎的宏观原理 搜索引擎技术栈和项目环境 搜索引擎具体原理(正排索引和倒排索引) 正排索引 倒排索引 编写数据去标签与数据清洗的模块 Parser 从boost官网导入HTML网页数据 去标签 构建 Parser 模块 递归式获取 HTML 文件的带文件名称…

MyBatis 动态SQL 详解!

目录 一、 什么是动态 SQL?二、 为什么需要动态 SQL?三、 MyBatis 动态 SQL 标签四、 标签详解及示例1、 if 标签2、 choose、when、otherwise 标签3、 where 标签4、 set 标签5、 foreach 标签6、 sql、include 标签 五、 总结 🌟我的其他文…

【Linux学习笔记】开发工具git和gbd和cgbd的介绍和使用

【Linux学习笔记】开发工具git和gbd和cgbd的介绍和使用 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】开发工具git和gbd和cgbd的介绍和使用前言一. 版本控制器Git1.1版本控制器1.2 git 简史1.3 安…

php的高速缓存

部署方法 在我们安装的nginx中默认不支持memc和srcache功能,需要借助第三方模块来让nginx支持此功能。 tar zxf srcache-nginx-module-0.33.tar.gz tar zxf memc-nginx-module-0.20.tar.gz 下载这俩个模块,然后编译安装的时候加进去 编译安装完成之后…

Real-Time Anomaly Detection of Network Traffic Basedon CNN

1知识点补充 边缘计算模型 成为一种新的分布式数据处理方式,通过靠近数据侧,及时响应用户的计算请求,降低数据传输的网络延迟。 边缘节点是边缘计算架构中最基础的物理或逻辑单元,指位于网络边缘(靠近数据源或用户&a…

RHCSA LINUX系统文件管理

一.7种文件类型 注意:Linux系统文件名的后缀只是为了方便用户识别文件类型 Linux系统设计哲学:一切皆文件 1.使用 “ls -l” 命令查看到的第一个字符,对应不同文件类型及说明如下: ①“-”:普通文件,类…

AQUA爱克泳池设备入驻济南校园,以品质筑牢游泳教育安全防线

在推进校园体育教育高质量发展的时代背景下,游泳作为一项兼具运动价值与生存技能的重要课程,正被越来越多的学校纳入教学体系。泳池作为开展游泳教学与运动的关键设施,其配套泳池设备的先进性与安全性愈发受到重视。作为泳池水处理设备行业的…

基于CNN实现电力负荷多变量时序预测(PyTorch版)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…

网络空间安全(50)JavaScript基础语法

一、变量声明 ①var: 早期的变量声明方式,函数作用域。 ②let: 块级作用域,推荐在现代 JavaScript 中使用。 ③const: 块级作用域,用于声明常量,值不可变。 var name "Alice"; let age 30; const PI 3.14159; 二、数…

深入理解二叉树、B树与B+树:原理、应用与实现

文章目录 引言一、二叉树:基础而强大的结构基本概念特性分析Java实现应用场景 二、B树:适合外存的多路平衡树基本概念关键特性查询流程示例Java简化实现典型应用 三、B树:数据库索引的首选核心改进优势分析范围查询示例Java简化实现实际应用 …

mysql对表,数据,索引的操作sql

对表的操作 新建表 创建一个名为rwh_test的表,id为主键自增 -- 新建表 CREATE TABLE rwh_test(id int NOT NULL auto_increment PRIMARY KEY COMMENT 主键id,username VARCHAR(20) DEFAULT NULL COMMENT 用户名,age int DEFAULT NULL COMMENT 年龄,create_date d…