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

01|LangChain | 从入门到实战-介绍



by:wenwenc9

一、基本知识储备

1、什么是大模型,LLM?

大模型(Large Language Model)是近年来一个很热门的研究方向。

使用大量的数据训练出一个非常大的模型。一般是数十亿到上万亿的参数规模。
这些大模型可以捕捉到非常复杂的语言规律和知识,从而具有很强的自然语言处理能力

来自维基百科的介绍

大语言模型 (英语:large language model,LLM)
是一种语言模型,由具有许多参数(通常数十亿个权重或更多)的人工神经网络组成,使用自监督学习或半监督学习对大量未标记文本进行训练[1]。大型语言模型在2018年左右出现,并在各种任务中表现出色[2]。
这个术语没有正式的定义,但它通常指的是参数数量在数十亿或更多数量级的深度学习模型[3]。大型语言模型是通用的模型,在广泛的任务中表现出色,而不是针对一项特定任务(例如情感分析、命名实体识别或数学推理)进行训练[2]。
在预测句子中的下一个单词等简单任务上接受过训练,但发现具有足够训练和参数计数的神经语言模型可以捕获人类语言的大部分句法和语义。
此外大型语言模型展示了相当多的关于世界的常识,并且能够在训练期间“记住”大量事实。

2、什么是langchain?

     
     LangChain 是一个开源框架,旨在简化使用大型语言模型 (LLM) 的应用程序的创建。它提供了链的标准接口、与其他工具的大量集成以及常见应用程序的端到端链。它允许人工智能开发人员基于组合的大型语言模型(LLM)(例如 GPT-4)与外部计算和数据源来开发应用程序。该框架附带了适用于 Python 和 JavaScript 的包。

LangChain 它使用简单,并拥有庞大的用户和贡献者社区。

LangChain 遵循一般流程,用户向语言模型提出问题,其中问题的向量表示用于在向量数据库中进行相似性搜索,并从向量数据库中获取相关信息,然后将响应馈送到语言模型。此外,语言模型生成答案或采取行动。

总的来说,正常模型是基于训练数据,进行已有知识对话或相应行为
,而langchain集成了工具件,可以实现模型获得外部知识,进行对话等操作

关于它的作用

  • 聊天机器人:LangChain 可用于构建与用户自然交互的聊天机器人。例如,LangChain可以用来构建一个聊天机器人,可以回答客户的问题,提供客户帮助,甚至安排约会。
  • 代码分析:LangChain可用于分析代码并发现潜在的错误或安全漏洞。
    使用来源回答问题:LangChain 可用于使用多种来源回答问题,包括文本、代码和数据。例如,LangChain 可用于通过搜索各种来源(例如维基百科、新闻文章和代码存储库)来回答有关特定主题的问题。
  • 数据增强:LangChain可以通过生成与现有数据相似的新数据来增强数据。例如,LangChain可用于生成与现有文本数据相似的新文本数据。这对于训练机器学习模型或创建新数据集非常有用。
  • 文本分类:LangChain可以利用文本输入数据进行文本分类和情感分析
  • 文本摘要:LangChain可用于对指定字数或句子数的文本进行摘要。
  • 机器翻译:LangChain可用于将输入的文本数据翻译成不同的语言。

3、安装langchain

LangChain的基本安装特别简单。

pip install langchain

这是安装 LangChain 的最低要求(安装后可运行基础内容)。

也就是说,在后面的过程,会出现要安装各种插件

用下面两种方法,我们就可以在安装 LangChain 的方法时,引入大多数的依赖项。

安装LangChain时包括常用的开源LLM(大语言模型) 库:

pip install langchain[llms]

安装LangChain时包括大多数相关的库:

pip install langchain[all]


安装完成之后,还需要更新到 LangChain 的最新版本,这样才能使用较新的工具。

pip install --upgrade langchain


如果你想从源代码安装,可以克隆存储库并运行:

pip install -e

langchain官方社区:
https://github.com/langchain-ai/langchain

在这里插入图片描述

二、核心组件说明

 
先来看下面一幅图
 
在这里插入图片描述
在langchain中,下面列举了6大核心模块,上图为这6大模块中的核心组件

  1. Model I/O [模型交互,提示]
  2. Retieval [ 检索 ]
  3. Chains [ 执行序列]
  4. Agents [ 中间件]
  5. Memory [ 存储]
  6. Callbacks

简而言之

1、Model I/O

	与语言模型的交互,比如在线GPT系列,或各种离线模型

2、Retieval

	与应用程序特定数据的接口应用程序,可以是模型,可以是数据库,文档,等等因为它,实现了模型获取外部知识

3、Chains

	构造调用序列链允许我们将多个组件组合在一起,创建一个单一的、一致的应用程序。例如,我们可以创建一个链,该链接接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化后的响应传递给 LLM。我们可以通过将多个链组合在一起,或者通过将链与其他组件组合在一起,来构建更复杂的链。

4、Agents

	让链在给定的高级指令中选择要使用的工具

5、Memory

	在链运行之间保持应用程序状态向量数据库,内存RAM,等交互作用

6、Callbacks

	记录并流式传输任何链的中间步骤

三、使用

1、关于OpenAi

.
ChatGPT和GPT-4,我想就没有必要赘言了,网上已经有太多资料了。但是要继续咱们的LangChain,你需要对OpenAI的API有进一步的了解。

LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些API,搭建起来的一些框架、模块和接口。

因此,要了解LangChain的底层逻辑,需要了解大模型的API的基本设计思路。而目前接口最完备的、同时也是最强大的大语言模型,当然是OpenAI提供的GPT家族模型。

https://openai.com/blog/openai-api

建议去官方文档看看

这两类Model,是大语言模型的代表。当然,OpenAI还提供Image、Audio和其它类型的模型,目前它们不是LangChain所支持的重点,模型数量也比较少

  • Chat Model,聊天模型,用于产生人类和AI之间的对话,代表模型当然是gpt-3.5-turbo(也就是ChatGPT)和GPT-4。当然,OpenAI还提供其它的版本,gpt-3.5-turbo-0613代表ChatGPT在2023年6月13号的一个快照,而gpt-3.5-turbo-16k则代表这个模型可以接收16K长度的Token,而不是通常的4K。(注意了,gpt-3.5-turbo-16k并未开放给我们使用,而且你传输的字节越多,花钱也越多)
  • Text Model,文本模型,在ChatGPT出来之前,大家都使用这种模型的API来调用GPT-3,文本模型的代表作是text-davinci-003(基于GPT3)。而在这个模型家族中,也有专门训练出来做文本嵌入的text-embedding-ada-002,也有专门做相似度比较的模型,如text-similarity-curie-001。

2、配置key

langchain案例均为调用在线OpenAI 模型,需要key,且科学上网才能调用;
点赞关注,提供非科学上网中转请求key;
.
第1步,先注册好你的API Key。

第2步,用 pip install openai 命令来安装OpenAI库。

第3步,导入 OpenAI API Key。

导入API Key有多种方式,其中之一是通过下面的代码:

import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'

OpenAI库就会查看名为OPENAI_API_KEY的环境变量,并使用它的值作为API密钥。

也可以像下面这样先导入OpenAI库,然后指定api_key的值。

import openai
openai.api_key = '你的Open API Key'

当然,这种把Key直接放在代码里面的方法最不可取,因为你一不小心共享了代码,密钥就被别人看到了,他就可以使用你的GPT-4资源!所以,建议你给自己的OpenAI账户设个上限,比如每月10美元啥的。

所以更好的方法是在操作系统中定义环境变量,比如在Linux系统的命令行中使用:

export OPENAI_API_KEY='你的Open API Key'

或者,你也可以考虑把环境变量保存在.env文件中,使用python-dotenv库从文件中读取它,这样也可以降低API密钥暴露在代码中的风险。

3、OpenAi 案例

(1) 调用Text模型

这里没有使用到langchain,为官方的调用封装

import openai# 初始化OpenAI API
openai.api_key = '你的OpenAI API key'
response = openai.Completion.create(model="text-davinci-003",temperature=0.5,max_tokens=1024,prompt="给我一个关于努力学习的,四字成语")print(response.choices[0].text)

输出的结果

勤奋学习

(2) 调用Caht模型

import openai
response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "system", "content": "你是我的女朋呀"},{"role": "user", "content": "给我倒杯水"},],temperature=0.8,max_tokens=60
)
print(response['choices'][0]['message']['content'])

输出

好的,我给你倒杯水。请稍等片刻

``

4、Text模型跟Chat模型优缺点

Chat模型和Text模型都有各自的优点,其适用性取决于具体的应用场景。

相较于Text模型,Chat模型的设计更适合处理对话或者多轮次交互的情况。这是因为它可以接受一个消息列表作为输入,而不仅仅是一个字符串。这个消息列表可以包含system、user和assistant的历史信息,从而在处理交互式对话时提供更多的上下文信息。

这种设计的主要优点包括:

  1. 对话历史的管理:通过使用Chat模型,你可以更方便地管理对话的历史,并在需要时向模型提供这些历史信息。例如,你可以将过去的用户输入和模型的回复都包含在消息列表中,这样模型在生成新的回复时就可以考虑到这些历史信息。
  2. 角色模拟:通过system角色,你可以设定对话的背景,给模型提供额外的指导信息,从而更好地控制输出的结果。当然在Text模型中,你在提示中也可以为AI设定角色,作为输入的一部分。

然而,对于简单的单轮文本生成任务,使用Text模型可能会更简单、更直接。例如,如果你只需要模型根据一个简单的提示生成一段文本,那么Text模型可能更适合。从上面的结果看,Chat模型给我们输出的文本更完善,是一句完整的话,而Text模型输出的是几个名字。这是因为ChatGPT经过了对齐(基于人类反馈的强化学习),输出的答案更像是真实聊天场景。

对OpenAI的API调用,理解到这个程度就可以了。毕竟我们主要是通过LangChain这个高级封装的框架来访问Open AI

5、langchain案例

(1) 调用Text模型

from langchain.llms import OpenAIllm = OpenAI(model="text-davinci-003",temperature=0.8,max_tokens=1024, )
response = llm.predict("用'好好学习'写一句话")
print(response)

输出结果

好好学习,天天向上!

(2) 调用Chat模型

from langchain.chat_models import ChatOpenAIchat = ChatOpenAI(model="gpt-4",temperature=0.8,max_tokens=60)
from langchain.schema import (HumanMessage,SystemMessage
)messages = [SystemMessage(content="你是一个成语接龙高手"),HumanMessage(content="好好学习")
]
response = chat(messages)
print(response)

输出

content='学以致用'

相关文章:

01|LangChain | 从入门到实战-介绍

​ ​ by:wenwenc9 一、基本知识储备 1、什么是大模型,LLM? 大模型(Large Language Model)是近年来一个很热门的研究方向。 使用大量的数据训练出一个非常大的模型。一般是数十亿到上万亿的参数规模。 这些大模型可以捕捉到非常复杂的语言…...

【小白专用】PHP基本语法 23.11.04

PHP基本语法 PHP是超文本预处理器 由服务器解析执行 可以与 html 进行混编(嵌入) ,PHP是一种弱类型语言 1.1 PHP标记 PHP和其他Web语言一样,都是用一对标记将PHP代码包含起来,以便和HTML代码区分开来。PHP支持4种风格的标记,如表所示。 标…...

路由器基础(七):NAT原理与配置

一、NAT 配置 华为路由器配置NAT 的方式有很多种,考试中可能考到的基本配置方 式主要有EasyIP和通过NAT地址池的方式。图22-7-1是一个典型的通过EasyIP进行NAT的示意图,其中Router出接口GE0/0/1的IP地址为200.100.1.2/24,接口E0/0/1的IP地址为192.168.0.…...

Spring Boot 整合SpringSecurity和JWT和Redis实现统一鉴权认证

📑前言 本文主要讲了Spring Security文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句:努力…...

交换机基础(零):交换机基础配置

一、华为设备视图 常用视图 名称 进入视图 视图功能 用户视图 用户从终端成功登录至设备即进 入用户视图,在屏幕上显示 kHuawei> 用户可以完成查看运行状态和统 计信息等功能。在其他视图下 都可使用return直接返回用户视 图 系统视图 在用户视图下&…...

02 线性组合、张成的空间与基

线性组合、张成的空间与基 基向量缩放向量并相加给定向量张成的空间线性相关与线性无关空间的基 这是关于3Blue1Brown "线性代数的本质"的学习笔记。 基向量 当看到一对描述向量的数时,比如[3,-2]时,把这对数中的每个数(坐标&…...

解析mfc100u.dll文件丢失的修复方法,快速解决mfc100u.dll问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“缺少某个文件”的错误。最近,我也遇到了一个这样的问题,那就是“mfc100u.dll丢失”。这个问题可能会导致某些应用程序无法正常运行,给我们带来困扰。…...

免费外文文献检索网站,你一定要知道

01. Sci-Hub 网址链接:https://tool.yovisun.com/scihub/ Sci-hub是一个可以无限搜索、查阅和下载大量优质论文的数据库。其优点在于可以免费下载论文文献。 使用方法: 在Sci—hub搜索栏中粘贴所需文献的网址或者DOI,然后点击右侧的open即可…...

大数据毕业设计选题推荐-收视点播数据分析-Hadoop-Spark-Hive

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

传智杯-21算法赛初赛B组题目详细解法解析-AB题(C/C++、Python、Java)

🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…...

post给后端传递数组和多个参数

这是前端的数据结构 data() {return {loading: false,inputForm: {id: ${gridProject.id},gridName: ,gridId: ,projectName: ,projectId: ,type: },data: [],value: []}}, 其中 gridId 和 type 是单个参数 , value 是个数组,注意 这里data中的value[]不要直接给后…...

音频修复增强软件iZotope RX 10 mac中文特点

iZotope RX 10 mac是一款音频修复和增强软件。 iZotope RX 10 mac主要特点 声音修复:iZotope RX 10可以去除不良噪音、杂音、吱吱声等,使音频变得更加清晰干净。 音频增强:iZotope RX 10支持对音频进行音量调节、均衡器、压缩器、限制器等处…...

【面试】虚拟机栈面试题

目录 一、举例栈溢出的情况二、调整栈大小,能保证不出现溢出吗?三、分配的栈内存越大越好吗?四、垃圾回收是否会涉及到虚拟机栈?五、方法中定义的局部变量是否存在线程安全问题?5.1 说明5.2 代码示例 一、举例栈溢出的…...

白话熵增定律

白话熵增定律 热力学中的熵增定律 熵是指一个系统的混乱程度的度量,是热力学中的一个系统的属性。熵增定律是指一个封闭的系统随着时间的发展,在朝平衡状态发展时,其熵会增加,即其越来越混乱。 对于一个房间,如果经常…...

(论文阅读14/100)End-to-end people detection in crowded scenes

文献阅读笔记 简介 题目 End-to-end people detection in crowded scenes 作者 Russell Stewart, Mykhaylo Andriluka 原文链接 https://arxiv.org/pdf/1506.04878.pdf 关键词 Null 研究问题 当前的人员检测器要么以滑动窗口的方式扫描图像,要么对一组离…...

Go的错误处理

什么是错误? 错误表示程序中发生的任何异常情况。假设我们正在尝试打开一个文件,但该文件在文件系统中不存在。这是一种异常情况,表示为错误。 Go 中的错误是普通的旧值。就像任何其他内置类型(例如 int、float64 等&#xff09…...

云原生相关概念

云计算 指托管在外部数据中心并按使用量付费提供给用户的软件基础设施。公司不必为昂贵的服务器付费并进行维护。相反,他们可以使用云提供商提供的按需云原生服务,例如存储、数据库和分析。 云原生 是在 云计算环境 中构建、部署和管理现代应用程序的…...

【JS】this指向

一、this指向的四种规则 1.默认绑定规则 默认指向:指向window 独立调用:指向window 对象指向,比较的是引用地址。 console.log(this window); //true console.log({} {}); //false //函数的独立调用 function test(){console.lo…...

SpringCloud Alibaba Demo(Nacos,OpenFeign,Gatway,Sentinel)

开源地址: ma/springcloud-alibaba-demo 简介 参考:https://www.cnblogs.com/zys2019/p/12682628.html SpringBoot、SpringCloud 、SpringCloud Alibaba 以及各种组件存在版本对应关系。可参考下面 版本对应 项目前期准备 启动nacos. ./startup.c…...

基于nodejs+vue畅听校园点歌系统的设计与实现

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...

IDEA 设置代码注释模板

功能简介: 每次看别人代码时,面对毫无注释的类,除了头大还是头大, 以下提供了一种代码类注释模板 新建java类的时候,自动增加类注释,养成代码开发好习惯 效果展示: 代码模板: #if (…...

emoji对齐 特殊字符对齐 文本对齐

emoji如何对齐 特殊字符如何对齐 高级文本对齐 问题引出 我们在程序打印输出时,如何我们所输出的字符中包含emoji文本,或者其它特殊的字符文本,则我们的打印对齐效果将出现错位。以下代码复现了这一效果(tips: 马老师…...

Selenium Python 中的动作链

Selenium 是一个用于自动化的独立的基于 Web 的工具。 它是任何人都可以使用的开源工具。 与Python语言结合使用该工具进行测试。 操作链是 Selenium 的基本组成部分,提供了一种管理低级交互的方法,例如按键、鼠标移动、鼠标按钮操作以及与上下文菜单的…...

OceanBase:03-集群部署

目录 一、集群规划 二、配置要求 三、部署前配置 1.配置 limits.conf 2.配置 sysctl.conf 3.关闭防火墙 4.关闭 SELinux 5.创建数据目录,修改文件所有者信息 6.设置无密码 SSH 登录 7.安装jdk 四、解压执行安装 五、集群部署 1.OBD命令行部署 2. OBD白…...

PTA: 矩阵的乘法运算

矩阵的乘法运算 题目输入格式输出格式输入样例输出样例 代码 题目 线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时&…...

4K Video Downloader Pro v4.28.0(视频下载器)

4K Video Downloader Pro是一款专业的视频下载软件,支持从YouTube、Vimeo、Facebook、Instagram、TikTok等主流视频网站下载高质量的4K、HD和普通视频。它的操作流程简单,只需复制视频链接并粘贴到软件中即可开始下载。此外,该软件还提供了多…...

java pdf,word,ppt转图片

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…...

map set

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 3.2 multiset 3.2.1 multiset的介绍 3.2.2 multiset的使用 3.3 map 3.3.1 map的介绍 3.3.2 map的使用 …...

Fourier分析导论——第3章——Fourier级数的收敛性(E.M. Stein R. Shakarchi)

第 3 章 Fourier级数的收敛性(Convergence of Fourier Series) The sine and cosine series, by which one can represent an arbitrary function in a given interval, enjoy among other remarkable properties that of being convergent. This property did not escape…...

解决ruoyi-vue部署到域名子路径静态资源404

参考ruoyi前端手册...