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

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

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 PromptTemplatellm = 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 PromptTemplatellm = 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 PromptTemplatellm = OpenAI(temperature=0.7)# 定义各专业领域的提示模板
physics_template = PromptTemplate(template="你是一位物理学专家。回答以下物理学问题:{question}",input_variables=["question"]

相关文章:

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

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

[CISSP] [6] 密码学和对称密钥算法

密码学的目标 1. 机密性(Confidentiality) 目标:保护信息不被未授权访问。 通过 加密(Encryption)技术确保数据只能被授权方解密和读取。主要方法: 对称加密(AES、3DES)&#xff…...

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

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

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

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

软考又将迎来新的改革?

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

Python入门(8):文件

1. 文件基本概念 文件:存储在计算机上的数据集合,Python 通过文件对象来操作文件。 文件类型: 文本文件:由字符组成,如 .txt, .py 二进制文件:由字节组成,如 .jpg, .mp3 2. 文件打开与关闭…...

HTML5 Video(视频)学习笔记

一、HTML5 视频简介 HTML5 引入了 <video> 元素&#xff0c;用于在网页上嵌入视频内容。这种方式取代了传统的 Flash 插件&#xff0c;使得视频的展示更加标准化和便捷。HTML5 的 <video> 元素为开发者提供了一种简单且兼容性强的方法来嵌入视频&#xff0c;同时也…...

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

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

Java模板方法模式详解

模板方法模式详解 一、模式定义 模板方法模式(Template Method Pattern)定义一个操作中的算法骨架&#xff0c;将某些步骤延迟到子类实现。 二、核心结构 1. 抽象模板类 public abstract class AbstractTemplate {// 模板方法&#xff08;final防止子类覆盖&#xff09;pu…...

Vite 内联 CSS 和 JS 的解决方案

使用 vite-plugin-singlefile&#xff08;推荐&#xff09; 这个插件专门用于将整个 Vite 应用打包成单个 HTML 文件&#xff0c;内联所有 JS 和 CSS。 安装 pnpm i vite-plugin-singlefile -D配置 vite.config.js import { defineConfig } from vite import { viteSingleF…...

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

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

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

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

在PyTorch中使用GPU加速:从基础操作到模型部署

本文将通过具体代码示例&#xff0c;详细介绍如何在PyTorch中利用GPU进行张量计算和模型训练&#xff0c;包含设备查询、数据迁移以及模型部署等完整流程。 1. 查看GPU硬件信息 使用 nvidia-smi 命令检查GPU状态和进程信息&#xff1a; # 查看GPU信息 !nvidia-smi 输出示例&…...

机器学习ML极简指南

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

flux绘画模型介绍

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

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

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

项目之Boost搜索引擎

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

MyBatis 动态SQL 详解!

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

本节课课堂总结

匿名子类&#xff1a; 说明 和 Java 一样&#xff0c;可以通过包含带有定义或重写的代码块的方式创建一个匿名的子类。 单例对象&#xff08;伴生对象&#xff09; Scala语言是完全面向对象的语言&#xff0c;所以并没有静态的操作&#xff08;即在Scala中没有静态的概念&a…...

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

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

php的高速缓存

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

Real-Time Anomaly Detection of Network Traffic Basedon CNN

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

RHCSA LINUX系统文件管理

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

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

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

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

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

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

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

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

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

【网络流 图论建模 最大权闭合子图】 [六省联考 2017] 寿司餐厅

题目描述&#xff1a; P3749 [六省联考 2017] 寿司餐厅 题目描述 Kiana 最近喜欢到一家非常美味的寿司餐厅用餐。 每天晚上&#xff0c;这家餐厅都会按顺序提供 n n n 种寿司&#xff0c;第 i i i 种寿司有一个代号 a i a_i ai​ 和美味度 d i , i d_{i, i} di,i​&…...

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

对表的操作 新建表 创建一个名为rwh_test的表&#xff0c;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…...

verl单机多卡与多机多卡使用经验总结

文章目录 I. 前言II. SFT2.1 单机多卡2.2 多机多卡 III. RL (GRPO)3.1 单机多卡3.2 多机多卡2.3 模型转换 I. 前言 在上一篇文章verl&#xff1a;一个集SFT与RL于一体的灵活大模型post-training框架 (快速入门) 中&#xff0c;初步探讨了verl框架的基础使用方法。在实际工业级…...